Sly*_*Sly 80 .net c# logging log4net episerver
有两种配置和使用log4net的方法.第一个是我可以配置自己的appender和相关的记录器:
<!-- language: xml -->
<appender name="myLogAppender" type="log4net.Appender.RollingFileAppender" >
<file value="Logs\myLog.log" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level - %message%n" />
</layout>
</appender>
<logger name="myLog">
<level value="All"></level>
<appender-ref ref="myLogAppender" />
</logger>
Run Code Online (Sandbox Code Playgroud)
然后,当我想在日志中写一些东西时,我可以执行以下操作:
ILog log = LogManager.GetLogger("myLog");
log.Info("message");
Run Code Online (Sandbox Code Playgroud)
另一种使用方法是将root配置为我想要的详细信息:
<!-- language: xml -->
<root>
<level value="Error" />
<appender-ref ref="myLogAppender" />
</root>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我可以记录这样的消息:
ILog log = LogManager.GetLogger(typeof(Bar));
log.Info("message");
Run Code Online (Sandbox Code Playgroud)
第二种方法的好处是您可以动态启用或禁用某些消息.但问题是我正在使用EPiServer CMS进行开发,它有自己的使用log4net的日志记录系统,如果我在根级别启用信息日志记录,那么将编写大量系统日志.
你如何使用log4net?系统的每个部分都在自己的记录器中写入,或者所有内容都是用默认记录器编写的,配置决定下一步做什么?
Col*_*inE 94
关于如何在代码中记录消息,我会选择第二种方法:
ILog log = LogManager.GetLogger(typeof(Bar));
log.Info("message");
Run Code Online (Sandbox Code Playgroud)
发送到上述日志的消息将使用完全限定类型"命名" Bar
,例如
MyNamespace.Foo.Bar [INFO] message
Run Code Online (Sandbox Code Playgroud)
这种方法的优点是它是组织日志记录的事实上的标准,它还允许您按命名空间过滤日志消息.例如,您可以指定要记录INFO级别消息,但是将日志级别提升Bar
为DEBUG:
<log4net>
<!-- appenders go here -->
<root>
<level value="INFO" />
<appender-ref ref="myLogAppender" />
</root>
<logger name="MyNamespace.Foo.Bar">
<level value="DEBUG" />
</logger>
</log4net>
Run Code Online (Sandbox Code Playgroud)
通过名称过滤日志记录的功能是log4net的一个强大功能,如果您只是记录所有消息"myLog"
,那么您将失去大部分功能!
关于EPiServer CMS,您应该能够使用上述方法为CMS和您自己的代码指定不同的日志记录级别.
为了进一步阅读,这是我在日志记录中写的代码项目文章:
我的回答可能会迟到,但我认为它可以帮助新手.除非进行如下更改,否则您不会看到执行的日志.
在[ app.config ] 里面:
首先,在'configSections'下,你需要在下面添加一段代码;
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
Run Code Online (Sandbox Code Playgroud)
然后,在'configuration'块下,你需要在下面写一段代码.(这段代码是根据我的需要定制的,但它就像魅力一样.)
<log4net debug="true">
<logger name="log">
<level value="All"></level>
<appender-ref ref="RollingLogFileAppender" />
</logger>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="log.txt" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="1" />
<maximumFileSize value="1MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %C.%M [%line] %-5level - %message %newline %exception %newline" />
</layout>
</appender>
</log4net>
Run Code Online (Sandbox Code Playgroud)
内部通话类:
在您要使用此log4net的类中,您需要声明下面的代码段.
ILog log = LogManager.GetLogger("log");
Run Code Online (Sandbox Code Playgroud)
现在,您可以在同一个类中随时随地调用日志.下面是您在执行操作时可以调用的方法之一.
log.Error("message");
Run Code Online (Sandbox Code Playgroud)
小智 7
我没有命名我的调用类,而是开始使用以下内容:
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Run Code Online (Sandbox Code Playgroud)
这样,我可以在每个使用log4net的类中使用同一行代码,而不必记住复制粘贴时更改代码。或者,我可以创建一个日志类,并让所有其他类从我的日志类继承。
归档时间: |
|
查看次数: |
128694 次 |
最近记录: |