简体   繁体   English

以编程方式定义log4net文件附加程序DatePattern属性

[英]Define log4net file appender DatePattern property programatically

I try to instantiate a log4net rollingfile appender programmatically like this: 我尝试以编程方式实例化log4net rollingfile附加程序,如下所示:

private void GetFileAppender(string appenderName)
{
    // Get the logger repository hierarchy.  
    Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();

    /// Set the pattern layout for this appender
    PatternLayout patternLayout = new PatternLayout();
    patternLayout.ConversionPattern = "%date [%thread] %-5level %logger - %message%newline";
    patternLayout.ActivateOptions();

    /// Instantiate a new file appender
    this._fileAppender = new RollingFileAppender();
    this._fileAppender.Name = appenderName + "FileAppender";
    this._fileAppender.AppendToFile = true;
    this._fileAppender.Layout = patternLayout;
    this._fileAppender.File = "C:\\LogTest_";
    this._fileAppender.StaticLogFileName = false;
    this._fileAppender.DatePattern = "dd.MM.yyyy_hh'.log'";
    this._fileAppender.RollingStyle = RollingFileAppender.RollingMode.Size;
    this._fileAppender.MaximumFileSize = "10MB";
    this._fileAppender.MaxSizeRollBackups = 10;

    /// Define filter for this appender
    LevelRangeFilter levelRangeFilter = new LevelRangeFilter { LevelMin = Level.Debug, LevelMax = Level.Fatal, AcceptOnMatch = true };
    DenyAllFilter denyAllFilter = new log4net.Filter.DenyAllFilter();
    this._fileAppender.AddFilter(levelRangeFilter);
    this._fileAppender.AddFilter(denyAllFilter);
    this._fileAppender.ActivateOptions();
    hierarchy.Root.AddAppender(this._fileAppender);
    hierarchy.Root.Level = Level.Debug;
    hierarchy.Configured = true;
}

The logging itself works fine. 日志记录本身运行良好。 The only problem i have is that the pattern for the file name doesnt work. 我唯一的问题是文件名的模式不起作用。 I dont get the DateTime pattern and file extension for the log file defined by the DatePattern property. 我没有得到DatePattern属性定义的日志文件的DateTime模式和文件扩展名。 I just get the "LogTest_" as file name without the dateTime and extension. 我只是获得“ LogTest_”作为文件名而没有dateTime和扩展名。

How can this be solved? 如何解决呢? It forks if i configure it via XAML in my App.config. 如果我通过App.config中的XAML配置它,它会派生。 But i want to solve this programmatically. 但是我想以编程方式解决这个问题。

SOLVED: The problem was that i had to set the RollingStyle to Composite 已解决:问题是我不得不将RollingStyle设置为Composite

this._fileAppender.RollingStyle = RollingFileAppender.RollingMode.Composite;

By doing that it takes the patter defined by the property DatePattern. 通过这样做,它将采用属性DatePattern定义的模式。

See this post . 看到这篇文章

In RollingFileAppender , you have DatePattern property: RollingFileAppender ,您具有DatePattern属性:

RollingFileAppender roller = new RollingFileAppender();
        roller.DatePattern = "yyyy.MM.dd";;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM