如何使用log4net在应用程序的数据库中存储当前日志级别。
答案 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;
}
}
}