C#编程之log4net应用
log4net配置加载使用的几步:
1.工程中新建目录Config,目录内新建文件“log4net.config”,右键->属性->“复制到输出目录” 选 “始终复制”,如下:
log4net.config如下设置:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="RollingLogFileAppender" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--1. 文件路径,如果RollingStyle为Composite或Date,则这里设置为目录,文件名在DatePattern里设置,其他则这里要有文件名。已经扩展支持虚拟目录-->
<file value="Logs/" />
<!--2. 创建新文件的方式,可选为Size(按文件大小),Date(按日期),Once(每启动一次创建一个文件),Composite(按日期及文件大小),默认为Composite-->
<rollingStyle value="Date" />
<!--3. 当 RollingStyle 为 Composite 或 Date,这里设置文件名格式-->
<datePattern value="yyyy-MM-dd'.log'" />
<!--4. true/false,默认为true。为true时,RollingStyler的date值将无效。且为true时,需要在file里指定文件名,所有日志都会记录在这个文件里。-->
<staticLogFileName value="false" />
<!--5. 当 rollingStyle 为Composite 或 Size,这里设置最大文件大小(可以KB,MB,GB为单位,默认为字节)-->
<maximumFileSize value="1KB" />
<!--6. 默认值为-1。当文件超过MaximumFileSize的大小时,如果要创建新的文件来存储日志,会根据CountDirection的值来重命名文件。
大于-1的值时,file里指定的文件名会依次加上.0,.1,.2递增。
当等于或小于-1时,创建依赖于MaxSizeRollBackups参数值,创建备份日志数。-->
<countDirection value="-1" />
<!--7. 备份日志数目,默认为0。在CountDirection为负数时有效。-->
<maxSizeRollBackups value="-1" />
<!--8. true/false,默认为true。当文件存在时,是否在原文件上追加内容。-->
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %thread %logger - %message %newline" />
</layout>
</appender>
<root>
<!-- 记录哪个级别以上的日志: OFF->FATAL->ERROR->WARN->INFO->DEBUG->ALL -->
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
</configuration>
2.修改程序AssemblyInfo.cs如下:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "config/log4net.config", Watch = true)]
3.新建LogHelper类,此类并没有什么用处,无非就是帮助让调用的时候少写一行代码。
public class LogHelper
{
private LogHelper()
{
}
private static readonly log4net.ILog logger = LogManager.GetLogger(typeof(LogHelper));
//OFF->FATAL->ERROR->WARN->INFO->DEBUG->ALL
public static void Fatal(string fatal, Exception ex)
{
logger.Fatal(fatal, ex);
}
public static void Error(string err, Exception ex)
{
logger.Error(err, ex);
}
public static void Warn(string err, Exception ex)
{
logger.Warn(err, ex);
}
public static void Info(string info)
{
logger.Info(info);
}
public static void Debug(string err, Exception ex)
{
logger.Debug(err, ex);
}
}
4.在Main()中测试:
static void Main(string[] args)
{
LogHelper.Info("Info 级别");
LogHelper.Error("error 级别", new Exception("我是一个exception message"));
}
其中在log4net.config中的root节点下可以配置日志级别,日志的等级,它们由高到底分别为:
OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL
高于等级设定值方法都能写入日志, Off所有的写入方法都不写到日志里,ALL则相反。例如当我们设成Info时,logger.Debug就会被忽略而不写入文件,但是FATAL,ERROR,WARN,INFO会被写入,因为他们等级高于INFO。
<root>
<!-- 记录哪个级别以上的日志: OFF->FATAL->ERROR->WARN->INFO->DEBUG->ALL -->
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root>
在具体写日志时,一般可以这样理解日志等级:
FATAL(致命错误):记录系统中出现的能使用系统完全失去功能,服务停止,系统崩溃等使系统无法继续运行下去的错误。例如,数据库无法连接,系统出现死循环。
ERROR(一般错误):记录系统中出现的导致系统不稳定,部分功能出现混乱或部分功能失效一类的错误。例如,数据字段为空,数据操作不可完成,操作出现异常等。
WARN(警告):记录系统中不影响系统继续运行,但不符合系统运行正常条件,有可能引起系统错误的信息。例如,记录内容为空,数据内容不正确等。
INFO(一般信息):记录系统运行中应该让用户知道的基本信息。例如,服务开始运行,功能已经开户等。
DEBUG (调试信息):记录系统用于调试的一切信息,内容或者是一些关键数据内容的输出。
Logger实现的ILog接口,ILog定义了5个方法(Debug,Inof,Warn,Error,Fatal)分别对不同的日志等级记录日志。这5个方法还有5个重载。
以上步骤,logger文件只有一个,debug,info,warn等记录都在一个日志文件中,如果每个级别记录到不同的文件当中也是可以的,需要用到LogManager类,它用来管理所有的Logger。它的GetLogger静态方法,可以获得配置文件中相应的Logger:
log4net.ILog log = log4net.LogManager.GetLogger("logger-name");
可以参考网上其他说明。
本文参考:https://blog.csdn.net/binnygoal/article/details/79557746
https://www.cnblogs.com/cnhxz/p/4190228.html