Log4Net 日志记录的实现
一、前言
在上一篇文章【(转载)非常完善的Log4net配置详细说明】介绍了Log4Net的配置说明,如果不知道的可以去看看,这里我们就介绍一下日志记录的实现,说得都比较基础,所以大神请绕过。
二、Log4Net实现
前面介绍了了Log4Net的配置,这里我在把我用的额Log4Net 的配置信息展示出来
<log4net debug="false"> <root> <level value="ALL" /> </root> <logger name="PFTLog"> <level value="DEBUG"/> <appender-ref ref="ErrorRollingFileAppender" /> <appender-ref ref="DebugRollingFileAppender" /> <appender-ref ref="InfoRollingFileAppender" /> </logger> <!--数据日志--> <appender name="InfoRollingFileAppender" type="log4net.Appender.RollingFileAppender" > <file value="LogFile\Info\" /> <appendToFile value="true" /> <!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <Encoding value="UTF-8" /> <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数--> <MaxSizeRollBackups value="20" /> <!--是否只写到一个文件中--> <StaticLogFileName value="false" /> <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])--> <rollingStyle value="Composite" /> <!--按日期产生文件夹和文件名[在日期方式与混合方式下使用]--> <!--这是按日期产生文件夹,并在文件名前也加上日期--> <datePattern value="yyyyMMdd-"-Info.log"" /> <!--每个文件的大小。 只在混合方式与文件大小方式下使用。 超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。 不要使用小数,否则会一直写入当前日志--> <maximumFileSize value="1MB" /> <!--计数类型为1,2,3…--> <!--<CountDirection value="1" />--> <!--记录的格式。一般用log4net.Layout.PatternLayout布局--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%n记录时间:%date %n线程ID[%thread] %n日志级别:%-5level %n记录类:%logger %n扩展信息:%property -%n异常:%exception %n错误描述:%message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="INFO" /> </filter> </appender> <!--错误日志--> <appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender" > <file value="LogFile\Error\" /> <appendToFile value="true" /> <!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <Encoding value="UTF-8" /> <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数--> <MaxSizeRollBackups value="20" /> <!--是否只写到一个文件中--> <StaticLogFileName value="false" /> <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])--> <rollingStyle value="Composite" /> <!--按日期产生文件夹和文件名[在日期方式与混合方式下使用]--> <!--这是按日期产生文件夹,并在文件名前也加上日期--> <datePattern value="yyyyMMdd"-Error.log"" /> <!--每个文件的大小。 只在混合方式与文件大小方式下使用。 超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。 不要使用小数,否则会一直写入当前日志--> <maximumFileSize value="1MB" /> <!--计数类型为1,2,3…--> <!--<CountDirection value="1" />--> <!--记录的格式。一般用log4net.Layout.PatternLayout布局--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%n记录时间:%date %n线程ID[%thread] %n日志级别:%-5level %n记录类:%logger %n扩展信息:%property -%n异常:%exception %n错误描述:%message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ERROR" /> <param name="LevelMax" value="ERROR" /> </filter> </appender> <!--调试日志--> <appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender" > <file value="LogFile\Debug\" /> <appendToFile value="true" /> <!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <Encoding value="UTF-8" /> <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数--> <MaxSizeRollBackups value="20" /> <!--是否只写到一个文件中--> <StaticLogFileName value="false" /> <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])--> <rollingStyle value="Composite" /> <!--按日期产生文件夹和文件名[在日期方式与混合方式下使用]--> <!--这是按日期产生文件夹,并在文件名前也加上日期--> <datePattern value="yyyyMMdd"-Debug.log"" /> <!--每个文件的大小。 只在混合方式与文件大小方式下使用。 超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。 不要使用小数,否则会一直写入当前日志--> <maximumFileSize value="1MB" /> <!--计数类型为1,2,3…--> <!--<CountDirection value="1" />--> <!--记录的格式。一般用log4net.Layout.PatternLayout布局--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%n记录时间:%date %n线程ID[%thread] %n日志级别:%-5level %n记录类:%logger %n扩展信息:%property -%n异常:%exception %n错误描述:%message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="DEBUG" /> </filter> </appender> </log4net>
里面配置了3个日志的等级(ERROR,DEBUG和INFO),根据日志的不同等级,记录到对应的文件里面。
下面是具体的实现代码
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)] namespace PFT.Standard { public class PFTLog { private static ILog log = LogManager.GetLogger(Assembly.GetCallingAssembly(), "PFTLog"); public static void Error(string message, Action RegistedProperties) { RegistedProperties(); log.Error(message); } public static void Error(string message, Exception exception, Action RegistedProperties) { RegistedProperties(); log.Error(message, exception); } public static void Error(Exception exception, Action RegistedProperties) { RegistedProperties(); log.Error("系统Error信息", exception); } public static void Debug(string message, Action RegistedProperties) { RegistedProperties(); log.Debug(message); } public static void Debug(string message, Exception exception, Action RegistedProperties) { RegistedProperties(); log.Debug(message, exception); } public static void Debug(Exception exception, Action RegistedProperties) { RegistedProperties(); log.Debug("系统Debug信息", exception); } public static void Info(string message, Action RegistedProperties) { RegistedProperties(); log.Info(message); } public static void Info(string message, Exception exception, Action RegistedProperties) { RegistedProperties(); log.Debug(message, exception); } public static void Info(Exception exception, Action RegistedProperties) { RegistedProperties(); log.Info("系统Info信息", exception); } } }
其中RegistedProperties注册扩展字段。
例如:C#代码
LogManager.Info("测试扩展字段", () => { LogicalThreadContext.Properties["LogType"] = "扩展字段内容"; });
这样的字段扩展,可以保存到数据库,也可以与第三方传值字段对接,是不是很方便。
三、总结
Log4Net的基本实现,就先介绍到这里。本来计划把与Kibana结合也一起写了,结果发现Kibana结合到具体项目例子,才更方便讲解。所以接下来,我将开始介绍一些单个的模块实现,然后在基于这些模块,搭建一个简单的项目,然后在基于这个项目,写一些项目应用的文章。
感谢您花时间阅读此篇文章,如果您觉得看了这篇文章之后心情还比较高兴,可以打赏一下,请博主喝上一杯咖啡,让博主继续码字……
本文版权归作者和博客园共有,来源网址:https://www.cnblogs.com/snailblog 欢迎各位转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接