.NET Core ConsoleアプリでSerilogを使用する方法


8

アプリケーションにファイルへのロギング機能を持たせたいと思ったので、デフォルトの.NET Core 2.2ロギングフレームワーク以上のものを探し始めました。私はセリログがその仕事をするかもしれないのを見ます。ただし、依存性注入を使用して.NET Core ConsoleアプリケーションでSerilogをセットアップする方法に関するドキュメントは見つかりません。私が目にするのはASP.NETの資料だけで、おそらく私が必要としているものではありません。

自分で始めました。インストールしました(Nuget):

  • セリログ
  • Serilog.Extensions.Logging
  • Serilog.Sinks.File
  • Serilog.Sinks.Console(すべてのログにSerilogを使用するため)

の拡張機能を作成しましたServiceCollection

        public static void AddLogging(this IServiceCollection services, Microsoft.Extensions.Logging.LogLevel logLevel)
        {
            var serilogLogger = new LoggerConfiguration()
            .WriteTo.Console()
            .WriteTo.File("log.txt")
            .CreateLogger();

            services.AddLogging(builder =>
            {
                builder.SetMinimumLevel(logLevel);
                builder.AddSerilog(logger: serilogLogger, dispose: true);
            });
        }

ただし、ロギングは機能します。

  • ログレベルは私が設定したものではありません。デバッグしたいのですが、serilogがINFOレベルを使用しているようです。なぜ私の設定が尊重されないのですか?結局、私はまだNET Coreのログフレームワークを使用しているので、ログレベルを設定するためにそれを使用しています。
  • 私は実際にこの設定を正しく行っていますか?あるdisposeべきかどうか本当にわかりませんtrue。一般的に、NET CoreのDependency Injectionフレームワークでサービスの処理を処理してほしい。

回答:


3

よくbuilder.SetMinimumLevelわかりません(Serilog列挙型は使用していません)。

LoggerConfigurationオブジェクトの作成時にロガーレベルを設定します。

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Debug) // restricted... is Optional
    (...)
    .CreateLogger();

ところで。設定の基本の次のセクションを指摘する価値があります

ロガーとシンクの最小値 -ログレベルはシンクに対してのみ上げることができ、下げることはできないことを理解することが重要です。したがって、ロガーのMinimumLevelがInformationに設定されている場合、指定されたレベルとしてDebugを備えたシンクには、依然として情報レベルのイベントのみが表示されます。これは、ロガーレベルの構成がイベントの作成をもたらすロギングステートメントを制御するのに対し、シンクレベルの構成はこれらをフィルタリングするだけだからです。より詳細なレベルの単一のロガーを作成するには、別のLoggerConfigurationを使用します。


わからないですbuilder.AddSerilog

ここに私のために働くものがあります。

using Serilog;

(...)

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    (...)
    .CreateLogger();

(...)

return new HostBuilder()
      .ConfigureHostConfiguration(...)
      .ConfigureServices(...)
      .UseSerilog();

設定に関する最初のポイントは、私の場合にも有効です。builder.SetMinimumLevel設はSerilogの設定よりも高いprioritを持っています。したがって、Serilogで詳細ログを設定し、Microsoftログで実際に必要なレベルを設定して、必要なものを取得できます。ASP.NETなどのホストされたアプリケーションを使用しているようです。おそらく、Serilog.AspNetCoreパッケージを使用しています。私の場合、ホストがありません。
ロレノ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.