|
|
|
@ -27,6 +27,8 @@ namespace Grpc.Core.Logging |
|
|
|
|
/// <summary>Logger that filters out messages below certain log level.</summary> |
|
|
|
|
public class LogLevelFilterLogger : ILogger |
|
|
|
|
{ |
|
|
|
|
// Verbosity environment variable used by C core. |
|
|
|
|
private const string CoreVerbosityEnvVarName = "GRPC_VERBOSITY"; |
|
|
|
|
readonly ILogger innerLogger; |
|
|
|
|
readonly LogLevel logLevel; |
|
|
|
|
|
|
|
|
@ -39,6 +41,19 @@ namespace Grpc.Core.Logging |
|
|
|
|
this.logLevel = logLevel; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Creates and instance of <c>LogLevelFilter.</c> |
|
|
|
|
/// The <c>fromEnvironmentVariable</c> parameter allows looking up "GRPC_VERBOSITY" setting provided by C-core |
|
|
|
|
/// and uses the same log level for C# logs. Using this setting is recommended as it can prevent unintentionally hiding |
|
|
|
|
/// C core logs requested by "GRPC_VERBOSITY" environment variable (which could happen if C# logger's log level was set to a more restrictive value). |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="logger">the logger to forward filtered logs to.</param> |
|
|
|
|
/// <param name="defaultLogLevel">the default log level, unless overriden by env variable.</param> |
|
|
|
|
/// <param name="fromEnvironmentVariable">if <c>true</c>, override log level with setting from environment variable.</param> |
|
|
|
|
public LogLevelFilterLogger(ILogger logger, LogLevel defaultLogLevel, bool fromEnvironmentVariable) : this(logger, GetLogLevelFromEnvironment(defaultLogLevel, fromEnvironmentVariable)) |
|
|
|
|
{ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Returns a logger associated with the specified type. |
|
|
|
|
/// </summary> |
|
|
|
@ -141,5 +156,33 @@ namespace Grpc.Core.Logging |
|
|
|
|
innerLogger.Error(exception, message); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// <summary>Get log level based on a default and lookup of <c>GRPC_VERBOSITY</c> environment variable.</summary> |
|
|
|
|
private static LogLevel GetLogLevelFromEnvironment(LogLevel defaultLogLevel, bool fromEnvironmentVariable) |
|
|
|
|
{ |
|
|
|
|
if (!fromEnvironmentVariable) |
|
|
|
|
{ |
|
|
|
|
return defaultLogLevel; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var verbosityString = System.Environment.GetEnvironmentVariable(CoreVerbosityEnvVarName); |
|
|
|
|
if (verbosityString == null) |
|
|
|
|
{ |
|
|
|
|
return defaultLogLevel; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// NOTE: C core doesn't have "WARNING" log level |
|
|
|
|
switch (verbosityString.ToUpperInvariant()) |
|
|
|
|
{ |
|
|
|
|
case "DEBUG": |
|
|
|
|
return LogLevel.Debug; |
|
|
|
|
case "INFO": |
|
|
|
|
return LogLevel.Info; |
|
|
|
|
case "ERROR": |
|
|
|
|
return LogLevel.Error; |
|
|
|
|
default: |
|
|
|
|
return defaultLogLevel; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|