从 ILogger 设置红隼输出颜色



我注意到在 ASP.NET Core 中设置不同的日志记录级别时,有时对实体框架的不同调用生成的日志记录输出,控制台 ForeColor 会更改为黄色、红色、蓝色等......

我认为能够对这个窗口进行自定义颜色会很好(只是为了让我放入日志输出的内容作为从我的代码发送到 ILogger 的消息更好地突出一点)

我尝试以这种方式设置颜色(只是为了看看它是否有效)......

//set the console color (expecting the Kestrel console window to change to this)
var oldColor = Console.ForeColor;
Console.ForeColor = ConsoleColor.Yellow
//send the log message (expecting it to be yellow when output in the kestrel console window)
_logger.LogTrace(@"Hello World!");
//be a good citizen and set the color back now that the log message has been displayed
Console.ForeColor = Console.ForeColor;

不幸的是,事情并没有这么简单,我必须在工厂中执行此操作,或者 ILogger 中还有其他东西可以让我这样做 - 我想在我开始挖掘实体框架核心代码之前,我会在这里问一下他们 (Microsoft) 是如何做到的。

我尝试在SO和MSDN上搜索有关此主题的一些信息 - 我没有想出任何东西,所以如果已经回答并且我只是在错误的地方寻找,我会提前道歉。

提前感谢!

ILogger 实现中的颜色是根据正在记录的日志级别决定的。如果你想自己指定颜色,你需要自己实现ILogger。这是一个非常简单的界面,但作为参考,这篇文章为您提供了一个示例。

http://asp.net-hacker.rocks/2017/05/05/add-custom-logging-in-aspnetcore.html

另外,如果你想全力以赴,有一个很好的库可以包装控制台,这样你就可以更容易地切换颜色,而不必在这里继续设置ForegroundColourhttp://colorfulconsole.com/

接下来,ILogger 可以支持您想要的内容,但您将无法使用某些 ILogger 扩展方法,因为这些方法对您可以执行的操作更具限制性,但您可以添加自己的扩展方法来帮助您。这是伊洛格的签名。

void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, 
Func<TState, Exception, string> formatter);

因此,您必须创建自定义 ILogger 实现并使用 EventId 根据该实现确定颜色...

此外,如果您想全部加入并着色字符串的某些部分,您可以使用适用于"标准"ILogger 的TStateformatter的组合,但您可以在自定义 ILogger 中提取其他信息并按照您喜欢的方式格式化消息。 正如@poke所指出的,编写最先进的控制台记录器可能会使...但是,您可以从此处的"标准"控制台记录器实现中激发自己的灵感。

相关内容

  • 没有找到相关文章

最新更新