1

ユーザーごとに個別にログファイルを書き込もうとしています

このために、ファイル名のプロパティを現在のユーザーIDとして設定し、log4netを次のように構成しています

log4net.GlobalContext.Properties["userid"] = userId; 
log4net.Config.XmlConfigurator.Configure();

これはすべて正常に機能しており、ユーザーごとに新しいログ ファイルが作成され、ユーザーによるすべてのアクティビティが個別のファイルに記録されます。

複数のユーザーが同時にサービスを要求すると問題が発生し、あるユーザーのログの一部が別のユーザー ファイルに書き込まれるため、すべてのログが同時ユーザー ファイルで混同されます。

user1 の進行中にグローバル設定が user2 によって上書きされているという理由がわかりました。そのため、設定が上書きされると、user1 は user2 のファイルにログを書き込み始めます。

私も試しlog4net.LogicalThreadContextてみlog4net.ThreadContextましたが、それらも機能しませんでした。

これに対する回避策はありますか?

4

1 に答える 1

0

Log4net には 1 つの構成しかありません。したがって、ユーザーごとに異なる構成を取得しても、これを修正することはできません。ただし、ユーザー名をログに記録するか、ユーザーにちなんで名付けられたロガーを作成できます。次に、ユーザーごとに異なるアペンダーを作成し、出力を異なるファイルに記録できます。そして、あなたはlog4net.Config.XmlConfigurator.Configure();一度だけ電話する必要があります。

string userid = (...) ;
ILog log = LogManager.GetLogger(userId);


<log4net>
<appender name="<userid1>" type="log4net.Appender.SitecoreLogFileAppender, Sitecore.Logging">
  ....
</appender>
<appender name="<userid2>" type="log4net.Appender.SitecoreLogFileAppender, Sitecore.Logging">
  ....
</appender>
<logger name="<userid1>">
  <level value="ALL"/>
  <appender-ref ref="<userid1>"/>          
</logger>
<logger name="<userid2>">
  <level value="ALL"/>
  <appender-ref ref="<userid2>"/>          
</logger>
....
于 2013-06-03T13:41:08.153 に答える