在log4net中使用带有“AnyName"_yyy-MM-dd.log”的日志文件名

本文关键字:yyy-MM-dd log 文件名 日志 quot log4net AnyName | 更新日期: 2023-09-27 18:08:52

如何使用

我已经使用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. -日志

<标题>为什么?

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

在log4net中使用带有“AnyName"_yyy-MM-dd.log”的日志文件名

由于Reader中的d指示符表示单日格式指示符,而Client中的t指示符表示一个字符的AM/PM指示符。如果您不转义它们,它们将作为自定义日期和时间格式字符串。

从结果中复制其他字符。

可以转义,如;

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