【问题标题】:Quartz Custom Logger: The message function is nullQuartz Custom Logger:消息函数为空
【发布时间】:2020-01-17 10:39:26
【问题描述】:

我在我的应用程序中添加了一个自定义记录器,基本上直接来自文档:

LogProvider.SetCurrentLogProvider(new ConsoleLogProvider());

private class ConsoleLogProvider : ILogProvider
{
    public Logger GetLogger(string name)
    {
        return (level, func, exception, parameters) =>
        {
            if (func != null)
            {
                Console.WriteLine("[" + DateTime.Now.ToLongTimeString() + "] [" + level + "] " + func(), parameters);
            }
            else
            {
                Console.WriteLine("[" + DateTime.Now.ToLongTimeString() + "] [" + level + "] Func is null");
            }

            return true;
        };
    }

    public IDisposable OpenNestedContext(string message)
    {
        throw new NotImplementedException();
    }

    public IDisposable OpenMappedContext(string key, string value)
    {
        throw new NotImplementedException();
    }
}

奇怪的是,我经常被调用 func == null。在这些情况下,参数是 object[0],但 level 是不同的级别,这表明我猜这些是有效的调用。

谁能解释这些日志消息是什么? 是否有更多信息可以在其他地方获取?

【问题讨论】:

    标签: quartz-scheduler quartz.net


    【解决方案1】:

    我可能有一个答案(但听听了解更多的人会很有趣)。

    我在 LogExtensions.cs 中找到了以下代码:

    static class LogExtensions
        {
            internal static readonly object[] EmptyParams = new object[0];
    
            /// <summary>
            ///     Check if the <see cref="LogLevel.Debug"/> log level is enabled.
            /// </summary>
            /// <param name="logger">The <see cref="ILog"/> to check with.</param>
            /// <returns>True if the log level is enabled; false otherwise.</returns>
            public static bool IsDebugEnabled(this ILog logger)
            {
                GuardAgainstNullLogger(logger);
                return logger.Log(LogLevel.Debug, null, null, EmptyParams);
            }
    
            /// <summary>
            ///     Check if the <see cref="LogLevel.Error"/> log level is enabled.
            /// </summary>
            /// <param name="logger">The <see cref="ILog"/> to check with.</param>
            /// <returns>True if the log level is enabled; false otherwise.</returns>
            public static bool IsErrorEnabled(this ILog logger)
            {
                GuardAgainstNullLogger(logger);
                return logger.Log(LogLevel.Error, null, null, EmptyParams);
            }
    :
    :
    

    似乎对“IsXXXEnabled()”的检查被实现为对 Log() 的虚拟调用,测试返回值。如果您记录错误并且 Log() 返回 false,则表示错误级别未启用。

    所以我输出中的所有这些日志消息可能只是对启用的日志级别的测试。

    【讨论】:

      猜你喜欢
      • 2016-01-21
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 2016-06-26
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多