log4net按照日志等级生成相应的日志文件(多文件配置)
来源:互联网 发布:磁盘修复软件 编辑:程序博客网 时间:2024/06/05 18:33
log4是日常开发中使用比较多的日志记录工具,先放一段关于log4net Loggers的基本说明:
Logger是直接和应用程序交互的组件。Logger只是产生日志,然后由它引用的Appender记录到指定的媒介,并由Layout控制输出格式。
Logger提供了多种方式来记录一个日志消息,也可以有多个Logger同时存在。每个实例化的Logger对象对被log4net作为命名实体(Named Entity)来维护。log4net使用继承体系,也就是说假如存在两个Logger,名字分别为a.b.c和a.b。那么a.b就是a.b.c的祖先。每个Logger都继承了它祖先的属性。所有的Logger都从Root继承,Root本身也是一个Logger。
日志的等级,它们由高到底分别为:
OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL
高于等级设定值方法(如何设置参见“配置文件详解”)都能写入日志, Off 所有的写入方法都不写到日志里,ALL则相反。例如当我们设成Info时,logger.Debug就会被忽略而不写入文件,但是FATAL,ERROR,WARN,INFO会被写入,因为他们等级高于INFO。
在具体写日志时,一般可以这样理解日志等级:
FATAL(致命错误):记录系统中出现的能使用系统完全失去功能,服务停止,系统崩溃等使系统无法继续运行下去的错误。例如,数据库无法连接,系统出现死循环。
ERROR(一般错误):记录系统中出现的导致系统不稳定,部分功能出现混乱或部分功能失效一类的错误。例如,数据字段为空,数据操作不可完成,操作出现异常等。
WARN(警告):记录系统中不影响系统继续运行,但不符合系统运行正常条件,有可能引起系统错误的信息。例如,记录内容为空,数据内容不正确等。
INFO(一般信息):记录系统运行中应该让用户知道的基本信息。例如,服务开始运行,功能已经开户等。
DEBUG (调试信息):记录系统用于调试的一切信息,内容或者是一些关键数据内容的输出。
下面演示根据每个日志等级生成对应的一个文件。
这是本篇实例生成的日志的结构:
每个文件下分别存放相应等级的日志,日志的文件名为当前日期,每天一个文件(可以自行配置):
1、配置文件:
路径和文件名为(项目根目录下):Config/log4net.config
建成文件后不要忘记在Vissual Studio中右键该文件 -> 属性 -> 如果较新则复制到输出目录,如下图:
<?xml version="1.0" encoding="utf-8" ?><log4net> <root> </root> <logger name="RollingLogFileAppender"> <level value="ALL" /> <appender-ref ref="RollingFileDebug" /> <appender-ref ref="RollingFileInfo" /> <appender-ref ref="RollingFileWarn" /> <appender-ref ref="RollingFileError" /> <appender-ref ref="RollingFileFatal" /> </logger> <appender name="RollingFileDebug" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log/Debug/"/> <param name="AppendToFile" value="true"/> <param name="MaxSizeRollBackups" value="10"/> <param name="StaticLogFileName" value="false"/> <param name="DatePattern" value="yyyyMMdd".log""/> <param name="RollingStyle" value="Date"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="[%date{HH:mm:ss fff}] %-5level - %message%newline" /> </layout> <lockingmodel type="log4net.appender.fileappender+minimallock" /> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="Debug" /> <param name="LevelMax" value="Debug" /> </filter> </appender> <appender name="RollingFileInfo" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log/Info/"/> <param name="AppendToFile" value="true"/> <param name="MaxSizeRollBackups" value="10"/> <param name="StaticLogFileName" value="false"/> <param name="DatePattern" value="yyyyMMdd".log""/> <param name="RollingStyle" value="Date"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="[%date{HH:mm:ss fff}] %-5level - %message%newline" /> </layout> <lockingmodel type="log4net.appender.fileappender+minimallock" /> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="INFO" /> </filter> </appender> <appender name="RollingFileWarn" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log/Warn/"/> <param name="AppendToFile" value="true"/> <param name="MaxSizeRollBackups" value="10"/> <param name="StaticLogFileName" value="false"/> <param name="DatePattern" value="yyyyMMdd".log""/> <param name="RollingStyle" value="Date"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="[%date{HH:mm:ss fff}] %-5level - %message%newline" /> </layout> <lockingmodel type="log4net.appender.fileappender+minimallock" /> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="WARN" /> <param name="LevelMax" value="WARN" /> </filter> </appender> <appender name="RollingFileError" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log/Error/"/> <param name="AppendToFile" value="true"/> <param name="MaxSizeRollBackups" value="10"/> <param name="StaticLogFileName" value="false"/> <param name="DatePattern" value="yyyyMMdd".log""/> <param name="RollingStyle" value="Date"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="[%date{HH:mm:ss fff}] %-5level - %message%newline" /> </layout> <lockingmodel type="log4net.appender.fileappender+minimallock" /> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ERROR" /> <param name="LevelMax" value="ERROR" /> </filter> </appender> <appender name="RollingFileFatal" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log/Fatal/"/> <param name="AppendToFile" value="true"/> <param name="MaxSizeRollBackups" value="10"/> <param name="StaticLogFileName" value="false"/> <param name="DatePattern" value="yyyyMMdd".log""/> <param name="RollingStyle" value="Date"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="[%date{HH:mm:ss fff}] %-5level - %message%newline" /> </layout> <lockingmodel type="log4net.appender.fileappender+minimallock" /> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="FATAL" /> <param name="LevelMax" value="FATAL" /> </filter> </appender></log4net>
2、引入配置文件
这行代码放在项目的 AssemblyInfo.cs 文件的任意行,也可以放在启动文件的头部
//使用配置文件Config/log4net.config,监视改变(改变配置文件不用重启程序即可生效)。[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Config/log4net.config", Watch = true)]
3、初始化Logger实例
这行代码放在你需要写日志的类中,与方法同级
public static readonly ILog Log = LogManager.GetLogger("RollingLogFileAppender");
4、写日志
Log.Fatal("这是Fatal级日志");Log.Error("这是Error级日志");Log.Warn("这是Warn级日志");Log.Info("这是Info级日志");Log.Debug("这是Debug级日志");
像这样子:
到此,log4net使用方法便结束了,如果想知道log4net.config文件中某个节点的意思和用法,可以直接搜索,已经有很多文档进行说明了。
- log4net按照日志等级生成相应的日志文件(多文件配置)
- log4net 不生成日志文件的解决办法
- Log4Net生成空日志文件的解决方法
- log4net不生成日志文件
- Log4net按照不同级别写入多个日志文件
- Log4net 日志文件的操作
- log4net 各种等级的消息 输出到不同日志文件的 配置文件方式
- log4net配置学习 之 日志等级
- log4net配置学习 之 日志等级
- Log4Net 写入日志文件
- 使用Log4Net - 文件日志
- Log4net 1.2.10 文件日志 winform 配置
- log4net的文件日志打印时间测试
- 解决log4net独占日志文件的问题以及 log4net的各种输出配置(Appender)
- 解决log4net独占日志文件的问题以及 log4net的各种输出配置(Appender)
- Log4net同时写入多个日志文件
- 引用Log4Net写文件日志
- Log4Net目标日志文件控制
- SpringBoot查询的结果按视图结果展示结果
- centos7 下离线安装php7
- 全排列(模板实现)
- 欢迎使用CSDN-markdown编辑器
- IO流
- log4net按照日志等级生成相应的日志文件(多文件配置)
- 我们一起学ABAP(03)~内表、工作区(Work Area)和标题行(Header Lin)
- debain 配置IP和DNS
- android截长屏后保存
- 数据库实验(五):二叉树的顺序存储
- CSS3动画之loading-1
- Intents和 Intent Filters详解
- 序时簿表格融合
- IBM苏中:怎样利用深度学习、增强学习等方法提高信息处理效率