Quartz Custom Logger:消息功能为空

时间:2020-01-17 10:39:26

标签: quartz-scheduler quartz.net

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

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],但是级别是不同的级别,表明我猜这些是有效的调用。

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

1 个答案:

答案 0 :(得分:0)

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

我在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,则表示未启用错误级别。

因此,我输出中的所有那些日志消息可能只是对已启用的日志级别的测试。