コンソールへのログインに組み込みのロギングプロバイダーを使用しています(Microsoft.Extensions.Logging.Console
).NET Coreコンソールアプリケーション。
各ロギングエントリは、出力に2行を生成します。各エントリを1行にまとめたいと思います。出力形式をカスタマイズする方法はありますか?
ここに私がそれを使用する方法の例があります:
static void Main(string[] args)
{
var serviceProvider = new ServiceCollection()
.AddLogging() // This adds the Microsoft logging.
.AddSingleton<IProjectGeneratorService, CSharpProjectGeneratorService>()
.BuildServiceProvider();
// Configure the console logging.
serviceProvider
.GetService<ILoggerFactory>()
.AddConsole(LogLevel.Debug);
// Write a logging entry
var logger = serviceProvider.GetService<ILoggerFactory>().CreateLogger<Program>();
logger.LogDebug("Application started...");
}
私が得るものは:
dbug: Generator.Program[0]
Application started...
私が持ちたいのは次のようなものです:
dbug: Generator.Program[0]: Application started...
何か案が?カスタムロガーを書くことはできますが、他の方法があるかどうか知りたいです。
ありがとう。
現時点では、これは構成できません。ソースコード GitHubにあります :
logBuilder.Append(logName); logBuilder.Append("["); logBuilder.Append(eventId); logBuilder.AppendLine("]");
それが必要な場合は、独自のロガーを作成する必要があります。ただし、コンソールロガーのソースコードをコピーし、必要に応じて変更し、ネームスペースを変更するだけで、Microsoftが出荷するバージョンに干渉することはありません。
ロギングリポジトリの問題 を開いて、このオプションを要求することもできます。
@MartinUllrichが既に述べたように、この改行は無効にすることはできず、それを避けるためにカスタムロガーを実装する必要があります。
登録:
loggerFactory.AddProvider(new CustomLoggerProvider());
実装(元の ConsoleLogger ソースコードを使用して拡張できます-たとえば、GetLogLevelConsoleColors
メソッドを追加できます):
public class CustomLoggerProvider : ILoggerProvider
{
public void Dispose() { }
public ILogger CreateLogger(string categoryName)
{
return new CustomConsoleLogger(categoryName);
}
public class CustomConsoleLogger : ILogger
{
private readonly string _categoryName;
public CustomConsoleLogger(string categoryName)
{
_categoryName = categoryName;
}
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{
if (!IsEnabled(logLevel))
{
return;
}
Console.WriteLine($"{logLevel}: {_categoryName}[{eventId.Id}]: {formatter(state, exception)}");
}
public bool IsEnabled(LogLevel logLevel)
{
return true;
}
public IDisposable BeginScope<TState>(TState state)
{
return null;
}
}
}
Serilogのようなロギングライブラリを使用できます。
ASP.NET Core統合 からの指示を使用して、後で Console sink を介してログ出力テンプレートを簡単に提供できます。
.WriteTo.Console(
outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}")