什么是使用log4net登录文件的最佳方式,该格式具有正确的格式(正确的XML,正确的时间戳格式,正确格式的自定义数据,正确的属性,基本上与XmlWriterTraceListener完全一样),所以可以在Service Trace Viewer Tool (SvcTraceViewer.exe)查看?使用log4net创建可用SvcTraceViewer.exe查看的日志文件
回答
如果我想这样,那么我会写我的自定义布局。我没有(看)的细节,但我会写一个派生自XmlLayoutBase
的课程。我需要更多的时间来看看细节...
你也可以编写自己的appender,但我认为在这种情况下,编写布局类更有意义。
编辑:也许写你自己的appender是一个好主意。在这种情况下,您可以使用System.ServiceModel.Diagnostics.DiagnosticTrace
类。不确定,但如果这是要走的路。我现在没有太多时间,但我会研究这一点。
这里有一个想法:
你可以写一个自定义log4net的追加程序,并把它写消息(间接)的XmlWriterTraceListener。在Append方法中,您只需将消息发送到System.Diagnostics。
这是一个自定义Appender的example。
在此示例中,Append被覆盖。它传递了一个LoggingEvent类/结构。出于您的目的(将log4net输出路由为可由SvcTraceViewer读取的输出格式),您可以将输出写入System.Diagnostics(首先将其配置为登录到XmlWriterTraceListener)。您可以使用Trace.Write *方法,Trace.Trace *方法或TraceSources编写。
对于TraceSources,您可以考虑TraceSource名称与记录器名称相同(可在LoggingEvent类/结构中使用)。因此,您可以在您的app.config文件中为您想要进入xml文件的每个log4net记录器名称配置一个TraceSource。你的追加逻辑可能看起来像这样:
protected override void Append(LoggingEvent le)
{
TraceSource ts = new TraceSource(le.LoggerName); // Not sure of logger name field in LoggingEvent
ts.TraceEvent(LogLevelToTraceEventType(le.Level), 0, le.FormattedMessage);
}
这可能会给你你想要的。请注意,我并没有真正做到这一点,所以我不能说这是不是一个好主意,但它看起来好像会起作用。
对不起,我只是想在离开之前完成这个工作。
编写一个自定义appender(仅用于格式化)有一个缺点:我不能使用所有其他Appender(RollingFileAppender,FileAppender,...),或者我必须继承所有这些appender。 – bitbonk 2010-09-16 05:42:13
FWIW,你可以在这里找到XmlWriterTraceListener的代码:http://www.koders.com/csharp/fid7ECC273D0A665AFFDB9276AC64289085CD1E2A8E.aspx?s=DateTime我不知道它是如何当前它(即.NET 1.1,2.0,3.0等等),但它似乎展示了如何以可由SvcTraceViewer使用的格式布置xml。也许这可以用来开发一个XmlLayout。我对编写log4net布局并不是很熟悉,所以我不能说这是否是个好主意。 – wageoghe 2010-09-21 19:42:03
自定义appender恕我直言,不可能,因为我无法使用该格式写入其他appender。我想用这种格式写入RollingFileAppender。 – bitbonk 2010-09-22 07:13:55
- 1. 使用Log4Net创建ReadOnly日志文件
- 2. Log4net - 不创建日志文件
- 3. log4net - 只创建一个日志文件
- 4. log4net动态创建日志文件
- 5. Log4net不为NHibernate创建日志文件
- 6. Log4net未创建日志文件
- 7. 未创建Log4net日志文件?
- 8. log4net日志文件没有创建
- 9. 使用Log4net的事件查看器中的日志信息
- 10. 如何使用log4net创建单个日志文件
- 11. 使用Log4Net时未创建日志文件
- 12. log4net日志记录没有创建日志文件
- 13. 用log4net创建动态名称的多个日志文件
- 14. 使用FileSystemWatcher监视log4net日志文件
- 15. 关于日志创建和写入日志的Log4Net事件FileAppender
- 16. Log4Net不会在事件查看器中创建自定义事件日志
- 17. 在C++/CLI中使用时未创建C#应用程序log4net日志文件
- 18. 使用htaccess创建日志文件
- 19. Log4Net C# - 按日期创建日志文件夹
- 20. log4net不会为引用的项目文件创建日志文件
- 21. 为什么log4net在使用RollingFileAppender时创建两个单独的日志文件?
- 22. 未使用Log4Net创建的文件
- 23. Log4net无法写入事件日志,只创建文件
- 24. 可能使用提升的权限创建的日志文件
- 25. 查看Oracle日志文件
- 26. Umbraco查看日志文件
- 27. 查看Unix日志文件
- 28. Log4Net配置 - 无系统创建的日志文件
- 29. 在目录中创建文件的日志,可能使用inotify
- 30. 用户创建的日志文件
我想你的意思是System.Diagnostics.XmlWriterTraceListener。 – bitbonk 2010-09-15 14:13:26
你是对的。我在没有验证确切的监听器名称的情况下键入了它。无论如何,我仍然对如何从log4net,NLog等获得与SvcTraceViewer.exe兼容的输出(如果可能的话)感兴趣。 – wageoghe 2010-09-15 16:42:32