log4netを使用してログ番号自体にランダムな番号の基本的なParallel.Foreachループを使用しています。ここでLog4netのロギングが並列スレッドで動作しない
は並列スレッドに5000のメッセージ
Logger logger = new Logger();
var numbers = Enumerable.Range(1, 5000);
ParallelOptions parallelOptions =
new ParallelOptions()
{
MaxDegreeOfParallelism = Environment.ProcessorCount
};
Parallel.ForEach(numbers, parallelOptions, number =>
{
logger.Write(Level.Info, "main method", "" + number + "", loggingParameters);
});
を記録しかし、最終的には唯一のログファイルに1600件のメッセージを見るために私のコードです。
これはlog4netの既知の問題ですか?私はここで何か間違っているのですか?
私はAnswerに基づいてcofigに以下の設定を使用しましたが、それでも同じです。
<param name="ImmediateFlush" value="true" />
<log4net debug="false">
<appender name="GeneralRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<file type="log4net.Util.PatternString" value="Logs/All/all_" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd'.log'" />
<maxSizeRollBackups value="10" />
<staticLogFileName value="false" />
<param name="ImmediateFlush" value="true" />
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="INFO" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %message%newline" />
</layout>
</appender>
<root>
<appender-ref ref="GeneralRollingFileAppender" />
</root>
</log4net>
log4netのバージョン:1.2.15.0
これを試しましたか? http://stackoverflow.com/a/2045992/26226 – jrummell
あなたのファイルappender config、特にあなたが使っている 'lockingModel'を表示して、使用しているlog4netのバージョンを指定してください。 – stuartd
@jrummelliはそれを試しましたが、実際にフラッシュするためのバッファされたメッセージはありません。だから、バッファリングされていない.Flush(); – Vivekh