У меня есть исполняемый файл, который в зависимости от предоставленного переключателя командной строки выглядит примерно так:
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, потому что их требования к журналированию различаются:
<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() использовать тот же регистратор, что и его вызывающая сторона?
i.e.
SummaryDiskSpaceReporter.Run() -> использовать средство ведения журнала DiskSpaceReporting.SummaryDiskSpaceReporter DetailedDiskSpaceReporter.Run() -> использовать средство ведения журнала DiskSpaceReporting.DetailedDiskSpaceReporter.
Привет Кев