Log4Net 使用技巧

1. 利用nuget对log4net的引用 

2. 在项目中添加log4Net.Config文件

复制代码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <root>
      <level value="ALL" />
      <appender-ref ref="RollingLogFileAppender" />
      <appender-ref ref="ConsoleAppender" />
    </root>
    <appender name="ConsoleAppender"  type="log4net.Appender.ConsoleAppender" >
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%date] %level [%thread][%c{1}:%line] - %m%n" />
      </layout>
    </appender>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender" >
      <param name="File" value="logss/aa.txt" />
      <!--<param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'" />-->
      <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
      <param name="AppendToFile" value="true" />
      <param name="RollingStyle" value="Date" />
      <param name="StaticLogFileName" value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %level %thread %logger - %message %newline" />   -
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="INFO" />
        <param name="LevelMax" value="INFO" />
      </filter>
    </appender>
  </log4net>
</configuration>
复制代码
StaticLogFileName 为true时File参数就要有固定的文件名,如果为false时 只需要写文件夹名称即可
<conversionPattern value="%date %level %thread %logger - %message %newline" />  在文件中输出的内容格式
<param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" /> 动态生成文件的格式

当生成的日志过大时可以采用按小时生成并且创建日期文件夹
<param name="DatePattern" value="yyyy-MM-dd/yyyy-MM-dd-HH&quot;.log&quot;" />

3. 对于AssemblyInfo.cs文件添加 特性

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]  注意此处的log2net.config与刚才添加的文件名保持一致

4. 添加记日志的Helper类

复制代码
    public class Log4NetHelper
    {
        private static readonly ILog logger = LogManager.GetLogger("RollingLogFileAppender");

        public static void WriteLog(string message)
        {
            logger.Info(message);
        }
    }
复制代码

 

日志可以分组:

复制代码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
    </configSections>
    <log4net>
        <root>
            <level value="ALL" />
        </root>
        <logger name="CalledLogger">
            <level value="ALL" />
            <appender-ref ref="CalledInfoAppender" />
            <appender-ref ref="CalledErrorAppender" />
        </logger>
        <logger name="CallingLogger">
            <level value="ALL" />
            <appender-ref ref="CallingInfoAppender" />
            <appender-ref ref="CallingErrorAppender" />
        </logger>
        <logger name="InfoLogger">
            <level value="ALL" />
            <appender-ref ref="InfoAppender" />
            <appender-ref ref="ErrorAppender" />
        </logger>
        <!-- 被调函数记录调用参数和调用返回结果 -->
        <appender name="CalledInfoAppender" type="log4net.Appender.RollingFileAppender,log4net" >
            <param name="File" value="Logs\CalledInfo\" />
            <param name="AppendToFile" value="true" />
            <param name="RollingStyle" value="Date" />
            <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
            <param name="StaticLogFileName" value="false" />
            <layout type="log4net.Layout.PatternLayout,log4net">
                <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %m%n" />
            </layout>
            <filter type="log4net.Filter.LevelRangeFilter">
                <param name="LevelMin" value="INFO" />
                <param name="LevelMax" value="INFO" />
            </filter>
        </appender>
        <!-- 被调函数记录内部错误原因 -->
        <appender name="CalledErrorAppender" type="log4net.Appender.RollingFileAppender,log4net" >
            <param name="File" value="Logs\CalledError\" />
            <param name="AppendToFile" value="true" />
            <param name="RollingStyle" value="Date" />
            <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
            <param name="StaticLogFileName" value="false" />
            <layout type="log4net.Layout.PatternLayout,log4net">
                <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %m%n" />
            </layout>
            <filter type="log4net.Filter.LevelRangeFilter">
                <param name="LevelMin" value="ERROR" />
                <param name="LevelMax" value="ERROR" />
            </filter>
        </appender>
        <!-- 调用接口记录调用参数和调用返回结果-->
        <appender name="CallingInfoAppender" type="log4net.Appender.RollingFileAppender,log4net" >
            <param name="File" value="Logs\CallingInfo\" />
            <param name="AppendToFile" value="true" />
            <param name="RollingStyle" value="Date" />
            <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
            <param name="StaticLogFileName" value="false" />
            <layout type="log4net.Layout.PatternLayout,log4net">
                <param name="ConversionPattern" value="%m%n" />
            </layout>
            <filter type="log4net.Filter.LevelRangeFilter">
                <param name="LevelMin" value="INFO" />
                <param name="LevelMax" value="INFO" />
            </filter>
        </appender>
        <!-- 调用返回错误是记录错误信息 -->
        <appender name="CallingErrorAppender" type="log4net.Appender.RollingFileAppender,log4net" >
            <param name="File" value="Logs\CallingError\" />
            <param name="AppendToFile" value="true" />
            <param name="RollingStyle" value="Date" />
            <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
            <param name="StaticLogFileName" value="false" />
            <layout type="log4net.Layout.PatternLayout,log4net">
                <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %m%n" />
            </layout>
            <filter type="log4net.Filter.LevelRangeFilter">
                <param name="LevelMin" value="ERROR" />
                <param name="LevelMax" value="ERROR" />
            </filter>
        </appender>
        <!-- 程序内部调试日志 -->
        <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender,log4net" >
            <param name="File" value="Logs\LogsInfo\" />
            <param name="AppendToFile" value="true" />
            <param name="RollingStyle" value="Date" />
            <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
            <param name="StaticLogFileName" value="false" />
            <layout type="log4net.Layout.PatternLayout,log4net">
                <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %m%n" />
            </layout>
            <filter type="log4net.Filter.LevelRangeFilter">
                <param name="LevelMin" value="INFO" />
                <param name="LevelMax" value="INFO" />
            </filter>
        </appender>
        <!-- 程序内部调试错误日志 -->
        <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender,log4net" >
            <param name="File" value="Logs\LogsError\" />
            <param name="AppendToFile" value="true" />
            <param name="RollingStyle" value="Date" />
            <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
            <param name="StaticLogFileName" value="false" />
            <layout type="log4net.Layout.PatternLayout,log4net">
                <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %m%n" />
            </layout>
            <filter type="log4net.Filter.LevelRangeFilter">
                <param name="LevelMin" value="ERROR" />
                <param name="LevelMax" value="ERROR" />
            </filter>
        </appender>
    </log4net>
</configuration>
复制代码

 

c# 调用程序

复制代码
    public class Log4NetHelper
    {
        private static readonly ILog logger = LogManager.GetLogger("RollingLogFileAppender");


        private static readonly ILog calledLogger = LogManager.GetLogger("CalledLogger");

        private static readonly ILog callingLogger = LogManager.GetLogger("CallingLogger");

        private static readonly ILog infoLogger = LogManager.GetLogger("InfoLogger");

        public static void WriteLog(string message)
        {
            //log4net.Config.XmlConfigurator.Configure();
            logger.Info(message);
        }
    }
复制代码

 

posted @   小布雷  阅读(439)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示