zoukankan      html  css  js  c++  java
  • .NET Core log4net 使用

    log4net .NET Core 版使用,log4net 2.0.7版发布也有一段时间了,从2.0.6 版开始就已经支持.NET Core。

    之前有介绍NLog .NET Core版的使用,ASP.NET Core 开发-Logging 使用NLog 写日志文件

    ASP.NET Core已经内置了日志支持,可以轻松输出到控制台。使用log4net 将日志写入到文件及输出控制台。

    .NET Core项目使用

    新建一个 .NET Core 项目,选择控制台应用程序

    添加引用:

    Install-Package log4net

    使用简单配置,将日志输出至控制台,跟之前.NET 版本略微有些区别,需要指定Repository 。

            public static void Main(string[] args)
            {
                ILoggerRepository repository = LogManager.CreateRepository("NETCoreRepository");
                // 默认简单配置,输出至控制台
                BasicConfigurator.Configure(repository);
                ILog log = LogManager.GetLogger(repository.Name,"NETCorelog4net");
    
                log.Info("NETCorelog4net log");
                log.Info("test log");
                log.Error("error");
                log.Info("linezero");
                Console.ReadKey();
            }

    运行程序显示如下:

    下面增加配置,让其输出至文件。

    在项目中添加一个配置文件,这里添加一个log4net.config ,内容如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <!-- This section contains the log4net configuration settings -->
      <log4net>
        <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
          <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" />
        </appender>
        
        <appender name="FileAppender" type="log4net.Appender.FileAppender">
          <file value="log-file.log" />
          <appendToFile value="true" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
          </layout>
        </appender>
    
        <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
          <file value="logfile/" />
          <appendToFile value="true" />
          <rollingStyle value="Composite" />
          <staticLogFileName value="false" />
          <datePattern value="yyyyMMdd'.log'" />
          <maxSizeRollBackups value="10" />
          <maximumFileSize value="1MB" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
          </layout>
        </appender>
    
        <!-- Setup the root category, add the appenders and set the default level -->
        <root>
          <level value="ALL" />
          <appender-ref ref="ConsoleAppender" />
          <appender-ref ref="FileAppender" />
          <appender-ref ref="RollingLogFileAppender" />
        </root>
    
      </log4net>
    </configuration>

    这里定义了三个 Appender,都会起作用,然后日志级别ALL 所有的日志都会记录。

    更改Program.cs 代码如下:

            public static void Main(string[] args)
            {
                ILoggerRepository repository = LogManager.CreateRepository("NETCoreRepository");
                XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
                ILog log = LogManager.GetLogger(repository.Name,"NETCorelog4net");
    
                log.Info("NETCorelog4net log");
                log.Info("test log");
                log.Error("error");
                log.Info("linezero");
                Console.ReadKey();
            }

    加了指定配置文件。运行程序会生成一个文件夹和一个文件,因为重新定义了ConsoleAppender,控制台输出也有所不同。

    ASP.NET Core项目使用

    在ASP.NET Core 使用也是一样,可以在Program.cs或Startup.cs 中指定Repository,然后控制器或中间件中获取对象使用。

    以下代码是在Startup 构造函数中初始化log4net

        public class Startup
        {
            public static ILoggerRepository repository { get; set; }
            public Startup(IHostingEnvironment env)
            {
                var builder = new ConfigurationBuilder()
                    .SetBasePath(env.ContentRootPath)
                    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                    .AddEnvironmentVariables();
                Configuration = builder.Build();
                repository = LogManager.CreateRepository("NETCoreRepository");
                XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
            }

    然后在Configure 中加了一个记录日志

            public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
            {
                var log = LogManager.GetLogger(repository.Name,typeof(Startup));
                log.Info("test");

    在HomeController 也增加了:

            private ILog log = LogManager.GetLogger(Startup.repository.Name, typeof(HomeController));
            public IActionResult Index()
            {
                log.Info("index view");
                log.Error("Controller Error");
                return View();
            }

    运行应用结果如下,然后对应的文件会有日志记录。

     

    对于输出中文乱码,需要增加编码引用,以及代码。NLog 那篇文章有介绍。写到日志文件是没有问题的。

    参考文档:

    http://logging.apache.org/log4net/release/manual/configuration.html

    http://logging.apache.org/log4net/release/config-examples.html

    如果你觉得本文对你有帮助,请点击“推荐”,谢谢。

  • 相关阅读:
    CodeForces 288A Polo the Penguin and Strings (水题)
    CodeForces 289B Polo the Penguin and Matrix (数学,中位数)
    CodeForces 289A Polo the Penguin and Segments (水题)
    CodeForces 540C Ice Cave (BFS)
    网站后台模板
    雅图CAD
    mbps
    WCF学习-协议绑定
    数据库建表经验总结
    资源位置
  • 原文地址:https://www.cnblogs.com/linezero/p/log4net.html
Copyright © 2011-2022 走看看