当前位置:  开发笔记 > 编程语言 > 正文

log4net与TraceSource

如何解决《log4net与TraceSource》经验,为你挑选了2个好方法。

在这个帖子中,很多人都表示他们使用log4net.我是TraceSources的粉丝,想知道为什么使用log4net.

这就是我喜欢跟踪源的原因:

可插入的侦听器 - XML,TextFile,Console,EventLog,自己动手

可定制的跟踪开关(错误,警告,信息,详细,开始,结束,自定义)

可定制的配置

Logging Application Block只是一大组TraceListeners

活动/范围的关联(例如,将ASP.NET请求中的所有日志与给定客户相关联

服务跟踪查看器允许您单独显示针对这些活动的事件

所有这些都可以在app.config/web.config中配置.

由于.NET框架在内部使用TraceSources,它也为我提供了一种配置跟踪的一致方法 - 使用log4net,我必须配置log4net以及TraceSources.

什么log4net给我TraceSources没有(或通过编写几个自定义TraceListener无法完成)?



1> Sly Gryphon..:

在早期(.NET 1.0)中,.NET Framework中的跟踪非常有限.

例如,TraceSource分区直到.NET 2.0才出现,你只有四个级别(错误,警告,信息,详细),尽管你可以使用六个布尔开关进行分区.

log4j在Java中非常流行,因此得到了很多.NET端口的支持,一旦它变得流行,它就会保持这种状态,即使人们甚至没有正确使用它(例如将其包装在单独的记录器中并丢失这是主要特色).

尽管如此,我认为log4net和其他框架(例如NLog,Common.Logging,甚至是EntLib)都是通过从头开始实现自己的日志记录系统而走错了方向,即改变了首先编写日志语句的方式.

我更倾向于看到努力,特别是从.NET 2.0开始,扩展.NET已经存在的基础.对于扩展已有功能的项目,请查看CodePlex上的Essential Diagnostics项目(http://essentialdiagnostics.codeplex.com/).

log4net的一些优点:

它类似于log4j,如果您运行混合环境并且需要一致的日志记录.

与您实现并且必须配置每个跟踪源的跟踪源数量相比,继承设置的自动记录器层次结构非常简洁.(虽然在某些情况下可能有点过分).

log4net已经有大约28个appender(相当于跟踪侦听器),而System.Diagnostics只有10个(但是请参阅Essential.Diagnostics项目了解更多),所以如果你真的认为你可能需要RemoteSyslogAppender,NetSendAppender,AnsiColorTerminalAppender或TelnetAppender,那么你很幸运

缺点(与System.Diagnostics相比):

您需要使用不同的日志记录语法,因此如果您已经在使用source.TraceEvent(),则需要遍历并替换所有内容.

这也扩展到不同的相关语法,因此您需要从CorrelationManager更改为log4net上下文.

不容易与Framework跟踪集成(例如WCF).

对事件ID的支持不佳(需要使用单独的扩展项目IEventLog).

尚不支持Windows(Vista)的事件跟踪或Service Trace Viewer XML格式.



2> Mike Bonnell..:

我认为log4net正在为你列出的每一件事都做.

可插入的侦听器听起来像appender - 有很多它们实际上我甚至黑客滚动日志文件总是以.log结尾(用于文件关联),在电子邮件appender中添加了一个cc字段,并最终调整了我最喜欢的值彩色控制台appender.如果我可以这么大胆 - 我的彩色控制台快乐:




  
  
  


  
  
  


  
  
  


  
  
  


  
  


  
  
  

可自定义的跟踪开关:Log4net只附带致命错误警告信息调试,以增加详细程度.我唯一真正想念的是审核谁做了什么记录.

可自定义的配置:我使用log4net.config文件,我在运行时加载(或写日志到c:\ whining,我找不到配置.)

    Try
        ' Get log4net configuration from file
        Dim logConfigFile As FileInfo
        logConfigFile = New FileInfo(".\log4net.config")

        If logConfigFile.Exists Then
            XmlConfigurator.Configure(logConfigFile)
        Else
            CreateEmergenceLogFile(logConfigFile.FullName)
        End If

    Catch ex As Exception
        Console.Out.WriteLine("Could not load the log4net config file")
    End Try

只是一大堆TraceListeners:抱歉跳过那一个 - 我会接受你的话.

活动/范围的相关性:您是否意味着每个文件(读取类)都会获得自己的命名日志,该日志可以具有单独的日志级别阈值.实际上,即使在一个类中,您也可以对日志记录进行分段(实际上可能已经增长了太多......)

在类文件中:

    Private Shared _logger As log4net.ILog = _
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)

Private Shared _loggerAttribute As log4net.ILog = _
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName & ".Attribute")

Private Shared _loggerCache As log4net.ILog = _
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName & ".Cache")

服务跟踪查看器:在log4net.config中:

  
    
  
  
    
  

所有这些都可以在app.config/web.config中配置:也许这在ASP.NET中是件好事,我不知道,但是在制作富客户端bean计数应用程序时,我喜欢单独的配置文件.

这里的一切都只是我自己的一些小用途.

我,迈克


Mike,你刚刚确认log4net会在.NET Framework*中完成已经内置到TraceSource中的所有内容.问题是"log4net给了我什么TraceSources没有?",即log4net提供的除了普通.NET之外的其他东西.
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有