.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

 

如果你覺得本文對你有幫助,請點擊“推薦”,謝謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM