net core 2.1 集成log4net

首先说明的我的例子是以net core的webapi为例子,除了log4net的nuget包之外还有一个扩展包Microsoft.Extensions.Logging.Log4Net.AspNetCore

好了开始搭建项目

创建项目就不说了,从创建好环境的配置说起

1.引入上面说的2个包

2.在Startup的Configure函数里面如下

 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory logger)
        {
            //添加日志描述
            logger.AddLog4Net();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }
    
            app.UseCors();
            app.UseMvc();
        }
View Code

3.在controler里面如下配置

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

namespace PMP.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {

        private readonly ILogger loger;
        public ValuesController(ILogger<ValuesController> _loger)
        {
            loger = _loger;
        }

        // GET api/values
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            loger.LogInformation("玫瑰花一样的女人");
            return new string[] { "value1", "value2" };
        }
       
 
    }
}
View Code

4.注意引入的包

5.log4net.config放到和Startup同级下

<log4net>

  <root>
    <level value="ALL" ref="infoAppender" />
    <appender-ref ref="infoAppender" />
    <appender-ref ref="errorAppender" />
    <appender-ref ref="debugAppender" />
  </root>

  <!-- 日志的等级,它们由高到底分别为: OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL -->
  <!--信息日志配置-->
  <appender name="infoAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Logsinfo.log" />
    <param name="AppendToFile" value="true" />
    <param name="MaxFileSize" value="10240" />
    <param name="MaxSizeRollBackups" value="100" />
    <param name="PreserveLogFileNameExtension" value="true" />
    <param name="StaticLogFileName" value="false" />
    <param name="DatePattern" value="yyyyMMdd" />
    <param name="RollingStyle" value="Date" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="&#xD;&#xA;Time:[%d]--Thread:[%t]--Class:[%C]--Method:[%M]--File:[%F]--Line:[%L]&#xD;&#xA;%m%n" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="INFO" />
      <param name="LevelMax" value="INFO" />
    </filter>
  </appender>

  <!--调试日志配置-->
  <appender name="debugAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Logsdebug.log" />
    <param name="AppendToFile" value="true" />
    <param name="MaxFileSize" value="10240" />
    <param name="MaxSizeRollBackups" value="100" />
    <param name="PreserveLogFileNameExtension" value="true" />
    <param name="StaticLogFileName" value="false" />
    <param name="DatePattern" value="yyyyMMdd" />
    <param name="RollingStyle" value="Date" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="&#xD;&#xA;Time:[%d]--Thread:[%t]--Class:[%C]--Method:[%M]--File:[%F]--Line:[%L]&#xD;&#xA;%m%n" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="DEBUG" />
      <param name="LevelMax" value="DEBUG" />
    </filter>
  </appender>

  <!--错误日志配置-->
  <appender name="errorAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="LogsError.log" />
    <param name="AppendToFile" value="true" />
    <param name="MaxFileSize" value="10240" />
    <param name="MaxSizeRollBackups" value="100" />
    <param name="PreserveLogFileNameExtension" value="true" />
    <param name="StaticLogFileName" value="false" />
    <param name="DatePattern" value="yyyyMMdd" />
    <param name="RollingStyle" value="Date" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="&#xD;&#xA;Time:[%d]--Thread:[%t]--Class:[%C]--Method:[%M]--File:[%F]--Line:[%L]&#xD;&#xA;%m%n" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="ERROR" />
      <param name="LevelMax" value="ERROR" />
    </filter>
  </appender>
</log4net>
View Code

6.elk里面grok过滤语法

"^(Time:[%{TIMESTAMP_ISO8601:logger_time}]--Thread:[%{BASE16NUM:logger_pids}]--Class:[%{USERNAME:logger_Class}]--Method:[%{USERNAME:logger_Method}]--File:[s*(?<logger_descrption>.*?)s*]--Line:[%{BASE16NUM:logger_Line}]%{GREEDYDATA:msg})"
View Code

7.还有一个需要注意一下的操作就是log4net.config右击-->属性-->始终复制

8.log4net.config因为引入了第三方包,里面的函数名称,行号,不能完美显示,最新的如下,见名知意

  Time:[%date]--Thread:[%thread]--Class:[%logger]--MESSAGE:[%message%]%newline--Exception:[%exception]%newline

  

  

原文地址:https://www.cnblogs.com/hkyyqqq/p/10375715.html