简体   繁体   English

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

[英]How to Know the current log level using log4net to store in database

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

If you mean the enabled levels then:如果您的意思是启用级别,则:

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

if all of them are true then the level would be Debug, if Info and above is enabled then it is info and so ..如果所有这些都为真,那么级别将是调试,如果启用了信息及以上,则它是信息等等。

you can check like this你可以这样检查

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";

You can also get the specific level by this:您还可以通过以下方式获得特定级别:

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

I solve the issue like this for anything implementing ILogger in this case you would have a local property called Logger that is an implementation of ILogger.我解决了任何实现 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;        
}

You could also create a extension method in the ILogger namespace so that anywhere you use ILogger you have the functionality.您还可以在 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;        
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM