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

**

相关推荐
淡海水3 小时前
01-04-认知篇-Unity内存全景
unity·c#·游戏引擎·.net·gc
淡海水14 小时前
01-03-认知篇-C#内存模型深度解析
unity·c#·游戏引擎·.net·gc
lzhdim19 小时前
C#不为人知的10个魔法特性:资深开发者也会震惊的底层奥秘
java·前端·javascript·算法·c#
前端 贾公子1 天前
LangChain核心组件 == 提示词(Prompts)
开发语言·c#
码艺-Alimjan1 天前
Web 网站打包桌面应用的另一种方式,超级简单(C# exe 33Kb)
开发语言·前端·c#
海天鹰1 天前
C#入门:显示窗口
c#
淡海水1 天前
16-02-C#常用数据结构源码-附录B-源码索引速查
unity·c#·游戏引擎·il2cpp
海天鹰1 天前
C#入门:在cmd显示字符
c#
波力海苔夹心脆6752 天前
C# 序列化与反序列化详解:System.Text.Json、Newtonsoft.Json、XmlSerializer 用法、特性选项与安全实践
经验分享·后端·c#·json·.net
小羊没烦恼!2 天前
在Scrum中实施敏捷建模
java·开发语言·windows·算法·c#