C# 如何使用log4net

目标:

在 C:\log4net\Log\ 目录下 自动按日期建文件夹 下 自动按 小时 创建日志,并每在文件大小超过1MB时,自动创建下一个日志文件

1. 下载并引用到工程中

官方网站:http://logging.apache.org/log4net/
我下载文件: apache-log4net-binaries-2.0.12.zip
解压后,把bin目录下的 dll放到自己的工程下面, 我选的是 bin\Debug 下的文件

2. 代码 

using log4net;

//声明
private static readonly ILog log = LogManager.GetLogger(typeof(frmText).Name);
////private static readonly ILog log = LogManager.GetLogger(
// System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

//调用
private void butWriteLog_Click(object sender, EventArgs e)
 {
            if (log.IsErrorEnabled)
            {
                log.Error("butWriteLog_Click() 发生错误 Error: " + "1111111");
            }
            if (log.IsDebugEnabled)
            {
                log.Debug("butWriteLog_Click() 调试 Debug.");
            }
            if (log.IsInfoEnabled)
            {
                log.Info("butWriteLog_Click() 信息 Info --------------------------.");
            }
}

3.  配置文件

在AssemblyInfo.vb 中加入

// 日志文件设置
[assembly: log4net.Config.XmlConfiguratorAttribute(ConfigFile="log4net.config", Watch=true)]

4.log4net.config

建立文件 log4net.config, 并在“属性” 视图中“设置复制到输入目录” 为 “如果较新则复制”

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    <!-- <section name="log4net" type="System.Configuration.IgnoreSectionHandler" /> -->
  </configSections>

  <log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <param name= "File" value= "C:\log4net\Log\"/>
      <!--是否是向文件中追加日志-->
      <param name= "AppendToFile" value= "true"/>
      <!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <!--log保留天数-->
      <param name= "MaxSizeRollBackups" value= "10"/>
      <!--日志文件名是否是固定不变的-->
      <param name= "StaticLogFileName" value= "false"/>
      <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])  -->
      <param name= "RollingStyle" value= "Date"/>
      <!--日志文件名格式为:2008-08-31.log  -->
      <param name= "DatePattern" value= "yyyy-MM-dd/yyyy-MM-dd HH&quot;.log&quot;"/>
      <!--每个大小。超出大小后在文件名后自动增加正整数,数字最大的最早写入。可用的单位:KB|MB|GB。不要使用小数,否则会一直写入当前日志-->
      <param name="maximumFileSize" value="1MB" />
      <!--计数类型为1,2,3…-->
      <param name="CountDirection" value="1"/>
      <!--日志输出内容的格式  %d [%t] %-5p %c - %m%n %loggername  -->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c[%F][%L] - %m%n" />
      </layout>
    </appender>

    <!-- 控制台前台显示日志
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
      <mapping>
        <level value="ERROR" />
        <foreColor value="Red, HighIntensity" />
      </mapping>
      <mapping>
        <level value="Info" />
        <foreColor value="Green" />
      </mapping>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%n%date{HH:mm:ss,fff} [%-5level] %m" />
      </layout>

      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Info" />
        <param name="LevelMax" value="Fatal" />
      </filter>
    </appender> -->

    <root>
      <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
      <level value="all" />
      <appender-ref ref="ColoredConsoleAppender"/>
      <appender-ref ref="RollingLogFileAppender"/>
    </root>
  </log4net>
</configuration>
 

效果:

在 C:\log4net\Log\ 目录下 自动按日期建文件夹 下 自动按 小时 创建日志,并每在文件大小超过1MB时,自动创建下一个日志文件

 

 log4net配置资料

layout就是输出内容的布局

 log4net.config 配置说明

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

 

 

  

posted @ 2021-11-01 14:33  海乐学习  阅读(332)  评论(0编辑  收藏  举报