C++で作成された動的ライブラリ関数にコールバックとして渡されるC#関数があります。これらのコールバックは別のスレッドから呼び出されるかもしれないと思います。コールバック関数は、ロガーを使用している:私は、ロギングモデルとコールバック関数では、ロギングをオンにしたときExclusiveLock対MinimalLock
private static readonly log4net.ILog _Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
のprogrammはちょうどクラッシュ:
<_lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
そして、私が使用した場合の罰金とさらに高速に動作します:
<lockingModel type="log4net.Appender.FileAppender+ExclusiveLock" />
私の場合、ファイルローリングが実行されていないので、MinimalLock
で十分です。私が間違っている? MinimalLock
ケースでプログラムの減速をexplaneするには?
<appender name="DebugLogFileAppender" type="log4net.Appender.RollingFileAppender">
<encoding value="utf-8" />
<param name="File" value="./WrpLog/" />
<_lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<lockingModel type="log4net.Appender.FileAppender+ExclusiveLock" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="Debu\g.yyyy-MM-dd.lo\g" />
<staticLogFileName value="false" />
<maxSizeRollBackups value="10" />
<filter type="log4net.Filter.LevelRangeFilter">
<acceptOnMatch value="true" />
<_levelMin value="INFO" />
<_levelMax value="OFF" />
<levelMin value="ALL" />
<levelMax value="DEBUG" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %m /// %c%n" />
</layout>
</appender>
これは両方のログタイプがスレッドセーフであり、どちらも安全でないことを意味しますか? – vico
彼らはtotを持っていますが、あなたのクラッシュがlog4netによって引き起こされた場合(log4netが投げている)、それを引き起こすために取る手順を見たいと思います。なぜなら、log4netはアプリケーションをクラッシュさせないためです。 – Peter