获取当前日志文件Enterprise Library 5.0的文件名

时间:2013-04-30 08:42:33

标签: c# logging enterprise-library-5 logging-application-block

在MS Enterprise Library 5.0中,在运行时记录应用程序块,我可以获取日志所针对的日志文件(Flat File Listener)的名称吗?

2 个答案:

答案 0 :(得分:2)

您可以使用配置对象获取该信息:

IConfigurationSource configSource = ConfigurationSourceFactory.Create();
var logSettings = configSource.GetSection(LoggingSettings.SectionName) as LoggingSettings;

var flatFileTraceListener = logSettings.TraceListeners
    .First(t => t is FlatFileTraceListenerData) as FlatFileTraceListenerData;

string fileName = flatFileTraceListener.FileName;

这假设您对第一个作为FlatFileTraceListener的跟踪侦听器感兴趣。如果您想按类型和名称获取跟踪侦听器,那么您也可以这样做:

IConfigurationSource configSource = ConfigurationSourceFactory.Create();
var logSettings = configSource.GetSection(LoggingSettings.SectionName) as LoggingSettings;

var flatFileTraceListener = logSettings.TraceListeners
    .FirstOrDefault(t => t is FlatFileTraceListenerData && t.Name == "Flat File Trace Listener")
    as FlatFileTraceListenerData;

string fileName = flatFileTraceListener.FileName;

答案 1 :(得分:0)

更改配置没问题。
更改文件名属性 aaa.log - >之后 bbb.log 记录器未写入新文件名。
更改的配置必须保存/激活(?)或记录器必须新的已初始化..!??

    IConfigurationSource configSource = ConfigurationSourceFactory.Create();
    var logSettings = configSource.GetSection(LoggingSettings.SectionName) as LoggingSettings;

    var rollFileTraceListener = logSettings.TraceListeners
        .FirstOrDefault(t => t is RollingFlatFileTraceListenerData && t.Name == "RollingFlatFileTraceListener")
        as RollingFlatFileTraceListenerData;

    string fileName = rollFileTraceListener.FileName;
    rollFileTraceListener.FileName = fileName.Replace("aaa", "bbb");

    LogWriterFactory f = new LogWriterFactory(configSource);
    f.Create();
    Logger.Reset();
    LogEntry logEntry = new LogEntry();
    logEntry.Message = $"{DateTime.Now} Count:{333}";
    logEntry.Categories.Clear();
    logEntry.Categories.Add("General");

    Logger.Write(logEntry);