如何了解使用log4net存储在数据库中的当前日志级别

本文关键字:数据库 日志 存储 何了解 了解 log4net | 更新日期: 2023-09-27 18:11:48

如何了解应用程序使用log4net在数据库中存储的当前日志级别

如何了解使用log4net存储在数据库中的当前日志级别

如果你指的是启用的级别,那么:

bool IsDebugEnabled { get; }
bool IsInfoEnabled { get; }
bool IsWarnEnabled { get; }
bool IsErrorEnabled { get; }
bool IsFatalEnabled { get; }

如果它们都为真,那么级别将是Debug,如果Info及以上是启用的,那么它是Info,等等。

你可以像这样检查

if(myLogger.IsDebugEnabled)
  return "Debug";
else if(myLogger.IsInfoEnabled)
  return "Info";
else if(myLogger.IsWarnEnabled)
  return "Warn";
else if(myLogger.IsErrorEnabled)
  return "Error";
else if(myLogger.IsFatalEnabled)
  return "Fatal";
else
  return "None";

您还可以通过以下方式获得具体级别:

((log4net.Repository.Hierarchy.Logger)mylogger.Logger).Level

我像这样解决任何实现ILogger的问题,在这种情况下,您将有一个名为Logger的本地属性,它是ILogger的实现。

public LogLevel GetLogLevel()
{
    var levels=new []{LogLevel.Critical,  LogLevel.Error, LogLevel.Warning, LogLevel.Information,LogLevel.Debug,LogLevel.Trace};
    foreach (var level in levels)
    {
        if (Logger.IsEnabled(level))
            return level;
    }
    return LogLevel.None;        
}

您还可以在ILogger名称空间中创建一个扩展方法,以便在使用ILogger的任何地方都具有该功能。

namespace Microsoft.Extensions.Logging
{
    public static class LoggerExtension
    {
        /// <summary>
        /// Gets the current log level
        /// </summary>
        /// <param name="logger"></param>
        /// <returns>The most restrictive LogLevel that is used</returns>
        public static LogLevel GetLogLevel(this ILogger logger)
        {
            if (logger is null)
            {
                throw new System.ArgumentNullException(nameof(logger));
            }
            var levels=new []{LogLevel.Critical,  LogLevel.Error, LogLevel.Warning, LogLevel.Information,LogLevel.Debug,LogLevel.Trace};
            foreach (var level in levels)
            {
                if (logger.IsEnabled(level))
                    return level;
            }
            return LogLevel.None;        
        }
    }
}