Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net log4net与TraceSource_.net_Logging_Log4net_Trace_Diagnostics - Fatal编程技术网

.net log4net与TraceSource

.net log4net与TraceSource,.net,logging,log4net,trace,diagnostics,.net,Logging,Log4net,Trace,Diagnostics,在许多情况下,有人表示他们使用log4net。我是TraceSources的粉丝,想知道为什么使用log4net 以下是我喜欢跟踪源的原因: 可插入监听器-XML、文本文件、控制台、事件日志、滚动您自己的 可自定义跟踪开关(错误、警告、信息、详细、开始、结束、自定义) 可定制配置 日志应用程序块只是一大组TraceListener 活动/范围的关联(例如,将ASP.NET请求中的所有日志与给定客户关联 “服务跟踪查看器”允许您分别对这些活动的事件进行可视化 所有这些都可以在app.config

在许多情况下,有人表示他们使用log4net。我是TraceSources的粉丝,想知道为什么使用log4net

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

  • 可插入监听器-XML、文本文件、控制台、事件日志、滚动您自己的
  • 可自定义跟踪开关(错误、警告、信息、详细、开始、结束、自定义)
  • 可定制配置
  • 日志应用程序块只是一大组TraceListener
  • 活动/范围的关联(例如,将ASP.NET请求中的所有日志与给定客户关联
  • “服务跟踪查看器”允许您分别对这些活动的事件进行可视化
  • 所有这些都可以在app.config/web.config中配置
由于.NET framework在内部使用TraceSources,因此它也为我提供了一种配置跟踪的一致方法—使用log4net,我必须配置log4net和TraceSources


log4net给了我什么TraceSources没有的(或者写几个定制的TraceListener无法做到的)?

我更喜欢log4net而不是使用目标跟踪之一的原因-有了log4net,我可以独立地为我的应用程序的不同层(数据访问、服务、业务逻辑等)和不同的子系统安装仪器(认证、处理等)并独立打开/关闭每个子系统的日志记录

这种灵活性允许我为一个子系统配置详细的日志记录,而无需打开整个系统的消防软管

Trace类上提供的静态方法[例如TraceInformation()]没有提供任何方法来指定日志记录来自哪个子系统,因此编写自己的TraceListener并不容易做到这一点


另一个原因是性能-我的应用程序中有一部分每秒可能记录数千条消息。Log4Net的开销很低。相比之下,上次我查看它时,日志应用程序块为记录的每条消息重新解析了其XML配置,这使得该块非常沉重和缓慢。

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

可插入监听器听起来像是appender——有很多,事实上,我甚至入侵了滚动日志文件始终以.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>
只是一大套TraceListener:很抱歉跳过了这一套——我相信你的话

活动/范围的相关性:你是说像每个文件(读取类)都有自己的命名日志,可以有单独的日志级别阈值。事实上,你甚至可以在单个类中分割日志(事实上,可能已经发展到做太多了…)

在类文件中:

    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中:

  <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计数应用程序时,我喜欢一个单独的配置文件

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

嗯,,
-Mike

虽然我只知道log4net的工作方式,但使用该框架的一个明显好处是,对于那些习惯使用log4j的人来说,可以立即熟悉它

另一个小小的好处是,使用log4net进行测试驱动日志记录非常简单;日志记录器实现log4net.ILog。同样,我不熟悉Microsoft解决方案,但我想知道,如果不先为System.Diagnostics.Trace类编写外观,如何做到这一点

粗略地看一下跟踪源文档,我找不到与layouts等效的文件,我想知道是否存在此类等效文件。PatternLayout非常方便地使用诸如日期戳、线程信息、日志上下文等常用数据格式化日志条目。Log4net PatternLayout文档:

此外,考虑到为日志框架编写扩展可能是一个典型的“元问题”,log4net确实为表中提供了大量可插入侦听器等价物

附录列表:

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

例如,TraceSource分区直到.NET2.0才出现,您只有四个级别(错误、警告、信息、详细),但如果需要,您可以使用六个布尔开关进行分区

log4j在Java中很流行,因此得到了很多对.NET端口的支持,一旦它流行起来,它就一直保持这种状态,尽管人们甚至没有正确地使用它(例如,将它包装在单例记录器中,并失去了它的主要功能)

尽管如此,我认为log4net和其他框架(例如NLog、Common.Logging,甚至EntLib)从一开始就实现了自己的日志系统,这是错误的,也就是说,甚至改变了您编写日志语句的方式

我更希望看到扩展.NET中已有内容的坚实基础所付出的努力,尤其是.NET 2.0以来。对于扩展现有内容的项目,请查看CodePlex()上的Essential Diagnostics项目

log4net的一些优势:

  • 如果您运行一个混合环境并希望日志记录一致,那么它与log4j类似

  • 继承设置的自动记录器层次结构非常整洁,相比之下,您实现了多少跟踪源,并且必须对每个跟踪源进行配置(尽管在某些情况下可能会过度杀戮)

  • log4net已经有大约28个Appender(相当于跟踪侦听器),而System.Diagnostics只有10个(但更多信息请参见Essential.Diagnostics项目),因此如果您确实认为可能需要RemoteSyslogAppender、NetSendAppender、AnsiColorTerminalAppender或TelnetAppender,那么您就很幸运了

缺点(与系统相比)
  <logger name="NipissingU.ADWrapper.EntryTools.Attribute">
    <level value="INFO" />
  </logger>
  <logger name="NipissingU.ADWrapper.EntryTools.Cache">
    <level value="WARN" />
  </logger>