.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\目录,并写入日志文件。

 

posted @ 2019-10-16 20:54  原来是李  阅读(3322)  评论(2编辑  收藏  举报