Microsoft LoggingExtensionsパッケージを使用してNetCore2.0でロギングを実験する簡単なテストプロジェクトがあります。
私が抱えている問題は、アプリを初めて実行したときに、期待どおりに情報メッセージがログに記録されることです。私が持っている奇妙な振る舞いは、その後の実行ではメッセージがまったく生成されないということです。
私のプロジェクトはNetCore 2.0フレームワークを対象としており、次のNuGetパッケージがインストールされています。
以下は、ロギングを機能させようとしているサンプルコードです。
using System;
namespace LoggingNetCore2
{
using Microsoft.Extensions.Logging;
class Program
{
static void Main(string[] args)
{
var loggerFactory = new LoggerFactory();
loggerFactory.AddConsole();
loggerFactory.AddDebug(); // <-- why is this needed for console logging?
var logger = loggerFactory.CreateLogger(typeof(Program));
logger.LogInformation("Hello, World!");
logger.LogTrace("trace");
logger.LogDebug("debug");
logger.LogWarning("warning");
logger.LogCritical("critical");
logger.LogError("errrrr");
//using (logger.BeginScope("MyMessages"))
//{
// logger.LogInformation("Beginning Operation...");
// logger.LogInformation("Doing something cool... please wait.");
// logger.LogInformation("Completed successfully.");
//}
}
}
}
上記を実行しても、コンソールウィンドウに出力が表示されません。何が起こっているのかを思い浮かぶアイデアはありますか?
私が試したこと:
編集:デバッグログプロバイダーをミックスに追加すると、コンソールウィンドウにログが表示されるようになりました。
NetCore 1.xアプリでは、コンソールプロバイダーを追加するだけで十分でした。
編集#2:コンソールロギングプロバイダーは、net-core-1.xの場合のように、メッセージをコンソールにすぐにフラッシュしないことが判明しました。バージョン。別のスレッドで実行されているようです。詳細については、このWebページを参照してください: https://github.com/aspnet/Logging/issues/631
@ ajawad987、その通りです。 Dispose()
は機能します。
public class Program
{
public static void Main(string[] args)
{
var services = new ServiceCollection()
.AddLogging(config => config.AddConsole())
.BuildServiceProvider();
services.GetRequiredService<ILogger<Program>>()
.LogCritical("Hello");
((IDisposable) services)?.Dispose();
}
}