this thread个人中就有很多人表示他们使用log4net.我是TraceSources的粉丝,想知道为什么要使用log4net.

以下是我喜欢跟踪源的原因:

  • 可插入的监听器——XML、文本文件、控制台、事件日志(log)、滚动您自己的
  • 可自定义的跟踪switch (错误、警告、信息、详细、开始、结束、自定义)
  • 可定制配置
  • 日志(log)应用程序块只是一大组TraceListener
  • 活动/范围的关联(例如,将ASP.NET请求中的所有日志(log)与给定客户关联)
  • Service Trace Viewer允许您单独查看这些活动的事件
  • 所有这些都可以在应用程序中配置.config/web.配置.

自从.NET framework在内部使用TraceSources,它还为我提供了一种一致的配置跟踪的方法——使用log4net,我必须配置log4net和TraceSources.

log4net给了我TraceSources没有的什么(或者这不能通过编写几个自定义的TraceListeners来实现)?

推荐答案

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

可插入侦听器听起来像是appender——有很多,事实上,我甚至侵入了滚动日志(log)文件,以始终结束.日志(log)(用于文件关联),向邮箱appender添加了一个cc字段,并最终为彩色控制台appender调整了我最喜欢的值.

<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
<!-- Can Use:
        Blue
        Green
        Red
        White
        Yellow
        Purple
        Cyan
        HighIntensity
        -->
<mapping>
  <level value="FATAL" />
  <foreColor value="Yellow, HighIntensity" />
  <backColor value="Red" />
</mapping>
<mapping>
  <level value="ERROR" />
  <foreColor value="White" />
  <backColor value="Purple, HighIntensity" />
</mapping>
<mapping>
  <level value="WARN" />
  <backColor value="Blue" />
  <foreColor value="White" />
</mapping>
<mapping>
  <level value="INFO" />
  <backColor value="Green" />
  <foreColor value="White" />
</mapping>
<mapping>
  <level value="DEBUG" />
  <foreColor value="White" />
</mapping>
<layout type="log4net.Layout.PatternLayout">
  <!--<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />-->
  <!--<conversionPattern value="%-5level %file:%line - %message%newline" />-->
  <conversionPattern value="%level %logger:%line %newline     %message%newline" />
</layout>

可定制的跟踪switch :Log4net仅附带致命错误警告信息DEBUG,按详细程度递增的顺序.我实际上唯一错过的是对谁做了什么日志(log)的审计.

可定制配置:我使用log4net.我在运行时加载的配置文件(或者写一个日志(log)到c:\抱怨找不到配置文件)

    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:很抱歉跳过这一集-我相信你的话.

活动/作用域的关联:你是说像每个文件(读类)都有自己的命名日志(log),可以有单独的日志(log)级别阈值吗.事实上,您甚至可以在单个类中对日志(log)进行分段(事实上,这可能已经变得太多了…)

在类文件中:

    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中.配置:

  <logger name="NipissingU.ADWrapper.EntryTools.Attribute">
    <level value="INFO" />
  </logger>
  <logger name="NipissingU.ADWrapper.EntryTools.Cache">
    <level value="WARN" />
  </logger>

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

这里的一切都是我自己的小技巧.

HTH, -迈克

.net相关问答推荐

您可以为 Func 或 Action 类型的函数或子参数指定默认值吗?

如何规范机器之间连字符的排序顺序?

什么是提升运算符?

即时窗口中的动态导致Microsoft.CSharp.RuntimeBinder.Binder未定义或导入错误

我在哪里可以获得线程安全的 CollectionView?

在 C# 中生成随机小数

在c#中计算中位数

每 X 秒执行一次指定函数

ILMerge 最佳实践

如何将时间设置为当天的午夜?

在 .NET 中填充整数列表

如何制作通用类型转换函数

使用 XmlDocument 读取 XML 属性

.Net 正则表达式:单词字符 \w 是什么?

无法加载文件或程序集Antlr3.Runtime (1)或其依赖项之一

什么是 .NET 应用程序域?

为什么甚至可以更改私有成员,或使用反射在 C# 中运行私有方法?

WebClient.DownloadString 由于编码问题导致字符损坏,但浏览器正常

如何判断对象是否已在 C# 中释放

如何将我的应用程序窗口置于最前面?