ConsoleLoggerProviderでLoggerFactoryを作成する方法とは?
2023-09-06 13:49:10
質問
その ConsoleLoggerProvider には4つのコンストラクタがあります。
-
ConsoleLoggerProvider(IConsoleLoggerSettings)
-
ConsoleLoggerProvider(IOptionsMonitor<ConsoleLoggerOptions>)
-
ConsoleLoggerProvider(Func<String,LogLevel,Boolean>, Boolean)
-
ConsoleLoggerProvider(Func<String,LogLevel,Boolean>, Boolean, Boolean)
そのうち3つはこのメッセージとともに廃止が宣言されています。
このメソッドは時代遅れで、将来のバージョンで削除される予定です。推奨される代替案は、フィルタリングを設定するためにLoggerFactoryを使用し、ロギングオプションを設定するためにConsoleLoggerOptionsを使用することです。
コンストラクタ #3 で
LoggerFactory
と
ConsoleLoggerProvider
は簡単です (ドキュメントにあるように
Entity Framework コア - ロギング
):
var loggerFactory = new LoggerFactory(new[] { new ConsoleLoggerProvider((category, level) => level >= LogLevel.Information, true) });
しかし、これは非推奨なので、コンストラクタ#2が残っています。以下は、同等のものを見つけたものです。
var configureNamedOptions = new ConfigureNamedOptions<ConsoleLoggerOptions>("", null);
var optionsFactory = new OptionsFactory<ConsoleLoggerOptions>(new []{ configureNamedOptions }, Enumerable.Empty<IPostConfigureOptions<ConsoleLoggerOptions>>());
var optionsMonitor = new OptionsMonitor<ConsoleLoggerOptions>(optionsFactory, Enumerable.Empty<IOptionsChangeTokenSource<ConsoleLoggerOptions>>(), new OptionsCache<ConsoleLoggerOptions>());
var loggerFactory = new LoggerFactory(new[] { new ConsoleLoggerProvider(optionsMonitor) }, new LoggerFilterOptions { MinLevel = LogLevel.Information });
これは複雑すぎるように思えますが、何かもっと単純なものを見逃していませんか?
どのように解決するのですか?
.NET Core 2.2において、.NET Core 2.0から.NET Core 2.0へのアップグレードのために
ILoggerFactory
を、Microsoft の依存性注入フレームワークによって廃止されたメソッドを使用せずに構築できます。すべてが構築されるバージョンよりも少し冗長ではありませんが
手作業で
. 以下はその方法です。
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
IServiceCollection serviceCollection = new ServiceCollection();
serviceCollection.AddLogging(builder => builder
.AddConsole()
.AddFilter(level => level >= LogLevel.Information)
);
var loggerFactory = serviceCollection.BuildServiceProvider().GetService<ILoggerFactory>();
また、.NET Core 3.0では LoggerFactory.Create :
var loggerFactory = LoggerFactory.Create(builder => {
builder.AddFilter("Microsoft", LogLevel.Warning)
.AddFilter("System", LogLevel.Warning)
.AddFilter("SampleApp.Program", LogLevel.Debug)
.AddConsole();
}
);
も参照してください。
関連
-
[解決済み] 致命的なエラーが発生しました。必要なライブラリhostfxr.dllが見つかりませんでした。
-
[解決済み] ファイルまたはアセンブリをロードできませんでした Microsoft.Extensions.Logging.Abstractions
-
[解決済み] .NET Core 3.0とIIS:HTTPエラー500.30 - ANCMプロセス内起動の失敗:coreclrの読み込みに失敗しました。
-
[解決済み] EXEを出力する.NET Coreコンソールアプリケーションを構築する
-
[解決済み】.NET Coreがインストールされているかどうかを判断する方法
-
[解決済み】.NET Coreコンソールアプリケーションをコマンドラインから実行する方法
-
[解決済み] .NET CoreでデスクトップGUIアプリケーションを作ることは可能か?
-
[解決済み] Visual Studio 2017 で Microsoft.NETCore.App パッケージを更新できない(「プロジェクトによってブロックされた」)。
-
Visual Studio 2017を使用して.NET CoreアプリケーションをEXEファイルとしてコンパイルする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 致命的なエラーが発生しました。必要なライブラリhostfxr.dllが見つかりませんでした。
-
[解決済み] ファイルまたはアセンブリをロードできませんでした Microsoft.Extensions.Logging.Abstractions
-
[解決済み] .NET Core 3.0とIIS:HTTPエラー500.30 - ANCMプロセス内起動の失敗:coreclrの読み込みに失敗しました。
-
[解決済み] EXEを出力する.NET Coreコンソールアプリケーションを構築する
-
[解決済み] .NET CoreでデスクトップGUIアプリケーションを作ることは可能か?
-
[解決済み] Visual Studio 2017 で Microsoft.NETCore.App パッケージを更新できない(「プロジェクトによってブロックされた」)。
-
Visual Studio 2017を使用して.NET CoreアプリケーションをEXEファイルとしてコンパイルする