安装log4net
项目 - 管理Nuget程序包,在浏览框中输入 log4net - 回车 - 选择 log4net - 安装。
![](https://naiop.github.io/blog/images/log4net_img1.png)
添加log4net.config
在工程目录下添加log4net.config文件, 设置log4net.config的文件属性
,自动把log4net.config的内容复制到.exe文件所在的目录
![](https://naiop.github.io/blog/images/log4net_img2.png)
log4net.config源码
修改AssemblyInfo.cs
在工程 - Properties - AssemblyInfo.cs文件中新增如下一行代码:
使用
<?xml version="1.0" encoding="utf-8" ?>
<!--
log4.net 官网,https://logging.apache.org/log4net/ 看官方文档
C# 写法
////////////////这个配置记录所有日志
<root>
<level value="ALL" />
<appender-ref ref="SysAppender" />
</root>
////////////////
public static readonly log4net.ILog logInfo = log4net.LogManager.GetLogger("mLog");
public static readonly log4net.ILog defined = log4net.LogManager.GetLogger("defined");
logInfo.Info("11");
logInfo.Error("22");
logInfo.Debug("33");
defined.Info("44");
defined.Error("55");
defined.Debug("66");
-->
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
</configSections>
<!--log4net配置文件-->
<!-- 。。。。。。。。。。。控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF。。。。。。。。。。。 -->
<log4net>
<!-- <root>实际上就是一个根logger,所有其它logger都默认继承它,如果配置文件里没有显式定义,则框架使用根日志中定义的属性-->
<root>
<level value="ALL" />
<appender-ref ref="SysAppender" /><!--记录到哪个介质中去-->
</root>
<!--log-->
<logger name="mLog">
<level value="ALL"/>
<appender-ref ref="InfoAppender"/>
<appender-ref ref="ErrorAppender"/>
<appender-ref ref="ConsoleAppender"/>
</logger>
<!--自定义的log-->
<logger name="defined">
<level value="ALL" />
<appender-ref ref="defined"/>
</logger>
<!--根记录log-->
<appender name="SysAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<File value="log/log_SysAppender.txt"/>
<!--是否是向文件中追加日志-->
<AppendToFile value="true"/>
<!--创建新文件的方式-->
<RollingStyle value="Size"/>
<!--log文件大小-->
<MaximumFileSize value="5M"/>
<!--备份日志数目-->
<MaxSizeRollBackups value="30"/>
<!--日志文件名是否是固定不变的-->
<StaticLogFileName value="true"/>
<!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
<lockingModel type="log4net.Appender.RollingFileAppender+MinimalLock" />
<!--输出格式-->
<layout type="log4net.Layout.PatternLayout">
<!--日期 [级别]-->
<conversionPattern value="%d [%-5p] [%t%] -%m%n"/>
</layout>
<!--控制器,只记录级别在INFO-INFO之间的信息-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ALL" />
<param name="LevelMax" value="OFF" />
</filter>
</appender>
<!--运行状态信息-->
<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<File value="log/log_info.txt"/>
<!--是否是向文件中追加日志-->
<AppendToFile value="true"/>
<!--创建新文件的方式-->
<RollingStyle value="Size"/>
<!--log文件大小-->
<MaximumFileSize value="5M"/>
<!--备份日志数目-->
<MaxSizeRollBackups value="30"/>
<!--日志文件名是否是固定不变的-->
<StaticLogFileName value="true"/>
<!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
<lockingModel type="log4net.Appender.RollingFileAppender+MinimalLock" />
<!--输出格式-->
<layout type="log4net.Layout.PatternLayout">
<!--日期 [级别]-->
<conversionPattern value="%d [%-5p] [%t%] -%m%n"/>
</layout>
<!--控制器,只记录级别在INFO-INFO之间的信息-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
<!--运行错误信息-->
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<File value="log/log_error.txt"/>
<!--是否是向文件中追加日志-->
<AppendToFile value="true"/>
<!--创建新文件的方式-->
<RollingStyle value="Size"/>
<!--log文件大小-->
<MaximumFileSize value="5M"/>
<!--备份日志数目-->
<MaxSizeRollBackups value="30"/>
<!--日志文件名是否是固定不变的-->
<StaticLogFileName value="true"/>
<lockingModel type="log4net.Appender.RollingFileAppender+MinimalLock" />
<!--输出格式-->
<layout type="log4net.Layout.PatternLayout">
<!--输出格式-->
<conversionPattern value="%d [%-5p] [%t%] -%m%n"/>
</layout>
<!--控制器,只记录级别在WARN-FATAL之间的信息-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="WARN" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
<!--控制台-->
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d %-5p %c - %m%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
<!--自定义信息-->
<appender name="defined" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<File value="log/log_defined.txt"/>
<!--是否是向文件中追加日志-->
<AppendToFile value="true"/>
<!--创建新文件的方式-->
<RollingStyle value="Size"/>
<!--log文件大小-->
<MaximumFileSize value="5M"/>
<!--备份日志数目-->
<MaxSizeRollBackups value="30"/>
<!--日志文件名是否是固定不变的-->
<StaticLogFileName value="true"/>
<lockingModel type="log4net.Appender.RollingFileAppender+MinimalLock" />
<!--输出格式-->
<layout type="log4net.Layout.PatternLayout">
<!--输出格式-->
<conversionPattern value="%d [%-5p] [%t%] -%m%n"/>
</layout>
<!--控制器,只记录级别在WARN-FATAL之间的信息-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
</log4net>
</configuration>