在log4net

时间:2015-08-19 08:18:51

标签: c# log4net log4net-configuration

它如何运作

我已经使用了log4net一段时间了,通常我的配置看起来就像那样:

        Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
        hierarchy.Configured = true;

        _roller = new RollingFileAppender();
        _patternLayout = new PatternLayout();
        _roller.Layout = _patternLayout;


        hierarchy.Root.AddAppender(_roller);


        hierarchy.Root.Level = Level.Info
        _roller.AppendToFile = true;
        _roller.File = Path.Combine(FileDirectory, ".log");
        _roller.StaticLogFileName = false;
        _roller.PreserveLogFileNameExtension = true;
        _roller.LockingModel = new FileAppender.MinimalLock();
        _roller.MaxSizeRollBackups = -1; //--> Logger doesn't delete files himself
        _roller.RollingStyle = RollingFileAppender.RollingMode.Composite;
        _roller.MaximumFileSize = LogFileSize;
        _roller.DatePattern = "yyyy-MM-dd";
        _roller.PreserveLogFileNameExtension = true;

        _patternLayout.ConversionPattern = "%date [%-5level] %message%newline";
        _patternLayout.ActivateOptions();

        _roller.ActivateOptions();

我通过c#代码配置log4net组件,因为我需要动态。

生成的文件,如下所示:

  • YYYY-MM-dd.log
  • YYYY-MM-dd.Count.log

我的问题

现在我的日志文件应该这样命名:

  • OPCReaderClient_yyyy-MM-dd.log
  • OPCReaderClient_yyyy-MM-dd.Count.log

这就是为什么我对配置进行了以下更改

        _roller.DatePattern = "OPCReaderClient_yyyy-MM-dd";

但结果如下: OPCRea19erClienA_2015-08-19.log

为什么?

关键是,我希望前缀是动态的。所以我需要知道如何只要前缀只包含ASCII字符就能正确命名我的日志文件。

1 个答案:

答案 0 :(得分:1)

因为Rea d er中的d specifier代表单日格式说明符,而Clien t 中的t specifier代表一个字符AM / PM指示符。如果你不逃避它们,它们就像自定义日期和时间格式字符串一样。

other characters are copied from the result

如果你愿意,你可以逃避它们;

_roller.DatePattern = "OPCRea'd'erClien't'_yyyy-MM-dd";