Log4net
1、添加引用
2、添加一个应用程序配置文件,并将其改名
3、内部配置
<?xml version="1.0" encoding="utf-8" ?> <configuration> <log4net> <logger name="logerror"> <level value="ALL" /> <appender-ref ref="ErrorAppender" /> </logger> <logger name="loginfo"> <level value="ALL" /> <appender-ref ref="InfoAppender" /> </logger> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\\LogError\\" />
<param name="Encoding" value="UTF-8" /> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Composite" /> <!--<param name="MaximumFileSize" value="100MB" /> <param name="MaxSizeRollBackups" value="1000" />--> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="yyyy-MM-dd.'log'" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="异常时间:%date 线程ID:[%thread] 日志级别:%-5level 相关类:%logger - 描述:%message%newline" /> </layout> </appender> <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\\LogInfo\\" />
<param name="Encoding" value="UTF-8" /> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Composite" /> <!--<param name="MaximumFileSize" value="100MB" /> <param name="MaxSizeRollBackups" value="1000" />--> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="yyyy-MM-dd.'log'" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 相关类:%logger - 描述:%message%newline" /> </layout> </appender> </log4net> </configuration>
配置样式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息 %n( new line):换行 %d(datetime):输出当前语句运行的时刻 %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数 %t(thread id):当前语句所在的线程ID %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等 %c( class ):当前日志对象的名称,例如: %f(file):输出语句所在的文件名输出样式: %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息 %n( new line):换行 %d(datetime):输出当前语句运行的时刻 %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数 %t(thread id):当前语句所在的线程ID %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等 %c( class ):当前日志对象的名称,例如: %f(file):输出语句所在的文件名。 %l(line):输出语句所在的行号。 %数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。。 %l(line):输出语句所在的行号。 %数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。 |
配置详解
<!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF--> <!--比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录--> <!--日志文件名开头,回滚用Date只需相对路径即可--> <file value="c:\Log\Test.log"/> <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
<!--文件名静态属性若为true,则日志文件名用<file>属性;否则使用<file>+<datePattern> --> <datePattern value="(yyyyMMdd)"/>
<param name="StaticLogFileName" value="false" />
<!--是否追加到文件,默认为true,通常无需设置--> <appendToFile value="true"/> <!--变换的形式为日期,这种情况下每天只有一个日志--> <!--此时MaxSizeRollBackups和maximumFileSize的节点设置没有意义--> <!--<rollingStyle value="Date"/>--> <!--变换的形式为日志大小:Date|Size|Composite-->
<!--Date:根据日期类型(设置单个文件大小无意义);Size:根据文件大小区分;Composite:date与size的结合体--> <!--这种情况下MaxSizeRollBackups和maximumFileSize的节点设置才有意义--> <RollingStyle value="Composite"/> <!--每天记录的日志文件个数,与maximumFileSize配合使用--> <MaxSizeRollBackups value="10"/> <!--每个日志文件的最大大小--> <!--可用的单位:KB|MB|GB--> <!--不要使用小数,否则会一直写入当前日志--> <maximumFileSize value="2MB"/>
4、触发配置二选一
a、添加配置语句
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]
b、
<add key="log4net.Config" value="log4net.config"/> <add key="log4net.Config.Watch" value="True"/>
5、修改配置文件属性
6、使用公共文件
/// <summary> /// 记录错误日志 /// </summary> /// <param name="message"></param> /// <param name="ex"></param> public static void Error(string message, Exception ex) { ILog log =LogManager.GetLogger("logerror"); if (ex != null) log.Error(message, ex); else log.Error(message); } /// <summary> /// 记录消息日志 /// </summary> /// <param name="message"></param> public static void Info(string message) { ILog log = LogManager.GetLogger("loginfo"); log.Info(message); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了