提供されたコマンドラインスイッチに応じて、次のような実行可能ファイルがあります。
Program.cs -
namespace DiskSpaceReporting
{
class Program
{
static void Main(string[] args)
{
if(args.Length == 1)
{
switch(args[0])
{
case "-summarytotals":
SummaryDiskSpaceReporter.Run();
break;
case "-detailed":
DetailedDiskSpaceReporter.Run();
break;
//...other reporting types
}
}
}
}
}
SummaryDiskSpaceReporter.cs
namespace DiskSpaceReporting
{
public class SummaryDiskSpaceReporter
{
private static IEventIDLog log = EventIDLogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public static void Run()
{
log.Info(1234, "Starting");
//...do work
string message = Helpers.CreateMessage(messageID);
//...do work
}
}
}
DetailedDiskSpaceReporter.cs
namespace DiskSpaceReporting
{
public class DetailedDiskSpaceReporter
{
private static IEventIDLog log = EventIDLogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public static void Run()
{
log.Info(1234, "Starting");
//...do work
string message = Helpers.CreateMessage(messageID);
//...do work
}
}
}
Helpers.cs
namespace DiskSpaceReporting
{
public class Helpers
{
private static IEventIDLog log = ???
public static string CreateMessage(Guid messageID)
{
log.Info(9876, "Starting");
//...do work
}
}
}
私の log4net 構成では、ログ要件が異なるため、SummaryDiskSpaceReporter と DetailedDiskSpaceReporter のそれぞれに 1 つずつ、2 つの個別のロガーがあります。
<root>
<level value="ALL" />
<appender-ref ref="ConsoleLogAppender" />
<appender-ref ref="EventLogAppender" />
</root>
<logger name="DiskSpaceReporting.SummaryDiskSpaceReporter">
<appender-ref ref="SummaryDiskSpaceReporterRollingFileAppender"/>
</logger>
<logger name="DiskSpaceReporting.DetailedDiskSpaceReporter">
<appender-ref ref="DetailedDiskSpaceReporterRollingFileAppender"/>
</logger>
SummaryDiskSpaceReporter と DetailedDiskSpaceReporter はどちらも、Helpers というクラスのヘルパー メソッドを呼び出します。ヘルパー クラスのメソッドにログを記録したいと考えています。
それで...問題は、 Helpers.CreateMessage() メソッドが呼び出し元と同じロガーを使用するようにするにはどうすればよいですか?
すなわち
SummaryDiskSpaceReporter.Run() -> DiskSpaceReporting.SummaryDiskSpaceReporter ロガーを使用します DetailedDiskSpaceReporter.Run() -> DiskSpaceReporting.DetailedDiskSpaceReporter ロガーを使用します。
乾杯ケブ