web-dev-qa-db-ja.com

Asp.netコア2.0でlog4netを使用する方法

この記事で説明したように、asp.net core 2.0アプリケーションでlog4netを構成します LINK

program.cs

public static void Main(string[] args)
{
    var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());
    XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));

    BuildWebHost(args).Run();
}

HomeController

public class HomeController : Controller
{
    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(HomeController));

    public IActionResult Error()
    {
        log.Info("Hello logging world!");
        return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
    }
}

log4net.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <log4net>
    <root>
      <level value="ALL" />
      <appender-ref ref="RollingFile" />
    </root>
    <appender name="RollingFile" type="log4net.Appender.FileAppender">
      <file value="‪C:\Temp\app.log" /> 
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%-5p %d{hh:mm:ss} %message%newline" />
      </layout>
    </appender>
  </log4net>
</configuration>

残念なことに、‪C:\Temp\app.logディレクトリに生成されたファイルはありませんでした。間違いは何でしょうか? log4netをasp.netコア2.0用に構成する方法は?

38
k11k2

次のコードを使用してファイルを正常に記録できます

public static void Main(string[] args)
{
    XmlDocument log4netConfig = new XmlDocument();
    log4netConfig.Load(File.OpenRead("log4net.config"));
    var repo = log4net.LogManager.CreateRepository(Assembly.GetEntryAssembly(),
               typeof(log4net.Repository.Hierarchy.Hierarchy));
    log4net.Config.XmlConfigurator.Configure(repo, log4netConfig["log4net"]);

    BuildWebHost(args).Run();
}

webサイトのルートのlog4net.config

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    <file value="C:\Temp\" />
    <datePattern value="yyyy-MM-dd.'txt'"/>
    <staticLogFileName value="false"/>
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <maxSizeRollBackups value="100"/>
    <maximumFileSize value="15MB"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level App  %newline %message %newline %newline"/>
    </layout>
  </appender>
    <root>
      <level value="ALL"/>
      <appender-ref ref="RollingLogFileAppender"/>
    </root>
</log4net>
29
Irfan Ashraf

ASP.NET Coreロギングインターフェイス用のlog4netアダプターが既に存在することに注意してください。

必要なことは、ILoggerFactoryStartupクラスに渡してから呼び出します

loggerFactory.AddLog4Net();

そして、設定があります。そのため、ボイラーメッキコードを記述する必要はありません。

https://github.com/huorswords/Microsoft.Extensions.Logging.Log4Net.AspNetCore

47
Jan Muncinsky

Microsoft.Extensions.Logging.Log4Net.AspNetCore NuGetパッケージをインストールし、log4net.configファイルをアプリケーションに追加する必要があります。その後、これは動作するはずです:

public class Program
{
    private readonly ILogger<Program> logger;

    public Program()
    {
        var services = new ServiceCollection()
            .AddLogging(logBuilder => logBuilder.SetMinimumLevel(LogLevel.Debug))
            .BuildServiceProvider();


        logger = services.GetService<ILoggerFactory>()
            .AddLog4Net()
            .CreateLogger<Program>();
    }

    static void Main(string[] args)
    {
        Program program = new Program();

        program.Run();

        Console.WriteLine("\n\nPress any key to continue...");
        Console.ReadKey();
    }

    private void Run()
    {
        logger.LogInformation("Logging is working");
    }
}
3
Jonny

まだ解決策をお探しですか?私はこれから私のものを得ました link

「プログラムクラス」の「public static void Main」メソッドの先頭にこの2行のコードを追加するだけでした。

 var logRepo = LogManager.GetRepository(Assembly.GetEntryAssembly());
 XmlConfigurator.Configure(logRepo, new FileInfo("log4net.config"));

はい、追加する必要があります:

  1. NuGetを使用したMicrosoft.Extensions.Logging.Log4Net.AspNetCore。
  2. Log4net.configという名前のテキストファイルで、ファイルのプロパティ(出力ディレクトリにコピー)を「新しい場合にコピー」または「常にコピー」に変更します。

