直接创建ConsoleLogger令人惊讶地不起作用

时间:2017-11-21 22:49:29

标签: c# logging asp.net-core

有人可以向我解释为什么这不起作用吗?这让我感到惊讶。如果这不是一个可行的用法,我会说这是一种设计气味。我应该不允许通过API的设计来做到这一点,否则我会期待一个有用的错误。

    public static void Main(string[] args)
    {
        var l = new ConsoleLogger("test", (s, ll) => true, true);
        l.WriteMessage(LogLevel.Critical, "test", 0, "hello world", null);
    }

这种实现几乎没有输出。为什么?我觉得我不应该使用DependencyInjection和服务定位机制。

1 个答案:

答案 0 :(得分:3)

我想这是因为火灾和遗忘(Task.Factory.StartNew)的实施。见here。 (换句话说,代码不会等待打印消息。)

如果你这样做:

var l = new ConsoleLogger("test", (s, ll) => true, true);
for (int i = 0; i < 10000; i++)
{
   l.WriteMessage(LogLevel.Critical, "test", 0, "hello world", null);
}

它工作正常并且正在打印消息。

如果您需要同步进行控制台日志记录,我建议您实施等待日志记录操作的own console logger