【问题标题】:How to instance an Logger in C# .net Core 3.1如何在 C# .net Core 3.1 中实例化一个记录器
【发布时间】:2020-06-30 07:03:38
【问题描述】:

我对使用 Microsoft.Extensions.Logging 类登录项目感兴趣。

我搜索了大约 4 小时,看了一个大约 1 小时的教程,只是不知道如何在 C# 中实例化记录器(大多数教程使用 ASP.Net)

我尝试了什么:

        var loggerFactory = LoggerFactory.Create(builder =>
        {
            builder
                .AddConsole()
                .AddEventLog();
        });
        ILogger logger = loggerFactory.CreateLogger<Form1>();
        logger.LogInformation("Example log message");

此代码是从 Microsoft 网站复制的(稍作更改),它不会给我语法错误或警告,但它什么也不做。

我已经在这些链接上:

我尝试在 Winforms 应用程序中执行此操作

也许你已经在 C# 和 .net Core 中做过类似的事情。

谢谢

【问题讨论】:

  • 您可以使用通用主机设置依赖注入,然后获得一个作用域ILogger&lt;T&gt;
  • 你试过AddDebug()看看有没有效果?
  • 换句话说,你怎么知道“它什么都不做”?你在哪里查的?控制台在 winforms 应用程序中不可用,并且 Windows 事件日志中的消息可能很难找到。但是visual studio会在输出窗口中显示调试信息。
  • @MikeNakis 是的,我做到了,但我没有得到任何输出。
  • 好吧,这是我的两分钱:我不使用日志库。记录只是比琐碎稍微复杂一些,所以很容易自己做,而我对记录库的经验是,它们总是需要太多的故障排除和困惑,为什么它们不值得他们节省的麻烦你。在这些库中,他们故意遵循“我们从不产生错误”的原则,这意味着几乎不可能对它们进行故障排除。这是一个蹩脚的学说。当某些东西不起作用时,我想查看错误。很多错误。

标签: c# winforms logging .net-core


【解决方案1】:

我决定在 WinForms 应用程序中试用您的代码并亲眼看看。您实际上正在记录,但您没有看到日志。我建议添加一个日志库并添加一个文件接收器或类似的。

以下是添加控制台窗口的方法,您可以在其中显示您的日志记录: 在程序中添加:

    internal static class NativeMethods
    {
        [DllImport("kernel32.dll")]
        internal static extern Boolean AllocConsole();
    }

现在,在您的 Main 方法中添加:

NativeMethods.AllocConsole();

这将打开控制台窗口,您将在其中看到您的示例日志消息。

【讨论】:

  • 这个答案是正确的,但我建议你可能想澄清一下:) 这是为了让@LucaScript 能够使用现有的 WinForm 应用程序来尝试这个。无需始终连接到控制台即可查看日志。
  • 这意味着我对 6 小时前发布的问题的 cmets 是正确的。
猜你喜欢
  • 2019-11-04
  • 2021-08-10
  • 2021-02-16
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多