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();

**

相关推荐
ServBay12 分钟前
C# 成为 2025 年的编程语言,7个C#技巧助力开发效率
后端·c#·.net
故事不长丨4 小时前
C#进制转换:从基础原理到实战应用
开发语言·c#·进制转换·16进制·2进制·10进制
liulilittle4 小时前
VEthernet 框架实现 tun2socks 的技术原理
网络·windows·c#·信息与通信·通信
云草桑4 小时前
.net AI API应用 客户发的信息提取对接上下游系统报价
ai·c#·.net·semantickernel·sk
故事不长丨6 小时前
C#File文件操作全解析:从基础用法到异常处理
服务器·开发语言·visualstudio·c#·文件操作·io流·file
工程师0076 小时前
C# 动态编程(基于 dynamic 类型)
开发语言·c#·dynamic·动态编程
用户298698530147 小时前
C#: 在Word文档中添加或移除可编辑区域
后端·c#
爱说实话8 小时前
C# 2026
c#
flysh059 小时前
关于C#编程中的async / await关键字
开发语言·c#
m5655bj9 小时前
使用 C# 将 RTF 文档转换为 PDF 格式
pdf·c#