C#项目引用log4net日志服务

**

  1. 通过Nuget程序包搜索log4net进行安装;
  2. 在App.config中进行配置,我这里是以每天为一个单位文件夹,这样后面查起来也方便,每个文件夹中包含InfoLog和ErrorLog两个txt;
    具体配置如下可以根据自己的需求进行调整
xml 复制代码
  <log4net>
    <!-- 定义两个独立Appender:Info和Error -->
    <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
      <!-- 动态生成日期文件夹(如Logs/20251202) -->
      <file value="Logs/" />
      <datePattern value="yyyyMMdd'/InfoLog.txt'" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <staticLogFileName value="false" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} [%thread] %level - %message%newline" />
      </layout>
      <!-- 仅记录INFO及以上级别 -->
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="INFO" />
        <levelMax value="INFO" />
      </filter>
    </appender>

    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Logs/" />
      <datePattern value="yyyyMMdd'/ErrorLog.txt'" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <staticLogFileName value="false" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} [%thread] %level - %message%newline%exception" />
      </layout>
      <!-- 仅记录ERROR及以上级别 -->
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="ERROR" />
      </filter>
    </appender>

    <!-- 关联Appender到根日志 -->
    <root>
      <level value="ALL" />
      <appender-ref ref="InfoAppender" />
      <appender-ref ref="ErrorAppender" />
    </root>
  </log4net>
  1. 编写LogHelper辅助类(可进行参考)
csharp 复制代码
    public class LogHelper
    {
        private static readonly ILog _logger = LogManager.GetLogger(typeof(LogHelper));

        // 通用日志方法(支持自动捕获调用者信息)
        public static void Log(LogLevel level, string message,
                              [CallerFilePath] string file = "",
                              [CallerMemberName] string member = "")
        {
            var className = System.IO.Path.GetFileNameWithoutExtension(file);
            var fullMessage = $"[{className}.{member}] {message}";

            switch (level)
            {
                case LogLevel.Debug: _logger.Debug(fullMessage); break;
                case LogLevel.Info: _logger.Info(fullMessage); break;
                case LogLevel.Warn: _logger.Warn(fullMessage); break;
                case LogLevel.Error: _logger.Error(fullMessage); break;
                case LogLevel.Fatal: _logger.Fatal(fullMessage); break;
            }
        }

        // 错误日志专用(自动捕获异常)
        public static void Error(string message, Exception ex = null,
                                [CallerFilePath] string file = "",
                                [CallerMemberName] string member = "")
        {
            var className = System.IO.Path.GetFileNameWithoutExtension(file);
            var fullMessage = $"[{className}.{member}] {message}";
            _logger.Error(fullMessage, ex); // 自动记录异常堆栈
        }
    }

    public enum LogLevel { Debug, Info, Warn, Error, Fatal }
  1. 最后要在入口函数Program中加载并初始化 XML 格式日志配置,代码如下
csharp 复制代码
log4net.Config.XmlConfigurator.Configure();

**

相关推荐
专注VB编程开发20年5 小时前
C# int*指向 int 的指针类型(unsafe 上下文)
java·开发语言·c#
Eiceblue6 小时前
通过 C# 将 RTF 文档转换为图片
开发语言·算法·c#
c#上位机6 小时前
halcon求图像灰度最大值和最小值——min_max_gray
图像处理·人工智能·计算机视觉·c#·上位机·halcon
sali-tec15 小时前
C# 基于halcon的视觉工作流-章66 四目匹配
开发语言·人工智能·数码相机·算法·计算机视觉·c#
ITMr.罗1 天前
深入理解EF Core更新机制(开发中因为省事遇到的问题)
服务器·数据库·c#·.net
用户4488466710601 天前
.NET进阶——深入理解委托(3)事件入门
c#·.net
赵庆明老师1 天前
NET 中,你可以使用LINQ 根据指定字段排序
c#·linq
武藤一雄1 天前
C# 万字拆解线程间通讯?
后端·微软·c#·.net·.netcore·多线程
lljss20201 天前
C# 定时器类实现1s定时器更新UI
开发语言·c#