aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/csharp/Grpc.Core/Logging/LogLevelFilterLogger.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/csharp/Grpc.Core/Logging/LogLevelFilterLogger.cs')
-rw-r--r--src/csharp/Grpc.Core/Logging/LogLevelFilterLogger.cs43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/csharp/Grpc.Core/Logging/LogLevelFilterLogger.cs b/src/csharp/Grpc.Core/Logging/LogLevelFilterLogger.cs
index b611c191a5..a650d029d7 100644
--- a/src/csharp/Grpc.Core/Logging/LogLevelFilterLogger.cs
+++ b/src/csharp/Grpc.Core/Logging/LogLevelFilterLogger.cs
@@ -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;
@@ -40,6 +42,19 @@ namespace Grpc.Core.Logging
}
/// <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>
public virtual ILogger ForType<T>()
@@ -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;
+ }
+ }
}
}