0

我注意到在 ASP.NET Core 中设置不同的日志记录级别时,有时通过对 Entity Framework 的不同调用生成的日志记录输出等,控制台 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 中的其他内容可以让我执行此操作 - 我想我会在这里询问,然后再开始在 Entity Framework Core 代码中进行挖掘以查看他们(微软)是如何做到的。

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

提前致谢!

4

2 回答 2

0

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

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

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

于 2018-01-29T19:47:21.637 回答
0

总的来说,ILogger 可以支持您想要的,但您将无法使用某些 ILogger 扩展方法,因为这些方法对您可以执行的操作有更多限制,但您可以添加自己的扩展方法来帮助您。这是 ILogger 的签名。

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

所以你必须创建你的自定义 ILogger 实现并使用 EventId 来决定基于它的颜色......

此外,如果您想全力以赴并为字符串的某些部分着色,您可以使用适用于“标准”ILogger 的TStateand的组合,formatter但您可以在自定义 ILogger 中提取其他信息并按照您喜欢的方式格式化消息。正如@poke 所指出的,编写最先进的控制台记录器可能具有挑战性……但您可以从此处的“标准”控制台记录器实现中获得灵感。

于 2019-06-07T14:45:13.867 回答