2017-07-10 141 views
2

我做的輸出日誌是這樣的:如何日誌在控制檯輸出(Microsoft.Extensions.Logging)格式化

static void Main(string[] args) 
    { 
     ILoggerFactory loggerFactory = new LoggerFactory() 
              .AddConsole(); 

     ILogger logger = loggerFactory.CreateLogger<Program>(); 

     logger.LogInformation(
      "This is a test of the emergency broadcast system."); 

     Console.WriteLine("Press any key..."); 
     Console.Read(); 
    } 

我收到的消息:

信息:ConsoleLogging。程序[0]

這是對緊急廣播系統的測試。

但我想這樣:

信息:這是緊急廣播系統的測試。

如何格式化控制檯中的日誌輸出? 我使用庫Microsoft.Extensions.Logging,Microsoft.Extensions.Logging.Console。

回答

0

我正在嘗試做同樣的事情。

我開始通過創建一個名爲SimpleConsoleLogger類,從ConsoleLogger繼承,這樣我可以覆蓋WriteMessage()方法,但在原來的方法中的代碼依賴於一些私人的內部結構和領域,我不想寫整個方法從頭開始。

我結束了創建我自己的SimpleConsoleLoggerbased off the source code for ConsoleLogger.cs類在那裏我可以在類別和事件ID部分刪除WriteMessage()下面幾行:

logBuilder.Append(logName); 
logBuilder.Append("["); 
logBuilder.Append(eventId); 
logBuilder.AppendLine("]"); 

...在消息部分以下行:

logBuilder.Append(_messagePadding); 

我當時有一個基於ConsoleLoggerProvider,在這裏我代入的代碼我SimpleConsoleLogger類來創建一個SimpleConsoleLoggerProvider類,並做了同樣具有ConsoleLoggerExtensions,以創造SimpleConsoleLoggerExtensions,這樣我可以電匯我記錄進廠如下:

_loggerFactory = new LoggerFactory().AddSimpleConsole(); 

這不是最簡單的解決方案,所以類名是有點用詞不當,但它的作品。

Solution Code in Action