【.NET】log4net配置文件解析
Log4Net是一个开源日志记录组件,将log4net.dll引入到项目References中,通过它可以将.net应用程序的日志记录到多种介质之中,并且我们还可以设置和标示日志的级别等。
然后我们从配置文件入手,我们可以将配置写在web.config中,也可以写到一个单独的配置文件中,可以命名为log4net.config.使用log4net需要知道其中两个比较重要的概念:logger 和 appender。logger是日志记录对象,后者是日志记录的目标也就是控制台,文件,数据库等。使用时,先获得一个用来记录日志的工具对象logger,然后为logger对象指定日志的记录位置.这就是配置文件为我们做好的事.
先看一个我写好的配置.
我将配置文件写在了一个单独的文件中,这样有两点好处:
l 不需要重新编译源代码就能改变配置;
2 可以在程序正运行的时候就改变配置。(这一点在一些Web程序和远程过程调用的程序中很重要)
后来因为我们的ITOO项目太大,这样写配置文件需要多个子系统分别维护,我就把做的这部分放到了资源文件中,和项目一起打包成dll,统一让各系统引用.这样一来改变配置文件需要重新引用,不过比起多方维护,更能减少出错.
我在这里配置了多个logger,各系统调用时传来不同的参数,即loggerName,就可以实现每个系统的异常将被写入到单独的文件中或数据库表中.
如
1.将异常日志写到文件
<!--权限系统--> <logger name="AuthoritySystem"> <level value="ALL"/> <appender-ref ref="AuthoritySystemFileAppender"/> </logger> <!--权限系统--> <appender name="AuthoritySystemFileAppender" type="log4net.Appender.RollingFileAppender, log4net"> <!--文件夹名--> <param name="File" value="c:\log\AuthoritySystemLog\Exception\" /> <param name="AppendToFile" value="true" /> <!--根据日志创建最新的--> <param name="RollingStyle" value="Date" /> <!--文件名的格式--> <param name="DatePattern" value=""Logs_"yyyy-MM-dd".txt"" /> <!--文件名动态生成--> <param name="StaticLogFileName" value="false" /> <!--日志内容的格式--> <layout type="log4net.Layout.PatternLayout,log4net"> <!--<param name="ConversionPattern" value="%d %newline [%t%] %-5p %c - %m%n" />--> <param name="ConversionPattern" value="时间: %d 线程ID: [%t%] 日志级别: %-5p 出错系统名: %c - 出错描述: %m%n" /> <param name="Header" value=" ---------Header--------- " /> <param name="Footer" value=" ---------Footer--------- " /> </layout> </appender>
%m(message):输出的日志消息,如ILog.Debug(?)输出的一条消息
%n(new line):换行
%d(datetime):输出当前语句运行的时刻
%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
%t(thread id):当前语句所在的线程ID
%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN?等
%c(class):当前日志对象的名称
2.将操作日志写入到数据库
<!--权限系统--> <logger name="AuthoritySystem"> <level value="Info"/> <appender-ref ref="AuthoritySystemAdoNetAppender"/> </logger> <!--SqlServer数据库--> <!--权限系统--> <appender name="AuthoritySystemAdoNetAppender" type="log4net.Appender.AdoNetAppender"> <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> <connectionString value="server=192.168.24.118;database=Log;user id=sa;password=7027"/> <commandText value="INSERT INTO AuthoritySystem (Datetime,Thread,Log_Level,Logger,Message,userid,username,ip,clazz,method,result) VALUES (@log_date, @thread, @log_level, @logger, @message,@userid,@username,@ip,@clazz,@method,@result)"/> <bufferSize value="1"/> <!--默认已有的成员 --> <parameter> <parameterName value="@log_date"/> <dbType value="DateTime"/> <layout type="log4net.Layout.RawTimeStampLayout"/> </parameter> <parameter> <parameterName value="@thread"/> <dbType value="String"/> <size value="255"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%thread"/> </layout> </parameter> <parameter> <parameterName value="@log_level"/> <dbType value="String"/> <size value="255"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%level"/> </layout> </parameter> <parameter> <parameterName value="@logger"/> <dbType value="String"/> <size value="255"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%logger"/> </layout> </parameter> <parameter> <parameterName value="@message"/> <dbType value="String"/> <size value="4000"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message"/> </layout> </parameter> <!--自定义成员 --> <parameter> <parameterName value="@userid"/> <dbType value="String"/> <size value="50"/> <layout type="LogDB.CustomLayout"> <conversionPattern value="%userid"/> </layout> </parameter> <parameter> <parameterName value="@username"/> <dbType value="String"/> <size value="20"/> <layout type="LogDB.CustomLayout"> <conversionPattern value="%username"/> </layout> </parameter> <parameter> <parameterName value="@ip"/> <dbType value="String"/> <size value="50"/> <layout type="LogDB.CustomLayout"> <conversionPattern value="%ip"/> </layout> </parameter> <parameter> <parameterName value="@clazz"/> <dbType value="String"/> <size value="50"/> <layout type="LogDB.CustomLayout"> <conversionPattern value="%clazz"/> </layout> </parameter> <parameter> <parameterName value="@method"/> <dbType value="String"/> <size value="50"/> <layout type="LogDB.CustomLayout"> <conversionPattern value="%method"/> </layout> </parameter> <parameter> <parameterName value="@result"/> <dbType value="String"/> <size value="50"/> <layout type="LogDB.CustomLayout"> <conversionPattern value="%result"/> </layout> </parameter> </appender>
Log4net默认数据表中有Datetime,Thread,Log_Level,Logger,Message这五个字段,我的数据库名为Log,表名为各系统名,按照系统日志记录要求,又加了id,userid,username,ip,clazz,method,result几个字段.数据表结构现在是12个字段,提前在数据库定义.
<bufferSizevalue="1"/>
该属性设置缓存区大小, 1表明有1条日志就写入数据库, 如果是10就表示日志到达10条时一起写入.
Log4net使用过程中关于配置文件的内容就先写到这里,更多内容下一篇博客
<<Log4net将操作日志写入数据库>> 敬请期待.
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。