• ASP.NET Core中使用Log4net


    1. 在ASP.NET Core中依赖注入的方式(非LogManager.GetLogger)使用log4net;
    2. Nuget安装2个程序包:log4net、Microsoft.Extensions.Logging.Log4Net.AspNetCore(这个包实现了ILogger和ILoggerProvider这2个接口,.NET Framework不用引用这个程序包);
      在这里插入图片描述
    3. 新增配置文件,网上很多配置样本,我的是每天一个日志文件,以“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>
    
    
    1. 在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>();
                    });
        }
    
    1. 在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();
            }
        }
    
    1. 结果截图
      在这里插入图片描述
  • 相关阅读:
    MySQL存储过程札记
    一个关于 Linux环境下输出操作符 >和>>的问题
    记一次dubbo服务丢失的问题排查
    JDK1.8中的时间处理API
    Redis的懒惰删除与对象共享
    Java内存模型与线程
    Java hotspot即时编译和提前编译
    Java线程安全与锁优化
    Java编译器优化技术
    自动清理SQL Server的数据库日志
  • 原文地址:https://www.cnblogs.com/zoulei0718/p/14315571.html
Copyright © 2020-2023  润新知