在 log4net 中使用 "AnyName"_yyy-MM-dd.log 的日志文件名
Having Log filenames with "AnyName"_yyy-MM-dd.log in log4net
它是如何工作的
我已经使用 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 字符,我的任何日志文件都将被正确命名。
因为d
specifier in Reader represents single day format specifier and t
specifier在Client代表一个字符AM/PM指示符。如果您不对它们进行转义,它们将表现为自定义日期和时间格式字符串。
和other characters are copied from the result.
如果你愿意,你可以转义它们;
_roller.DatePattern = "OPCRea'd'erClien't'_yyyy-MM-dd";
它是如何工作的
我已经使用 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 字符,我的任何日志文件都将被正确命名。
因为d
specifier in Reader represents single day format specifier and t
specifier在Client代表一个字符AM/PM指示符。如果您不对它们进行转义,它们将表现为自定义日期和时间格式字符串。
和other characters are copied from the result.
如果你愿意,你可以转义它们;
_roller.DatePattern = "OPCRea'd'erClien't'_yyyy-MM-dd";