【问题标题】:Is there a default ILogger available to c# console applications?是否有可用于 c# 控制台应用程序的默认 ILogger?
【发布时间】:2019-01-04 20:49:03
【问题描述】:

在 Java 中,很容易以最少的仪式和零配置调用默认 Logger 对象:

import java.util.logging.*;
public class Whatever {
    private static final Logger log = Logger.getLogger("com.foo.Whatever");
    public void doSomething() {
        log.debug("doing something");
    }
}

假设 C# 有一个类似的等效项(一个默认的、控制台输出的 ILogger,可以通过最少的仪式轻松地从控制台应用程序调用,不需要第三方框架,并且基本上只是 Console.WriteLine 的一个薄包装器()),这是什么?

或者,如果没有类似的默认等效项,有人可以展示一个简单的示例,说明如何在 C# 控制台应用程序中做到这一点吗?

我的问题专门针对 ILogger

我想使用 ILogger 有一个特定的原因——我的库最终将被 Unity3d 应用程序使用。我还不知道该怎么做,但显然有一些方法可以让 UnityEngine 的 Debug.Log Logger 看起来像非 Unity 库的 ILogger。

基本上,当库在 Unity 下运行时,我希望能够获得 UnityEngine 的 Debug.Log 的好处,而无需依赖 UnityEngine 的 Debug.Log 来编译或运行。让 ILogger 在控制台应用程序中工作只是漫长旅程的第一步。

【问题讨论】:

  • 一般没有。有用于 asp.net 核心的。然而,使用像 NLog 这样的库(不是框架)非常简单,但当然提供的不仅仅是输出到控制台......
  • 我只使用像 log4net 这样的通用记录器,如果需要,还可以使用适配器接口来公开依赖注入,前提是您希望接口与另一个记录器兼容。然后我只需 DI 记录器,让他们插入他们想要使用的任何记录器。在我们的应用中弹出 log4net 大约需要 2 分钟。
  • 部分问题是我真的不知道如何在 C# 中做到这一点。我在 Java、Maven 和 Gradle 方面有丰富的经验,但我仍然主要是在 Visual Studio 周围盲目地磕磕绊绊。在这一点上,我对第三方 c# 库有点过敏,因为我对 Unity、Visual Studio、Mono、C# 和 .NET 之间的关系和依赖关系了解得不够多,因此无法避免我的大部分尝试-- 充其量 -- 当我在 Windows 下的 Unity 中运行它时工作,然后当我尝试在 Android 下构建和运行时崩溃。
  • 我认为您的问题可能是关于如何在核心控制台应用程序中设置 DI。谷歌那个。然后就是添加一个 nuget 包。

标签: c# logging


【解决方案1】:

默认为NullLogger。无需自己实现。

请参阅this article 了解更多上下文。

【讨论】:

    【解决方案2】:

    没有,我不会直接引用任何第三方记录器。相反,为您想要的记录器定义一个接口。可以很简单

    public interface ILogger
    {
        Log(string message);
        LogException(Exception ex);
    }
    

    使用您自己的界面,而不是其他任何人的界面。然后,如果需要,您可以使用任意数量的第三方记录器并将它们调整到您的界面。或者你可以编写一个实现来调试我们的控制台输出。

    使用现有库非常棒,只是不要通过在类中到处注入它们的接口来与之耦合。

    【讨论】:

    • 我会改用 Microsoft 的 ILogger 界面。几乎所有第三方记录器都可以挂接到该界面。
    • @maracuja-juice 我应该再看看。微软一直在为抽象创建单独的包,所以我的下意识反应可能不适合这种情况。
    • 2.5 年后,我感觉和以前不一样了。微软的 ILogger 无处不在,我从不创建自己的日志接口。
    猜你喜欢
    • 2023-03-25
    • 2013-08-03
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    相关资源
    最近更新 更多