Кварц Custom Logger: функция сообщения является нулевой - PullRequest
0 голосов
/ 17 января 2020

Я добавил собственный регистратор в свое приложение, в основном прямо из документов:

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();
    }
}

Как ни странно, мне часто звонят с удовольствием c == null. В этих случаях параметры - это объект [0], но уровень может быть разным, что указывает на то, что это допустимые вызовы.

Кто-нибудь может объяснить, что это за сообщения журнала? Есть ли еще информация, которую можно получить в другом месте?

1 Ответ

0 голосов
/ 17 января 2020

У меня может быть ответ (но было бы интересно услышать от кого-то, кто знает больше).

Я нашел следующий код в 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, это означает, что уровень ошибки не включен.

Так что все эти сообщения журнала в моих выходных данных, вероятно, являются просто тестами для включенных уровней журнала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...