我已经使用了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组件,因为我需要动态。
生成的文件,如下所示:
现在我的日志文件应该这样命名:
这就是为什么我对配置进行了以下更改
_roller.DatePattern = "OPCReaderClient_yyyy-MM-dd";
但结果如下: OPCRea19erClienA_2015-08-19.log
关键是,我希望前缀是动态的。所以我需要知道如何只要前缀只包含ASCII字符就能正确命名我的日志文件。
答案 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";