また、出力コンソールに記録されるすべてのものが選択したアペンダーに記録されるように、asp.netコアアプリケーションを構成することもできます。このサンプルコードを github からダウンロードして、どのように構成したかを確認することもできます。

3
Kwame

Irfanの答えに従って、.NET Core 2.1.300を使用してOSX上に次のXML構成を作成し、./logフォルダーとコンソールにも正しくログを記録して追加します。 log4net.configがソリューションルートに存在する必要があることに注意してください(私の場合、アプリのルートはサブフォルダーです)。

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
      <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %-5level %logger - %message%newline" />
      </layout>
  </appender>
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    <file value="logs/" />
    <datePattern value="yyyy-MM-dd.'txt'"/>
    <staticLogFileName value="false"/>
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <maxSizeRollBackups value="100"/>
    <maximumFileSize value="15MB"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level App  %newline %message %newline %newline"/>
    </layout>
  </appender>
    <root>
      <level value="ALL"/>
      <appender-ref ref="RollingLogFileAppender"/>
      <appender-ref ref="ConsoleAppender"/>
    </root>
</log4net>

別のメモ、app.config内でXMLを設定する従来の方法は機能しませんでした。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net> ...

何らかの理由で、log4netConfig["log4net"]を介してXMLDocumentにアクセスするときにlog4netノードが見つかりませんでした。

1
Shane

LoggerFactory.AddLog4Net()で名前空間があいまいであることが問題であることがわかりました。ここに、Asp.Net Coreプロジェクトにlog4Netを追加した方法の概要を示します。

  1. ナゲットパッケージMicrosoft.Extensions.Logging.Log4Net.AspNetCoreを追加します
  2. ルートアプリケーションフォルダーにlog4net.configファイルを追加します

  3. Startup.csファイルを開き、Configureメソッドを変更して、この行でlog4netサポートを追加しますloggerFactory.AddLog4Net

まず、Microsoft.Extensions.Loggingを使用してパッケージをインポートする必要があります。 usingステートメントの使用

ここにメソッド全体があります。ILoggerFactoryインターフェースに名前空間をプレフィックスする必要があります

 public void Configure(IApplicationBuilderアプリ、IHostingEnvironment env、NorthwindContextコンテキスト、Microsoft.Extensions.Logging.ILoggerFactory loggerFactory)
 {
 loggerFactory.AddLog4Net(); 
。 ... 
} 
1
techjunkie

here をクリックして、.NET Core 2.2でlog4netを実装する方法を学習します

上記のリンクから次の手順を実行し、log4netを.NET Core 2.2プロジェクトに追加する方法を分類します。

まず、パッケージマネージャーコンソールで次のコマンドを実行します。

Install-Package Log4Net_Logging -Version 1.0.0

次に、次の情報を含むlog4net.configを追加します(設定に合わせて編集してください)。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
      <file value="logfile.log" />
      <appendToFile value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d [%t] %-5p - %m%n" />
      </layout>
    </appender>
    <root>
      <!--LogLevel: OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
      <level value="ALL" />
      <appender-ref ref="FileAppender" />
    </root>
  </log4net>
</configuration>

次に、次のコードをコントローラーに追加します(これは一例です。コントローラーに追加する前に編集してください)。

public ValuesController()
{
    LogFourNet.SetUp(Assembly.GetEntryAssembly(), "log4net.config");
}
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
    LogFourNet.Info(this, "This is Info logging");
    LogFourNet.Debug(this, "This is Debug logging");
    LogFourNet.Error(this, "This is Error logging");    
    return new string[] { "value1", "value2" };
}

次に、関連するコントローラーアクションを呼び出し(上記の例を使用して、HTTP GETで/Values/Getを呼び出す)、次の内容に一致する出力を受け取ります。

2019-06-05 19:58:45,103 [9] INFO- [Log4NetLogging_Project.Controllers.ValuesController.Get:23]-これは情報ログです

0
Shani Bhati