1 需求分析

        日志记录是程序开发中必不可少的环节,对于bug调试和后期项目维护都十分重要.其中Log4net是C#环境下广泛使用的日志记录库,功能十分强大.本教程提供的日志记录需求如下

  1,日志文件统一保存到项目启动目录下的logs文件夹
  2,以天为单位进行日志文件的保存

2 环境配置

        通过NuGet直接搜索log4net进行安装

3 编写配置文件

           在项目目录下新建log4net.config文件

4 设置log4net.config的属性

        设置log4net.config的属性为复制到输出目录,否则在程序运行时无法加载配置文件

log4net.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <!--其中layout节点的配置说明:
        %m(message):输出的日志消息;
        %n(newline):换行;
		%d(datetime):输出当前语句运行的时刻;
		%r(runtime):输出程序从运行到执行到当前语句时消耗的毫秒数;
		%t(threadid):当前语句所在的线程ID ;
		%p(priority): 日志的当前日志级别;
		%c(class):当前日志对象的名称;
		%L:输出语句所在的行号;
		%F:输出语句所在的文件名;
		%-10:表示最小长度为10,如果不够,则用空格填充;-->
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <param name= "File" value= "logs\\info\\"/>
      <!--多线程时采用最小锁定-->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
      <!--是否是向文件中追加日志-->
      <param name= "AppendToFile" value= "true"/>
      <!--最大的文件大小,默认的文件大小是10MB。-->
      <maximumFileSize value="5MB" />
      <!--当日志文件达到MaxFileSize大小,就自动创建备份文件。备份文件的多少由MaxSizeRollBackups决定-->
      <param name= "MaxSizeRollBackups" value= "10"/>
      <!--日志文件名是否是固定不变的-->
      <param name= "StaticLogFileName" value= "false"/>
      <!--日志文件名格式为:2022-05-22.log-->
      <!--<param name= "DatePattern" value= "yyyy-MM-dd HH'.log'"/>-->
      <!--文件名,按日期生成文件夹-->
      <param name="DatePattern" value="/yyyy-MM/&quot;Info_&quot;MM-dd-HH&quot;.log&quot;"/>
      <!--日志根据日期滚动-->
      <param name= "RollingStyle" value= "Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%L] - %m %n" />
      </layout>
      <!--过滤器-->
      <filter type="log4net.Filter.LevelRangeFilter">
        <!--用于过滤掉Fatal类型的异常-->
        <levelMax value="ERROR"/>
        <levelMin value="INFO"/>
      </filter>
      <filter type="log4net.Filter.DenyAllFilter"/>
      <!--不加这个过滤器也可以-->
    </appender>
    <appender name="ExceptionAppender" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <param name= "File" value= "logs\\Exception\\"/>
      <!--多线程时采用最小锁定-->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
      <!--是否是向文件中追加日志-->
      <param name= "AppendToFile" value= "true"/>
      <!--最大的文件大小,默认的文件大小是10MB。-->
      <maximumFileSize value="5MB" />
      <!--当日志文件达到MaxFileSize大小,就自动创建备份文件。备份文件的多少由MaxSizeRollBackups决定-->
      <param name= "MaxSizeRollBackups" value= "10"/>
      <!--日志文件名是否是固定不变的-->
      <param name= "StaticLogFileName" value= "false"/>
      <!--日志文件名格式为:2022-05-22.log-->
      <!--<param name= "DatePattern" value= "yyyy-MM-dd HH'.log'"/>-->
      <!--文件名,按日期生成文件夹-->
      <param name="DatePattern" value="/yyyy-MM/&quot;fault_&quot;MM-dd-HH&quot;.log&quot;"/>
      <!--日志根据日期滚动-->
      <param name= "RollingStyle" value= "Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%L] %M- %m %n" />
      </layout>
      <!--过滤器-->
      <filter type="log4net.Filter.LevelMatchFilter">
        <!--只保留Falat类型的log-->
        <levelToMatch value="FATAL"/>
      </filter>
      <!--阻止其他日志事件被记录,若不使用该过滤器,其他类型的信息将继续输出-->
      <filter type="log4net.Filter.DenyAllFilter"/>

      <!--不加这个过滤器也可以-->
    </appender>
    <!--<root>
      -->
    <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
    <!--
      <level value="all" />
      -->
    <!--<appender-ref ref="ColoredConsoleAppender"/>-->
    <!--
      <appender-ref ref="RollingLogFileAppender"/>
    </root>-->
    <appender name="控制台输出" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"  />
      </layout>
    </appender>
    <logger name="Test">
      <!--指示高于此等级的方可输出-->
      <level value="WARN"/>
      <appender-ref ref="控制台输出" />
    </logger>
    <logger name="loggerAppender">
      <level value="ALL"/>
      <appender-ref ref="RollingLogFileAppender" />
      <appender-ref ref="ExceptionAppender" />
    </logger>
  </log4net>
</configuration>

5 代码编写

5.1 添加配置信息

        在AssemblyInfo.cs中添加log4net的配置信息,指定默认配置文件为程序运行目录下的log4net.config文件,Watch标志指示当配置文件发生更改时进行重新加载,以做到实时更新配置信息.

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

5.2 代码

class Program
    {
        static void Main(string[] args)
        {
            log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));
            ILog logger = LogManager.GetLogger("Test2");
            ILog logger2 = LogManager.GetLogger("Test");
            logger.Info("信息Info");
            logger.Warn("异常Warn");
            logger.Error("错误Error");
            try
            {
                string a = null;
                a.ToString();
            }
            catch (Exception ex)
            {
                logger.Fatal(ex.Message, ex);
            }
            logger2.Info("信息Info");
            logger2.Warn("异常Warn");
            logger2.Error("错误Error");
            Console.WriteLine("日志生成完成!");
            Console.ReadKey();
        }
    }

6 扩展资料连接

https://blog.csdn.net/u013066730/article/details/117248306
https://blog.csdn.net/weixin_44900027/article/details/128732197

https://www.cnblogs.com/liquorbin/archive/2012/05/11/2496284.html

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部