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

**

相关推荐
Scout-leaf1 天前
C#摸鱼实录——IoC与DI案例详解
c#
咕白m6251 天前
使用 C# 在 Excel 中应用多种字体样式
后端·c#
Artech2 天前
[MAF预定义的AIContextProvider-02]AgentSkillsProvider——将Agent Skills引入MAF
ai·c#·agent·agent skills·maf
2601_962072552 天前
李梦娇常识4600问|题库|打印版
sql·华为od·华为·c#·华为云·.net·harmonyos
m0_547486662 天前
《C#语言程序设计与实践》 全套PPT课件
c语言·c#·c语言程序设计
叶帆3 天前
【YFIOs】用C#开发硬件之设备上云
开发语言·unity·c#
IT方大同3 天前
(嵌入式操作系统)信号量
嵌入式硬件·c#
z落落3 天前
C# FileStream文件流读取文件
开发语言·c#
yngsqq3 天前
排版优化 异形排版
c#
苦学的罐头3 天前
C# 协变与逆变深度解析:为什么 IEnumerable<T> 能转换,而 List<T> 不行?
开发语言·c#·list