C# Log4Net应用

1 需求分析

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

1,日志文件统一保存到项目启动目录下的logs文件夹

2,以天为单位进行日志文件的保存

2 环境配置

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

3 编写配置文件

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

4 设置log4net.config的属性

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

log4net.config

XML 复制代码
<?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标志指示当配置文件发生更改时进行重新加载,以做到实时更新配置信息.

cs 复制代码
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

5.2 代码

cs 复制代码
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

相关推荐
AAA修煤气灶刘哥8 小时前
后端人速藏!数据库PD建模避坑指南
数据库·后端·mysql
RestCloud13 小时前
揭秘 CDC 技术:让数据库同步快人一步
数据库·api
mudtools14 小时前
.NET驾驭Word之力:理解Word对象模型核心 (Application, Document, Range)
c#·.net
得物技术16 小时前
MySQL单表为何别超2000万行?揭秘B+树与16KB页的生死博弈|得物技术
数据库·后端·mysql
christine-rr19 小时前
linux常用命令(4)——压缩命令
linux·服务器·redis
可涵不会debug20 小时前
【IoTDB】时序数据库选型指南:工业大数据场景下的技术突围
数据库·时序数据库
ByteBlossom20 小时前
MySQL 面试场景题之如何处理 BLOB 和CLOB 数据类型?
数据库·mysql·面试
麦兜*20 小时前
MongoDB Atlas 云数据库实战:从零搭建全球多节点集群
java·数据库·spring boot·mongodb·spring·spring cloud
東雪蓮☆20 小时前
深入理解 LVS-DR 模式与 Keepalived 高可用集群
linux·运维·服务器·lvs
Slaughter信仰20 小时前
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第十章知识点问答(10题)
java·jvm·数据库