【问题标题】:Having Log filenames with "AnyName"_yyy-MM-dd.log in log4net在 log4net 中具有带有“AnyName”_yyy-MM-dd.log 的日志文件名
【发布时间】:2015-08-19 08:18:50
【问题描述】:

它是如何工作的

我已经使用 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 字符。

【问题讨论】:

    标签: c# log4net log4net-configuration


    【解决方案1】:

    因为 Reader 中的 d specifier 代表单日格式说明符,而 Client 中的 t specifier 代表一个字符的 AM/PM 指示符。如果您不对其进行转义,它们将表现为自定义日期和时间格式字符串。

    还有other characters are copied from the result

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

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

    【讨论】:

    • 所以这也有效:"'" + Prefix + "'_yyyy-MM-dd"?
    • @LuckyLikey 是的,如果您不转义它们,它们将表现为自定义日期和时间格式字符串。您可以像以前一样转义所有前缀字符串。
    • 它按预期工作,谢谢。会尽快接受你的回答
    猜你喜欢
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多