如何使用log4net知道当前日志级别以存储在数据库中

时间:2011-10-18 14:15:36

标签: c# .net log4net

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

2 个答案:

答案 0 :(得分:6)

如果您的意思是启用的级别,那么:

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

如果所有这些都是真的那么级别将是Debug,如果启用了Info和Above,那么它就是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

答案 1 :(得分:0)

我解决了实现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;        
        }
    }
}