ASP.NET Core中使用Log4net

    科技2024-04-08  68

    在ASP.NET Core中依赖注入的方式(非LogManager.GetLogger)使用log4net;Nuget安装2个程序包:log4net、Microsoft.Extensions.Logging.Log4Net.AspNetCore(这个包实现了ILogger和ILoggerProvider这2个接口,.NET Framework不用引用这个程序包); 新增配置文件,网上很多配置样本,我的是每天一个日志文件,以“LOG/年/月”做目录,以当天日期命名日志文件; <?xml version="1.0" encoding="utf-8" ?> <log4net> <appender name="rollingAppender" type="log4net.Appender.RollingFileAppender"> <!-- name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪种介质--> <param name="File" value="Log\\" /> <!--日志输出到exe程序这个相对目录下--> <param name="AppendToFile" value="true" /> <!--输出的日志不会覆盖以前的信息--> <param name="MaxSizeRollBackups" value="100" /> <!--备份文件的个数--> <param name="MaxFileSize" value="10240" /> <!--当个日志文件的最大大小--> <param name="StaticLogFileName" value="false" /> <!--是否使用静态文件名--> <param name="DatePattern" value="yyyy\\yyyyMM\\yyyyMMdd'.txt'" /> <!--日志路径和文件名--> <param name="RollingStyle" value="Date" /> <!--文件创建的方式,这里是以Date方式创建--> <!--错误日志布局--> <layout type="log4net.Layout.PatternLayout"> <!-- 输出样式: %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息 %n(new line):换行 %d(datetime):输出当前语句运行的时刻 %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数 %t(thread id):当前语句所在的线程ID %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等 %c(class):当前日志对象的名称,例如: %f(file):输出语句所在的文件名。 %l(line):输出语句所在的行号。 %数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。 --> <!--每条日志末尾的文字说明--> <!--输出格式--> <!--样例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info--> <conversionPattern value="%n记录时间:%date %n线程ID:[%thread] %n日志级别: %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n" /> <!-- <param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n异常时间:%d [%t] &lt;BR&gt;%n异常级别:%-5p &lt;BR&gt;%n异 常 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;" /> --> </layout> </appender> <root> <priority value="ALL"/> <level value="ALL"/> <appender-ref ref="rollingAppender" /> </root> 在Program.cs里为HostBuilder配置Log4net public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging(log => { log.ClearProviders();//清除 //过滤掉System和Microsoft开头的命名空间下的组件产生的警告级别以下的日志 log.AddFilter("System", LogLevel.Warning); log.AddFilter("Microsoft", LogLevel.Warning); //注册log4net中间件 log.AddLog4Net("CFGFiles/log4net.config"); }).ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); } 在Home控制器里依赖注入并使用 public class HomeController : Controller { private readonly ILogger _Log; public HomeController(ILogger<HomeController> logger) { //Core自带的容器 IServiceCollection 会自动依赖注入的 this._Log = logger; } public IActionResult Index() { _Log.LogInformation($"日志记录 LogInformation:{this.GetType()}"); return View(); } } 结果截图
    Processed: 0.013, SQL: 8