一、什么是log4net?
二、引用log4net文件并把日志输出到日志文件里
2.1 创建项目
2.2 从网上下载log4net.dll文件
log4net.dll下载链接https://download.csdn.net/download/qq_40229737/12288639,我用的是VS2017
log4net.dll版本用的2.0,找到创建的项目所在文件夹根目录创建引用文件夹, 把log4net.dll文件库放在引用文件夹里如下所示:
2.3 添加log4net.dll引用
2.4 在AssemblyInfo.cs中添加一行代码,指定log4net从配置文件中读取相关配置
代码内容:[assembly: log4net.Config.XmlConfigurator(Watch = true)]
2.5 在App.config中添加对应的节点
<!--重点configsections必须是第一个节点1og4net配置-->
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
2.6 在App.Config中添加Log4Net.dll初始化信息
(主要一些按照什么格式存储,存储位置的配置)
App.config中具体内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<log4net>
<!-- name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪种介质-->
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件存放的地址"D:\App_Log\servicelog\"或者工程根目录"Log\\LogInfo\\"-->
<param name= "File" value= "Log\\LogInfo\\"/>
<!--输出的日志不会覆盖以前的信息-->
<param name= "AppendToFile" value= "true"/>
<!--备份文件的个数-->
<param name= "MaxSizeRollBackups" value= "10"/>
<!--是否使用静态文件名-->
<param name= "StaticLogFileName" value= "false"/>
<!--日志文件名-->
<param name= "DatePattern" value= "yyyy-MM-dd".read.log""/>
<!--文件创建的方式,这里是以Date方式创建-->
<param name= "RollingStyle" value= "Date"/>
<!--日志格式、错误日志布局-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="[%date]-[%thread]-[%-p]-[%logger]-[%M] -> %message%newline" />
<!--conversionPattern:
%m(message):输出的日志消息; %n(newline):换行;
%L:输出语句所在的行号; %F:输出语句所在的文件名;
%d(datetime):输出当前语句运行的时刻; %p(priority): 日志的当前日志级别;
%t(threadid):当前语句所在的线程ID ; %c(class):当前日志对象的名称;
%r(runtime):输出程序从运行到执行到当前语句时消耗的毫秒数;
%-10:表示最小长度为10,如果不够,则用空格填充;-->
</layout>
</appender>
<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\LogInfo\\" />
<param name="AppendToFile" value="true" />
<param name="MaxFileSize" value="10240" />
<param name="MaxSizeRollBackups" value="100" />
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyyMMdd".htm"" />
<param name="RollingStyle" value="Date" />
<!--信息日志布局-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="<HR COLOR=blue>%n日志时间:%d [%t] <BR>%n日志级别:%-5p <BR>%n日 志 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" />
</layout>
</appender>
<root>
<!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF
比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录
如果没有定义LEVEL的值,则缺省为DEBUG-->
<level value="all" />
<appender-ref ref="ErrorAppender"/>
<appender-ref ref="InfoAppender"/>
</root>
</log4net>
</configuration>
2.6 写代码进行测试: 在需要输出日志的类中定义日志对象
2.7 启动运行
结果: