アプリケーションの実行中にfileappenderのログファイルの名前を変更することはできますか? これは1日に数回行われます。ランタイム中にログファイルの名前を数回変更する
私はもう少し詳しく説明しよう:私のアプリはデバイスにファームウェアを書き込む。ユーザーがすでに作業していたすべてのデバイスはグリッド内にあります。ユーザーは、新しい書き込みウィザードを開始することができます。または、すでに起動しているデバイスでアクションを再開または再開できます。 私がしたいのは、特定のデバイスに対してユーザーが実行したすべてのステップのログを保持することです。
たとえば、ユーザーがデバイスAB0124で作業しているときに、AB0124.logというログファイルに書き込みたいとします。彼はそのデバイスに取り組んで終了し、デバイスXY5618上で起動すると、私はそれがコンテキスト・プロパティ(hereとhereや他の記事の多くを)使用することは可能だと私は読んだXY5618.log
にそれらのアクションを記録したいですただし、ロガーを作成する前にプロパティを設定する必要があります。 したがって、クラス内にロガーを作成するのではなく、プロパティを設定した後にメソッド内にロガーを作成します。 これまでに何も記録されていません。
configにハードコードされたファイル名を設定すると動作します。 ここには何か不足していますか?
Log4Net.config:
<appender name="StepsLogAppender" type="log4net.Appender.FileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<file type="log4net.Util.PatternString" value="%property{LogPathModifier}" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{dd/MM/yyyy - HH:mm:ss} - %message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="StepsLogAppender" />
</root>
のC#:
public void WriteStepInfo(string device, int step)
{
log4net.ThreadContext.Properties["LogPathModifier"] = string.Format("D:\\StepsDevice_{0}.txt", device);
var log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
log.Info(string.Format("Device {0} - step {1}.", device, step));
}
そしてAssemblyInfo.csで:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]
ありがとうございます。正確に私が必要なもの! – AngieM
これは私が見つけた最良の実装です...ありがとうございました... – Emerson