.NET Core 2.0(+ ASP.NET Core 2.0)にアップグレードした後、トレースレベルのログ情報が出力されないようです。
実際、_dotnet new web
_ projectを実行して、ConfigureのStartupに以下のコードを追加すると、トレースまたはデバッグログメッセージは表示されませんが、情報とエラーメッセージは2回表示されます。 .AddConsole()
callをコメントアウトすると、これら(情報とエラー)が1回だけ出力されます。これは、デフォルトでコンソールプロバイダーで自動的に設定されることを示唆しています。これは「ファイル->新規」プロジェクトエクスペリエンスであり、_Program.cs
_にはこのためのロギングまたは設定用のセットアップは何もありません-追加したものを除きます。誰もが見た?または、GitHubの問題を登録する必要があります。
_public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Microsoft.Extensions.Logging.LogLevel.Trace);
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.Run(async (context) =>
{
var logger = loggerFactory.CreateLogger("Blah");
logger.LogTrace("Hello world : Trace");
logger.LogDebug("Hello world : Debug");
logger.LogInformation("Hello world : Information");
logger.LogError("Hello world : Error");
await context.Response.WriteAsync("Hello World!");
});
}
_
ロギングの設定方法が少し変更されました...推奨される方法(そして this GitHub issue/announcement で十分に文書化されています)これを行うには、AddLogging
のロガーを設定しますなどの方法
_services.AddLogging(builder =>
{
builder.AddConfiguration(Configuration.GetSection("Logging"))
.AddConsole()
.AddDebug();
});
_
そして、_appsettings.json
_のような
この例はすべてのロガーではなくConsole
プロバイダーの構成のみを示しているため、一部の人々は混乱しているようです。
LogLevel
セクションは、すべてのネームスペース(Default
キー)または特定のネームスペース(System
のロギングレベルを構成します。ネームスペースが_System.*
_で始まるすべてのクラスロギングのデフォルト値をオーバーライドします。
これは_ILogger<T>
_のT
で使用されるクラス用です。これにより、この名前空間のロガーのデフォルトのログレベルよりも高いまたは低いレベルを設定できます。
_{
"ApplicationInsights": {
"InstrumentationKey": ""
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Information",
"System": "Warning",
"Microsoft": "Information"
},
"Console": {
"LogLevel": {
"Default": "Warning",
"System": "Information",
"Microsoft": "Information"
}
}
}
}
_
Appsettings.jsonの構造が.NET Core 1.xで使用されていたものから変更され、_appsettings.json
_のLogging
エントリにロガープロバイダー名が含まれるようになったことに注意してください。ロギングプロバイダーごとにロギングレベルを設定します。
以前は、_appsettings.json
_のエントリはコンソールロガーにのみ適用できました。
または、代わりにWebHostBuilder
内でロギングを移動できます。
_public static void Main()
{
var Host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddJsonFile("hosting.json", optional: false)
.AddEnvironmentVariables();
})
.ConfigureLogging((webhostContext, builder) => {
builder.AddConfiguration(webhostContext.Configuration.GetSection("Logging"))
.AddConsole()
.AddDebug();
})
.UseIISIntegration()
.UseStartup<Startup>()
.UseApplicationInsights()
.Build();
Host.Run();
}
_
_appsettings.json
_を使用したくない場合は、フィルターをコードに登録することもできます。
_services.AddLogging(builder =>
{
builder.AddConfiguration(Configuration.GetSection("Logging"))
// filter for all providers
.AddFilter("System", LogLevel.Debug)
// Only for Debug logger, using the provider type or it's alias
.AddFilter("Debug", "System", LogLevel.Information)
// Only for Console logger by provider type
.AddFilter<DebugLoggerProvider>("System", LogLevel.Error)
.AddConsole()
.AddDebug();
});
_
Startup.csファイルのConfiguration.GetSection("Logging")
がの設定から"Logging"
セクションを読み取るため、ほぼ20分を費やしました。 "Error"
として設定されたappsettings.jsonファイル。 "Information"
またはそれ以下に変更すると、問題が修正されました。
以下は、appsettinsg.jsonファイルの外観です。
{
"Logging": {
"IncludeScopes": true,
"Debug": {
"LogLevel": {
"Default": "Information"
}
},
"Console": {
"LogLevel": {
"Default": "Information"
}
}
}
}
ロギングレベルの詳細("Information"
など)を確認するには、ASP.NET Coreのロギングに関する一般情報も提供する this リンクを確認してください。
ロギングを機能させることに問題が生じた場合に備えて、ここに投稿しています。JSONファイルを確認してください。
上記のどれも私にはうまくいきません唯一の回避策はメソッドを書くことでした
private void ConfigLogging( ILoggingBuilder builder ) {
builder.SetMinimumLevel( LogLevel.Trace );
//... additional configuration...
}
addLogging拡張メソッドを使用する場合は、次のように記述します。
services.AddLogging( ConfigLogging );
次のappsettings.json
の構造はうまく機能しているようです:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"System": "Information",
"Microsoft": "Information"
},
"Console":
{
"IncludeScopes": true
}
}
}
https://docs.Microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.1 から取得
また、あなたのスタートアップコールが何であるかを見てください、私は次の作品が私のために働くと思います:
public class Startup
{
public Startup(IHostingEnvironment env)
{
var logger = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.Sink(jsonSink)
.Enrich.WithExceptionDetails()
.CreateLogger();
Log.Logger = logger;
}
}