第一点:权限问题,一定要给要写入日志文件的目录宽松的权限。
本人就是因为权限问题浪费了很多时间。(因为iis user 的权限是相对低的,log4net又需要创建文件,所以权限一定要给足,后面可以用应用程序池配置)
本人想用单独配置文件,所以基本步骤如下:
1:下载net4log,
具体地址就不贴了,给一个官网的配置说明页:
http://logging.apache.org/log4net/release/manual/configuration.html
2:使用对应版本的dll,
一定要使用对应版本的,我就因为使用的版本不对应,浪费了时间
2.0就是选2.0,4.0就选4.0
3:在项目中引入dll
4:使用单独的配置文件,这样做的好处–修改log4net的配置不会影响到整个应用重启。我的路径是:
Configure目录下,log4netConfig.xml文件
Configure\log4netConfig.xml
具体内容:自己可看相应的说明
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<!--日志记录组建配置-->
<log4net>
<!-- Console部分log输出格式的设定 -->
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" />
</layout>
</appender>
<!-- 日志文件部分log输出格式的设定 -->
<appender name="errorAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="ERROR" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<File value="Logs\\err.log" />
<PreserveLogFileNameExtension value="true" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="infoAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<File value="Logs\\info.log" />
<PreserveLogFileNameExtension value="true" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="debugAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="DEBUG" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<File value="Logs\debug.log" />
<PreserveLogFileNameExtension value="true" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="perfAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<File value="Logs\perf.log" />
<PreserveLogFileNameExtension value="true" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %logger - %message%newline" />
</layout>
</appender>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Logs\Log_" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd'.txt'" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<header value="------------------------------------------------------------
" />
<ConversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
</appender>
<!-- Setup the root category, add the appenders and set the default level -->
<root>
<level value="ALL" />
<appender-ref ref="errorAppender" />
<appender-ref ref="infoAppender" />
<appender-ref ref="debugAppender" />
</root>
<!-- Setup the perfAppender category, add the appenders and set the default level 因为root与logger是父与子的关系,所以不应将:perfAppender在root中显示,避免重复 -->
<logger name="Performance" additivity="false">
<level value="ALL" />
<appender-ref ref="perfAppender" />
</logger>
</log4net>
</configuration>
5:修改AssemblyInfo.cs
用于log4net能够读取配置文件。指定配置文件的路径
//定义log4net配置文件路径
//[assembly: log4net.Config.DOMConfigurator(ConfigFile = @"Configure\log4netConfig.xml", Watch = true)]
//也可用上面的语句,上面的是老的方式
[assembly: log4net.Config.XmlConfiguratorAttribute(ConfigFile = @"Configure\log4netConfig.xml", Watch = true)]
6:新建存放配置文件的目录,**
并授权可写很重要
**
7:在代码中使用:
首先要定义在类体内:
//DataHandler 是类名,用于反射,多查查就知道了,用的时候替换掉;logger也是可以更改的,后面用的时候记住就好。
private static readonly ILog logger = LogManager.GetLogger(typeof(DataHandler));
//在想要用的位置就可以使用了。具体的后面的是和配置文件对应的,如括号内的是要输出的字符串。其中的Debug是日志级别,以标明该日志记录是什么级别的日志,再在配置文件中appender内配置相应的级别就可以将内容写入到相应的文件中。
logger.Debug("Debug test");
结束,看对应目录下是否有文件。
log4net的架构分为四个要素:logger;appender;layout;filter。
logger是负责日志的记录者
appender提供记录的介质
layout负责把记入的内容格式化
filter负责把内容进行筛选
可以说,整个过程就是一个日志流水线,每个成员负责其中的一个环节
logger发出记录信息,appender接到信息,根据内部的layout配置对记录信息格式化,根据filter决定此信息是否被过滤掉,最后,将其序列化
log4net具体思路:通过配置文件实例化对象Logger(产生)->appender(接收)->过滤日志(filter)->layout序列化输出 appender的记录介质