Log4net 如何在页眉/页脚中使用日期模式?

Log4net 如何在页眉/页脚中使用日期模式?,log4net,log4net-configuration,Log4net,Log4net Configuration,这是我的app.config中的appender配置。这只是打印文本字符串,而不是将其转换为日期(即,它字面上打印“[START:%date{MM/dd/yy HH:MM}]”) 如何让它在页眉中打印日期/时间?一种简单的方法是将log4net.Layout.PatternLayout子类化并覆盖页眉和页脚。然后,您可以在标题中添加任何您想要的内容:日期戳、机器名、用户名、程序集版本,或者任何您想要的内容: 使用系统; 使用log4net.Layout; 名称空间MyAssembly { 类

这是我的app.config中的appender配置。这只是打印文本字符串,而不是将其转换为日期(即,它字面上打印“[START:%date{MM/dd/yy HH:MM}]”)



如何让它在页眉中打印日期/时间?

一种简单的方法是将
log4net.Layout.PatternLayout
子类化并覆盖页眉和页脚。然后,您可以在标题中添加任何您想要的内容:日期戳、机器名、用户名、程序集版本,或者任何您想要的内容:

使用系统;
使用log4net.Layout;
名称空间MyAssembly
{
类MyPatternLayout:PatternLayout
{
公共重写字符串头
{
得到
{
var dateString=DateTime.Now.ToString(“yyyy-MM-dd HH:MM:ss”);
返回string.Format(“[START:{0}]\r\n”,日期字符串);
}
}
}
}
在程序集中包含此新类,并在文件中使用新类型,如下所示:



因为您覆盖了页眉和页脚,所以您甚至不需要在这里添加它。每次应用程序启动和文件滚动时,都会添加页眉。

我遇到了这个问题,我使用的一个快速解决方法是只使用固定的页眉和页脚。然后在拥有ILog对象后立即执行此操作:

log.Info(string.Format(“[START:{0}]\r\n”,dateString))

因此,在标题下,您将获得所需的信息

例如

回答来自


对我来说很有魅力。不需要写一段代码

此外,在我们通常使用的项目中:


再看看医生

我还注意到,在您编写第一条日志语句之前,日志文件不会出现。

基于注释构建。请参阅文档

我实际上是在利用这种行为差异来确定开始和结束时间

PatternLayout和DynamicPatternLayout之间的一个重要区别是在配置中处理页眉和页脚参数。DynamicPatternLayout的页眉和页脚参数在语法上必须是PatternString的形式,但不应标记为log4net.Util.PatternString类型。这样做会导致在配置时静态转换模式,并导致DynamicPatternLayout执行与PatternLayout相同的操作

将页眉上的类型设置为PatternString,但将页脚保留为动态



您是否有任何指向PatternLayout类子类化示例的链接?我为您的答案添加了一个示例。是否有一种方法可以覆盖标题,使其像PatternLayout类一样在xml配置中使用Header元素的value属性?如果不下载源代码,我不确定。但即使你能做到这一点,这难道不会让你回到原来的问题上吗?我刚刚试过这个,看起来这些模式在启动时都得到了解决,结果是页脚的时间与页眉的时间完全相同(相差2毫秒)。@sluki:使用
而不是
PatternLayout
===Start===
[START:  2012-02-23 12:12:12 ]

logs...