【问题标题】:NLog - how to print property value of a subclassNLog - 如何打印子类的属性值
【发布时间】:2021-02-08 20:24:10
【问题描述】:

我有 dotnet 核心控制台应用程序,其中包含相同 BaseClass 的一堆子类。我想为每个子类分配一个短名称/绰号,比如说public string Moniker => "A1",我想在子类或基类调用 Log 时将其打印到日志中。

我不使用任何 DI。记录器是单例类中的静态字段。

还有几个其他类会打印到日志中,但与基类无关。

public static NLog.Logger logger;

【问题讨论】:

    标签: c# .net .net-core nlog


    【解决方案1】:

    我可以为 BaseClass 覆盖 Logger 的名称。

    可能是这样的:

        class BaseClass
        {
            protected virtual Logger Log { get { return _logger } }
            private static Logger _logger = LogManager.GetLogger("MyLogger");
        }
        
        class ExactClass : BaseClass
        {
            protected override Logger Log { get { return _logger } }
            private static Logger _logger = LogManager.GetLogger("MyLogger.A1");
        }
    

    然后在布局中使用${logger}

    ${level} ${logger} ${message}
    

    另请参阅:https://github.com/NLog/NLog/wiki/How-to-create-Logger-for-sub-classes

    【讨论】:

    • { get { _logger } } 是无效的 C# 语法
    • @PavelAnikhouski 感谢您的关注。已更新代码示例(和 wiki)
    【解决方案2】:

    嗯,我认为在日志布局配置中包含变量是不可能的,或者至少很难。

    我的建议是定义将编写自定义日志的方法:

    public string Moniker => "A1";
    
    public void LogInfo(string message) => Logger.Info($"{Moniker} {message}");
    

    【讨论】:

      猜你喜欢
      • 2020-08-28
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 2021-12-09
      • 2021-10-01
      • 2016-03-21
      • 2013-07-30
      • 2020-11-11
      相关资源
      最近更新 更多