1 需求分析
日志记录是程序开发中必不可少的环节,对于bug调试和后期项目维护都十分重要.其中Log4net是C#环境下广泛使用的日志记录库,功能十分强大.本教程提供的日志记录需求如下
1,日志文件统一保存到项目启动目录下的logs文件夹
2,以天为单位进行日志文件的保存
2 环境配置
通过NuGet直接搜索log4net进行安装
3 编写配置文件
在项目目录下新建log4net.config文件
4 设置log4net.config的属性
设置log4net.config的属性为复制到输出目录,否则在程序运行时无法加载配置文件
log4net.config
XML
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<!--其中layout节点的配置说明:
%m(message):输出的日志消息;
%n(newline):换行;
%d(datetime):输出当前语句运行的时刻;
%r(runtime):输出程序从运行到执行到当前语句时消耗的毫秒数;
%t(threadid):当前语句所在的线程ID ;
%p(priority): 日志的当前日志级别;
%c(class):当前日志对象的名称;
%L:输出语句所在的行号;
%F:输出语句所在的文件名;
%-10:表示最小长度为10,如果不够,则用空格填充;-->
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name= "File" value= "logs\\info\\"/>
<!--多线程时采用最小锁定-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<!--是否是向文件中追加日志-->
<param name= "AppendToFile" value= "true"/>
<!--最大的文件大小,默认的文件大小是10MB。-->
<maximumFileSize value="5MB" />
<!--当日志文件达到MaxFileSize大小,就自动创建备份文件。备份文件的多少由MaxSizeRollBackups决定-->
<param name= "MaxSizeRollBackups" value= "10"/>
<!--日志文件名是否是固定不变的-->
<param name= "StaticLogFileName" value= "false"/>
<!--日志文件名格式为:2022-05-22.log-->
<!--<param name= "DatePattern" value= "yyyy-MM-dd HH'.log'"/>-->
<!--文件名,按日期生成文件夹-->
<param name="DatePattern" value="/yyyy-MM/"Info_"MM-dd-HH".log""/>
<!--日志根据日期滚动-->
<param name= "RollingStyle" value= "Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%L] - %m %n" />
</layout>
<!--过滤器-->
<filter type="log4net.Filter.LevelRangeFilter">
<!--用于过滤掉Fatal类型的异常-->
<levelMax value="ERROR"/>
<levelMin value="INFO"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<!--不加这个过滤器也可以-->
</appender>
<appender name="ExceptionAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name= "File" value= "logs\\Exception\\"/>
<!--多线程时采用最小锁定-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<!--是否是向文件中追加日志-->
<param name= "AppendToFile" value= "true"/>
<!--最大的文件大小,默认的文件大小是10MB。-->
<maximumFileSize value="5MB" />
<!--当日志文件达到MaxFileSize大小,就自动创建备份文件。备份文件的多少由MaxSizeRollBackups决定-->
<param name= "MaxSizeRollBackups" value= "10"/>
<!--日志文件名是否是固定不变的-->
<param name= "StaticLogFileName" value= "false"/>
<!--日志文件名格式为:2022-05-22.log-->
<!--<param name= "DatePattern" value= "yyyy-MM-dd HH'.log'"/>-->
<!--文件名,按日期生成文件夹-->
<param name="DatePattern" value="/yyyy-MM/"fault_"MM-dd-HH".log""/>
<!--日志根据日期滚动-->
<param name= "RollingStyle" value= "Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%L] %M- %m %n" />
</layout>
<!--过滤器-->
<filter type="log4net.Filter.LevelMatchFilter">
<!--只保留Falat类型的log-->
<levelToMatch value="FATAL"/>
</filter>
<!--阻止其他日志事件被记录,若不使用该过滤器,其他类型的信息将继续输出-->
<filter type="log4net.Filter.DenyAllFilter"/>
<!--不加这个过滤器也可以-->
</appender>
<!--<root>
-->
<!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
<!--
<level value="all" />
-->
<!--<appender-ref ref="ColoredConsoleAppender"/>-->
<!--
<appender-ref ref="RollingLogFileAppender"/>
</root>-->
<appender name="控制台输出" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
<logger name="Test">
<!--指示高于此等级的方可输出-->
<level value="WARN"/>
<appender-ref ref="控制台输出" />
</logger>
<logger name="loggerAppender">
<level value="ALL"/>
<appender-ref ref="RollingLogFileAppender" />
<appender-ref ref="ExceptionAppender" />
</logger>
</log4net>
</configuration>
5 代码编写
5.1 添加配置信息
在AssemblyInfo.cs中添加log4net的配置信息,指定默认配置文件为程序运行目录下的log4net.config文件,Watch标志指示当配置文件发生更改时进行重新加载,以做到实时更新配置信息.
cs
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
5.2 代码
cs
class Program
{
static void Main(string[] args)
{
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));
ILog logger = LogManager.GetLogger("Test2");
ILog logger2 = LogManager.GetLogger("Test");
logger.Info("信息Info");
logger.Warn("异常Warn");
logger.Error("错误Error");
try
{
string a = null;
a.ToString();
}
catch (Exception ex)
{
logger.Fatal(ex.Message, ex);
}
logger2.Info("信息Info");
logger2.Warn("异常Warn");
logger2.Error("错误Error");
Console.WriteLine("日志生成完成!");
Console.ReadKey();
}
}
6 扩展资料连接
https://blog.csdn.net/u013066730/article/details/117248306
https://blog.csdn.net/weixin_44900027/article/details/128732197
https://www.cnblogs.com/liquorbin/archive/2012/05/11/2496284.html