• .netcore项目中使用log4net


    log4net配置文件

            引入log4net包,创建一个config目录,专门用来放配置文件,添加log4net.config文件。

            编写配置文件。

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      
      <log4net>
        <!-- 错误日志类-->
        <logger name="errLog">
          <level value="ALL" />
          <appender-ref ref="ErrorAppender" />
        </logger>
        <!-- 错误日志附加介质-->
        <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
          <!--日志文件路径,会自动创建-->
          <param name="File" value="Log\\LogError\\" />
          <!--是否是向文件中追加日志-->
          <param name="AppendToFile" value="true" />
          <!--log备份文件最大数量,超过设置数量会滚动覆盖之前的日志-->
          <param name="MaxSizeRollBackups" value="2" />
          <!--最大文件大小,默认10MB(数据类型:long)等同于maximumFileSize参数-->
          <param name="MaxFileSize" value="10485760" />
          <!--最大文件大小(KB/MB/GB)-->
          <!--<param name="MaximumFileSize" value="1MB" />-->
          <!--日志文件名是否是固定不变的-->
          <param name="StaticLogFileName" value="false" />
          <!--日志文件名格式为:2019-10-09.log-->
          <param name="DatePattern" value="yyyy-MM-dd&quot;.htm&quot;" />
          <!--日志滚动方式:混合方式(文件大小和日期)-->
          <param name="RollingStyle" value="Composite" />
          <!--异常日志布局-->
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n【异常时间】:%d [%t] &lt;BR&gt;%n【异常级别】:%-5p &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
          </layout>
        </appender>
    
        <!-- 信息日志 -->
        <logger name="infoLog">
          <level value="ALL" />
          <appender-ref ref="InfoAppender" />
        </logger>
        <!-- 信息日志附加介质-->
        <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
          <param name="File" value="Log\\LogInfo\\" />
          <param name="AppendToFile" value="true" />
          <param name="MaxSizeRollBackups" value="2" />
          <param name="MaximumFileSize" value="1024KB" />
          <param name="StaticLogFileName" value="false" />
          <param name="DatePattern" value="yyyy-MM-dd&quot;.htm&quot;" />
          <param name="RollingStyle" value="Composite" />
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="&lt;HR COLOR=blue&gt;%n【日志时间】:%d [%t] &lt;BR&gt;%n【日志级别】:%-5p &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
          </layout>
        </appender>
        
      </log4net>
      
    </configuration>

    日志帮助类

            首先创建一个仓储类

    public class Log4NetRepository
    {
        public static ILoggerRepository loggerRepository { get; set; }
    }
        /// <summary>
        /// log4net帮助类
        /// AdoNetAppender仅支持到.net framework4.5,不支持在.net core项目中持久化日志到数据库
        /// </summary>
        public class LogHelper
        {
            // 异常 // 注意:logger name不要写错
            private static readonly ILog logerror = LogManager.GetLogger(Log4NetRepository.loggerRepository.Name, "errLog");
            // 记录
            private static readonly ILog loginfo = LogManager.GetLogger(Log4NetRepository.loggerRepository.Name, "infoLog");
    
            public static void Error(string throwMsg, Exception ex)
            {
                string errorMsg = string.Format("【异常描述】:{0} <br>【异常类型】:{1} <br>【异常信息】:{2} <br>【堆栈调用】:{3}", 
                    new object[] {
                        throwMsg,
                        ex.GetType().Name,
                        ex.Message,
                        ex.StackTrace });
                errorMsg = errorMsg.Replace("\r\n", "<br>");
                logerror.Error(errorMsg);
            }
    
            public static void Info(string message)
            {
                loginfo.Info(string.Format("【日志信息】:{0}",message));
            }
    
        }

            startup引用log4netlog4net.Configlog4net.Repository。在startup的构造函数中这么配置:

    public static ILoggerRepository repository { get; set; }
    
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
        // log4net 仓储
        repository = LogManager.CreateRepository("CoreLogRepository");
        XmlConfigurator.Configure(repository, new FileInfo("config/log4net.config"));
        Log4NetRepository.loggerRepository = repository;
    }

            之前写好了全局异常捕获,现在可以加上这么一句。

    public class ApiExceptionFilter:ExceptionFilterAttribute
        {
            private IHostingEnvironment _env;
            public ApiExceptionFilter(IHostingEnvironment env)
            {
                _env = env;
            }
    
            public override void OnException(ExceptionContext context)
            {
                if (context.ExceptionHandled)
                {
                    return;
                }
                LogHelper.Error(exMsg, context.Exception); // 日志记录
                var exMsg = context.Exception.Message;
                ApiResp resp = new ApiResp(ApiRespCode.E999999,exMsg);
                // 开发环境显示异常信息
                if(_env.IsDevelopment())
                {
                    resp.Message = exMsg;
                }
                context.Result = new JsonResult(resp);
                context.ExceptionHandled = true;
            }
        }

      当发生异常时,会自动在项目目录创建Log\LogError\目录,并写入日志文件。

  • 相关阅读:
    创建网络数据集
    [虚拟机]Virtual Box的使用--共享文件夹
    MapControl图层删除或添加触发监听事件
    Dev控件GridView单元格绑定控件
    Log4net中换行符
    没有为 COM 互操作注册程序集 请使用 regasm.exe /tlb 注册该程序集——解决办法
    加载dll过程中assembly失败
    Spring Boot 自带缓存及结合 Redis 使用
    Spring Boot + Redis 初体验
    在 Windows 中使用 C# 启动其他程序
  • 原文地址:https://www.cnblogs.com/fallTakeMan/p/11688397.html
Copyright © 2020-2023  润新知