11using System ;
2+ using System . Collections . Generic ;
3+ using System . Runtime . InteropServices ;
24using Azure . Monitor . OpenTelemetry . Exporter ;
35using Microsoft . Extensions . Logging ;
46using OpenTelemetry . Logs ;
7+ using OpenTelemetry . Resources ;
58
69namespace GeneXus . Services . Log
710{
8- public class AzureAppInsightsLogProvider : ILoggerFactory
11+ public class OpentelemetryLogProvider : ILoggerFactory
912 {
1013 private static string APPLICATIONINSIGHTS_CONNECTION_STRING = "APPLICATIONINSIGHTS_CONNECTION_STRING" ;
1114 private const string LOG_LEVEL_ENVVAR = "GX_LOG_LEVEL" ;
@@ -25,7 +28,8 @@ public static ILoggerFactory GetAzureMonitorLoggerFactory()
2528 builder . AddOpenTelemetry ( options =>
2629 {
2730 options . AddAzureMonitorLogExporter ( o => o . ConnectionString = appInsightsConnection ) ;
28- options . AddConsoleExporter ( ) ;
31+ if ( GenerateOtelLogsToConsole ( ) )
32+ options . AddConsoleExporter ( ) ;
2933 } ) . SetMinimumLevel ( loglevel ) ;
3034 } ) ;
3135 }
@@ -42,7 +46,7 @@ public static ILoggerFactory GetAzureMonitorLoggerFactory()
4246 return loggerFactory ;
4347 }
4448
45- public static ILoggerFactory GetLoggerFactory ( )
49+ public static ILoggerFactory GetAzureAppInsightsLoggerFactory ( )
4650 {
4751 string appInsightsConnection = Environment . GetEnvironmentVariable ( APPLICATIONINSIGHTS_CONNECTION_STRING ) ;
4852 try
@@ -71,6 +75,23 @@ public static ILoggerFactory GetLoggerFactory()
7175
7276 return loggerFactory ;
7377 }
78+
79+ public static ILoggerFactory GetOpentelemetryLoggerFactory ( )
80+ {
81+ LogLevel loglevel = GetLogLevel ( ) ;
82+ loggerFactory = LoggerFactory . Create ( builder => builder . AddOpenTelemetry ( logging =>
83+ {
84+ var resourceBuilder = ResourceBuilder . CreateDefault ( )
85+ . AddTelemetrySdk ( ) ;
86+
87+ logging . SetResourceBuilder ( resourceBuilder ) ;
88+ if ( GenerateOtelLogsToConsole ( ) )
89+ logging . AddConsoleExporter ( ) ;
90+
91+ } )
92+ . SetMinimumLevel ( loglevel ) ) ;
93+ return loggerFactory ;
94+ }
7495 private static LogLevel GetLogLevel ( )
7596 {
7697 string loglevelvalue = Environment . GetEnvironmentVariable ( LOG_LEVEL_ENVVAR ) ;
@@ -79,7 +100,7 @@ private static LogLevel GetLogLevel()
79100 {
80101 if ( ! Enum . TryParse < LogLevel > ( loglevelvalue , out loglevel ) )
81102 {
82- CustomLogLevel customLogLevel = CustomLogLevel . Info ;
103+ CustomLogLevel customLogLevel = CustomLogLevel . info ;
83104 if ( Enum . TryParse < CustomLogLevel > ( loglevelvalue , out customLogLevel ) )
84105 {
85106 loglevel = toLogLevel ( customLogLevel ) ;
@@ -91,6 +112,13 @@ private static LogLevel GetLogLevel()
91112 return loglevel ;
92113 }
93114
115+ private static bool GenerateOtelLogsToConsole ( )
116+ {
117+ string otelLogsEnvVar = Environment . GetEnvironmentVariable ( GXLogService . OTEL_LOGS_EXPORTER ) ;
118+ if ( string . IsNullOrEmpty ( otelLogsEnvVar ) ) { return false ; }
119+ return otelLogsEnvVar . ToLower ( ) . Contains ( "console" ) || otelLogsEnvVar . ToLower ( ) . Contains ( "logging" ) ;
120+ }
121+
94122 public void AddProvider ( ILoggerProvider provider )
95123 {
96124 loggerFactory . AddProvider ( provider ) ;
@@ -105,25 +133,25 @@ public ILogger CreateLogger(string name)
105133 }
106134 private enum CustomLogLevel
107135 {
108- None ,
109- All ,
110- Debug ,
111- Info ,
112- Warn ,
113- Error ,
114- Fatal
136+ none ,
137+ all ,
138+ debug ,
139+ info ,
140+ warn ,
141+ error ,
142+ fatal
115143 }
116144 private static LogLevel toLogLevel ( CustomLogLevel customLogLevel )
117145 {
118146 switch ( customLogLevel )
119147 {
120- case CustomLogLevel . None : return LogLevel . None ;
121- case CustomLogLevel . All : return LogLevel . Trace ;
122- case CustomLogLevel . Debug : return LogLevel . Debug ;
123- case CustomLogLevel . Info : return LogLevel . Information ;
124- case CustomLogLevel . Warn : return LogLevel . Warning ;
125- case CustomLogLevel . Error : return LogLevel . Error ;
126- case CustomLogLevel . Fatal : return LogLevel . Critical ;
148+ case CustomLogLevel . none : return LogLevel . None ;
149+ case CustomLogLevel . all : return LogLevel . Trace ;
150+ case CustomLogLevel . debug : return LogLevel . Debug ;
151+ case CustomLogLevel . info : return LogLevel . Information ;
152+ case CustomLogLevel . warn : return LogLevel . Warning ;
153+ case CustomLogLevel . error : return LogLevel . Error ;
154+ case CustomLogLevel . fatal : return LogLevel . Critical ;
127155 default : return LogLevel . Information ;
128156 }
129157 }
0 commit comments