Log4net的<appender>配置实例

来源:互联网 发布:高校教师招聘考试知乎 编辑:程序博客网 时间:2024/06/06 10:40
 appender在配置文件中至少有一个,也可以有多个,有些appender类型还可以引用其他appender类型。 其他配置可参考官方网站:[http://logging.apache.org/log4net/release/config-examples.html]

一、写入回滚文件

<appender name="ReflectionLayout" type="log4net.Appender.RollingFileAppender,log4net"><!--日志文件路径,“/”与“\”作用相同,到达的目录相同,文件夹不存在则新建 --><!--按文件大小方式输出时在这里指定文件名,并且当天的日志在下一天时在文件名后自动追加当天日期形成新文件。--><!—按照日期形式输出时,直接连接元素DatePattern的value形成文件路径。此处使用这种方式 --><!--param的名称,可以直接查对应的appender类的属性名即可,这里要查的就是RollingFileAppender类的属性 -->    <param name="File" value="D:/Log/" />    <!--是否追加到文件-->    <param name="AppendToFile" value="true" />    <!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />    <!—使用Unicode编码-->    <Encoding value="UTF-8" />    <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->    <param name="MaxSizeRollBackups" value="10" />    <!--是否只写到一个文件中-->    <param name="StaticLogFileName" value="false" />    <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->    <param name="RollingStyle" value="Composite" />    <!--按日期产生文件夹和文件名[在日期方式与混合方式下使用]-->    <!—此处按日期产生文件夹,文件名固定。注意&quot; 的位置-->    <param name="DatePattern" value="yyyy-MM-dd/&quot;ReflectionLayout.log&quot;"  />    <!—这是按日期产生文件夹,并在文件名前也加上日期-->    <param name="DatePattern" value="yyyyMMdd/yyyyMMdd&quot;-TimerServer.log&quot;"  />    <!—这是先按日期产生文件夹,再形成下一级固定的文件夹—>    <param name="DatePattern" value="yyyyMMdd/&quot;TimerServer/TimerServer.log&quot;"/>    <!--每个文件的大小。只在混合方式与文件大小方式下使用。超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。不要使用小数,否则会一直写入当前日志-->    <param name="maximumFileSize" value="500KB" />    <!--计数类型为1,2,3…-->    <param name="CountDirection" value="1"/>    <!—过滤设置,LevelRangeFilter为使用的过滤器。 -->    <filter type="log4net.Filter.LevelRangeFilter">        <param name="LevelMin" value="DEBUG" />        <param name="LevelMax" value="WARN" />    </filter>    <!--记录的格式。一般用log4net.Layout.PatternLayout布局-->    <!—此处用继承了log4net.Layout.PatternLayout的自定义布局,TGLog.ExpandLayout2为命名空间。%property{Operator}、%property{Action}是自定义的输出-->    <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">        <param name="ConversionPattern" value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 记录类:%logger     操作者ID:%property{Operator} 操作类型:%property{Action}%n             当前机器名:%property%n当前机器名及登录用户:%username %n               记录位置:%location%n 消息描述:%property{Message}%n                    异常:%exception%n 消息:%message%newline%n%n" />    </layout></appender>

注意这些配置属性有些是可选的,如果需要,一定要写正确,否则要么输出的不是自己想要的结果,要么干脆不输出任何信息。


二、写入SQL数据库

<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender,log4net"><!--BufferSize为缓冲区大小,只有日志记录超设定值才会一块写入到数据库--><bufferSize value="10" /><!—或写为<param name="BufferSize" value="10" />--><!--引用--><connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /><!--连接数据库字符串--><connectionString value="data source=.;initial catalog=Test;integrated security=false;persist security info=True;User ID=sa;Password=;" /><!--插入到表Log--><commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Operator],[Message],[ActionType],[Operand],[IP],[MachineName],[Browser],[Location],[Exception]) VALUES (@log_date, @thread, @log_level, @logger,@operator, @message,@action_type,@operand,@ip,@machineName,@browser,@location,@exception)" />    <!—日志记录时间,RawTimeStampLayout为默认的时间输出格式 -->    <parameter>        <parameterName value="@log_date" />        <dbType value="DateTime" />            <layout type="log4net.Layout.RawTimeStampLayout" />      </parameter>    <!--线程号-->    <parameter>        <parameterName value="@thread" />        <dbType value="String" />        <!—长度不可以省略,否则不会输出-->        <size value="100" />        <layout type="log4net.Layout.PatternLayout">            <conversionPattern value="%thread" />        </layout>    </parameter>    <!--日志等级-->    <parameter>        <parameterName value="@log_level" />        <dbType value="String" />        <size value="100" />        <layout type="log4net.Layout.PatternLayout">            <conversionPattern value="%level" />        </layout>    </parameter>    <!--日志记录类名称-->    <parameter>        <parameterName value="@logger" />        <dbType value="String" />        <size value="200" />        <layout type="log4net.Layout.PatternLayout">            <conversionPattern value="%logger" />        </layout>    </parameter>    <!--操作者。这个是自定义的输出字段,使用重新实现的布局器ReflectionLayout -->    <parameter>        <parameterName value="@operator" />        <!—设置为Int32时只有bufferSize的 value<="1"才正确输出,没有找出原因。-->        <dbType value="Int16" />        <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">            <conversionPattern value="%property{Operator}" />        </layout>    </parameter>    <!--操作对象-->    <parameter>        <parameterName value="@operand" />        <dbType value="String" />        <size value="300" />        <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">            <conversionPattern value="%property{Operand}" />        </layout>    </parameter>    <!—IP地址-->    <parameter>        <parameterName value="@ip" />        <dbType value="String" />        <size value="20" />        <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">            <conversionPattern value="%property{IP}" />        </layout>    </parameter>    <!--机器名-->    <parameter>        <parameterName value="@machineName" />        <dbType value="String" />        <size value="100" />        <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">            <conversionPattern value="%property{MachineName}" />        </layout>    </parameter>    <!--浏览器-->    <parameter>        <parameterName value="@browser" />        <dbType value="String" />        <size value="50" />        <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog"            <conversionPattern value="%property{Browser}" />        </layout>    </parameter>    <!—日志消息-->    <parameter>        <parameterName value="@message" />        <dbType value="String" />        <size value="3000" />        <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">            <conversionPattern value="%property{Message}" />        </layout>    </parameter>    <!--动作类型-->    <parameter>        <parameterName value="@action_type" />        <dbType value="Int16" />        <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">            <conversionPattern value="%property{ActionType}" />        </layout>    </parameter>    <!—记录日志的位置-->    <parameter>        <parameterName value="@location" />        <dbType value="String" />        <size value="2000" />        <layout type="log4net.Layout.PatternLayout">            <conversionPattern value="%location" /        </layout>    </parameter>    <!—异常信息。ExceptionLayout 为异常输出的默认格式-->    <parameter>        <parameterName value="@exception" />        <dbType value="String" />        <size value="4000" />        <layout type="log4net.Layout.ExceptionLayout" />    </parameter></appender>
注意:向表中输出的字段不能多于数据表本身字段,而反之则可以,但这些多余字段一定使其可以为空,否则便写不到数据库;输出字段的类型一定是对应数据表字段数据类型可以隐式转换的,而且长度也不能超过,否则也不能写入;数据表字段设置尽量可以为空,这样可以避免一条日志记录存在空数据导致后面的日志都记录不了。
0 0
原创粉丝点击