2

私はserilogを使用して、すべてのWeb APIトレースイベントを1つのファイルに記録し、すべてのコードデバッグを次のコードで別のファイルに記録しています:

問題は、trace.json がデバッグ イベントもログに記録していることです。これは、minimumLevel フィルターが原因であると思われます。

イベントを 2 つのファイルに分割するにはどうすればよいですか?

この質問を試しましたが、ファイルがまったく書き込まれません。

最新のセリログバージョンを使用。

Log.Logger = new LoggerConfiguration()
.WriteTo.Trace(outputTemplate: "{Timestamp} [{Level}] ({HttpRequestId}|{UserName}) {Message}{NewLine}{Exception}")
.MinimumLevel.Debug()
.WriteTo.Sink(new FileSink(@"E:\log.json", new JsonFormatter(false, null, true), null), LogEventLevel.Debug)
.MinimumLevel.Verbose()
.WriteTo.Sink(new FileSink(@"E:\trace.json", new JsonFormatter(false, null, true), null), LogEventLevel.Verbose)
.Enrich.With<HttpRequestIdEnricher>()
.Enrich.With<UserNameEnricher>()
.Enrich.WithProperty("App", "CarbonFactoryERP")
.CreateLogger();

以下は、ロガーを呼び出す方法です。

Log.Logger.Debug("Web API Register Method started at {TimeStamp}",DateTime.UtcNow);

Log.Logger.Verbose("{TimeStamp} {Operation} {Operator} {Message} {Category}", rec.Timestamp, rec.Operation, rec.Operator, rec.Message, rec.Category);
4

2 に答える 2

0

この例では、ログ レベルと SourceContext (アプリケーションの名前空間、クラス名など) に応じて、同じシンクにログを記録します (ただし、別のシンクに書き込むこともできます)。これには、MyAppRootNamespace のすべてのクラスの詳細最小ログ レベルと、他のソース コンテキスト (Microsoft.* など) の警告最小ログ レベルがあります。これにより、正確なニーズへの出発点が得られます。

Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Verbose()
                .Enrich.FromLogContext()
                .WriteTo.Logger(lc => lc
                    .Filter.ByIncludingOnly(Matching.FromSource("MyAppRootNamespace"))
                    .WriteTo.Seq("http://localhost:1009"))
                .WriteTo.Logger(lc => lc
                    .Filter.ByIncludingOnly(e => e.Level >= LogEventLevel.Warning)
                    .Filter.ByExcluding(Matching.FromSource("MyAppRootNamespace"))
                    .WriteTo.Seq("http://localhost:1009"))
                .CreateLogger();

ソース コンテキスト (MyAppRootNamespace) を機能させるには、ログに記録する各クラスに vble を追加する必要があります。

public class MyClass
{
    private ILogger _log = Log.ForContext<MyClass>();
}
于 2017-01-03T16:34:55.583 に答える