首先说明的我的例子是以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(); }
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" }; } } }
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="
Time:[%d]--Thread:[%t]--Class:[%C]--Method:[%M]--File:[%F]--Line:[%L]
%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="
Time:[%d]--Thread:[%t]--Class:[%C]--Method:[%M]--File:[%F]--Line:[%L]
%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="
Time:[%d]--Thread:[%t]--Class:[%C]--Method:[%M]--File:[%F]--Line:[%L]
%m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ERROR" /> <param name="LevelMax" value="ERROR" /> </filter> </appender> </log4net>
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})"
7.还有一个需要注意一下的操作就是log4net.config右击-->属性-->始终复制
8.log4net.config因为引入了第三方包,里面的函数名称,行号,不能完美显示,最新的如下,见名知意
Time:[%date]--Thread:[%thread]--Class:[%logger]--MESSAGE:[%message%]%newline--Exception:[%exception]%newline