这是我的app.config中的appender配置。这只是打印出文字字符串而不是将其翻译成日期(即,字面上打印“[START:%date {MM / dd / yy HH:mm}]”。
<appender name="RollingLogFileAppender"
type="log4net.Appender.RollingFileAppender">
<file value="C:\somelog" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="-yyyy-MM-dd'.txt'" />
<layout type="log4net.Layout.PatternLayout">
<header value="[START: %date{MM/dd/yy HH:mm} ] " />
<conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - %message" />
<footer value="[END] " />
</layout>
</appender>
如何在标题中打印日期/时间?
答案 0 :(得分:17)
来自here的答案。
<header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
<footer value="[END LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
对我来说就像一个魅力。无需编写一段代码。
同样在我们通常使用的项目中:
<header type="log4net.Util.PatternString" value="Our Application Name version %property{Assembly.Version}, .NET version %property{Runtime.Version}, %date ***%newline"/>
同时查看PatternString doc。
此外,我注意到在您编写第一个日志语句之前,日志文件不会出现。
答案 1 :(得分:14)
一种简单的方法是继承log4net.Layout.PatternLayout
并覆盖页眉和页脚。然后你可以在你的标题中添加你想要的任何东西:日期标记,机器名称,用户名,装配版本或任何你想要的东西:
using System;
using log4net.Layout;
namespace MyAssembly
{
class MyPatternLayout : PatternLayout
{
public override string Header
{
get
{
var dateString = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
return string.Format("[START: {0} ]\r\n", dateString);
}
}
}
}
在程序集中包含此新类,并在文件中使用新类型,如下所示:
<layout type="MyAssembly.MyPatternLayout">
<conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - %message" />
</layout>
由于您覆盖页眉和页脚,您甚至不需要在此处添加它。每次应用程序启动时,以及每次文件翻转时都会添加标题。
答案 2 :(得分:1)
我遇到了这个问题,我使用的快速解决方法是使用固定的页眉和页脚。然后在有ILog对象后立即执行此操作:
log.Info(string.Format("[START: {0} ]\r\n", dateString))
所以在标题下你会得到你想要的信息。
E.g
===Start===
[START: 2012-02-23 12:12:12 ]
logs...
答案 3 :(得分:0)
以@Wizou's评论为基础。请参阅DynamicPatternLayout Class文档。
我实际上正在使用这种行为差异来获得开始和结束时间
PatternLayout和DynamicPatternLayout之间的一个重要区别是处理配置中的页眉和页脚参数。 DynamicPatternLayout的Header和Footer参数必须在语法上以PatternString的形式出现,但不应将其标记为log4net.Util.PatternString类型。这样做会导致模式在配置时静态转换,并导致DynamicPatternLayout执行与PatternLayout相同的操作。
将Header上的类型设置为PatternString,但将Footer保留为动态
<layout type="log4net.Layout.DynamicPatternLayout">
<param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline" type="log4net.Util.PatternString" />
<param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline" />
</layout>