我注意到在 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
另外,如果你想全力以赴,有一个很好的库可以包装控制台,这样你就可以更容易地切换颜色,而不必在这里继续设置ForegroundColour
http://colorfulconsole.com/
接下来,ILogger 可以支持您想要的内容,但您将无法使用某些 ILogger 扩展方法,因为这些方法对您可以执行的操作更具限制性,但您可以添加自己的扩展方法来帮助您。这是伊洛格的签名。
void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception,
Func<TState, Exception, string> formatter);
因此,您必须创建自定义 ILogger 实现并使用 EventId 根据该实现确定颜色...
此外,如果您想全部加入并着色字符串的某些部分,您可以使用适用于"标准"ILogger 的TState
和formatter
的组合,但您可以在自定义 ILogger 中提取其他信息并按照您喜欢的方式格式化消息。 正如@poke所指出的,编写最先进的控制台记录器可能会使...但是,您可以从此处的"标准"控制台记录器实现中激发自己的灵感。