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

**

相关推荐
人工智能AI技术17 分钟前
【C#程序员入门AI】本地大模型落地:用Ollama+C#在本地运行Llama 3/Phi-3,无需云端
人工智能·c#
MyBFuture4 小时前
C#数组详解:一维二维与交错数组
开发语言·windows·c#·visual studio·vision pro
有来技术5 小时前
ASP.NET Core 权限管理系统(RBAC)设计与实现|vue3-element-admin .NET 后端
vue.js·后端·c#·asp.net·.net
张人玉7 小时前
C#WinFrom中show和ShowDialog的区别
开发语言·microsoft·c#
m0_748233177 小时前
C#:微软的现代编程利器
开发语言·microsoft·c#
Traced back7 小时前
SQL Server数据自动清理系统最终版(C# WinForms完整源码)
数据库·c#·.net
人工智能AI技术8 小时前
【C#程序员入门AI】Microsoft Extensions for AI (MEAI):统一LLM调用接口,告别厂商绑定
人工智能·c#
William_cl9 小时前
C# ASP.NET路由系统全解析:传统路由 vs 属性路由,避坑 + 实战一网打尽
开发语言·c#·asp.net
初九之潜龙勿用1 天前
C# 操作Word模拟解析HTML标记之背景色
开发语言·c#·word·.net·office
时光追逐者1 天前
使用 MWGA 帮助 7 万行 Winforms 程序快速迁移到 WEB 前端
前端·c#·.net