この記事で説明したように、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用に構成する方法は?
次のコードを使用してファイルを正常に記録できます
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>
ASP.NET Coreロギングインターフェイス用のlog4netアダプターが既に存在することに注意してください。
必要なことは、ILoggerFactory
をStartup
クラスに渡してから呼び出します
loggerFactory.AddLog4Net();
そして、設定があります。そのため、ボイラーメッキコードを記述する必要はありません。
https://github.com/huorswords/Microsoft.Extensions.Logging.Log4Net.AspNetCore
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");
}
}
まだ解決策をお探しですか?私はこれから私のものを得ました link 。
「プログラムクラス」の「public static void Main」メソッドの先頭にこの2行のコードを追加するだけでした。
var logRepo = LogManager.GetRepository(Assembly.GetEntryAssembly());
XmlConfigurator.Configure(logRepo, new FileInfo("log4net.config"));
はい、追加する必要があります:
また、出力コンソールに記録されるすべてのものが選択したアペンダーに記録されるように、asp.netコアアプリケーションを構成することもできます。このサンプルコードを github からダウンロードして、どのように構成したかを確認することもできます。
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ノードが見つかりませんでした。
LoggerFactory.AddLog4Net()で名前空間があいまいであることが問題であることがわかりました。ここに、Asp.Net Coreプロジェクトにlog4Netを追加した方法の概要を示します。
ルートアプリケーションフォルダーにlog4net.configファイルを追加します
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(); 。 ... }
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]-これは情報ログです