1+ using  System . Collections . Concurrent ; 
2+ 
3+ var  builder  =  WebApplication . CreateBuilder ( ) ; 
4+ 
5+ // Adjust the minimum level here and see the impact  
6+ // on the displayed logs. 
7+ // The rule is it will show >= minimum level 
8+ // The levels are: 
9+ // - Trace = 0 
10+ // - Debug = 1 
11+ // - Information = 2 
12+ // - Warning = 3 
13+ // - Error = 4 
14+ // - Critical = 5 
15+ // - None = 6 
16+ 
17+ builder . Logging . SetMinimumLevel ( LogLevel . Warning ) ; 
18+ builder . Logging . AddConsole ( ) ; 
19+ 
20+ var  app  =  builder . Build ( ) ; 
21+ Log . Configure ( app . Services . GetRequiredService < ILoggerFactory > ( ) ) ;  
22+ 
23+ app . Run ( context => 
24+ { 
25+  var  log  =  Log . CreateLogger ( "main" ) ; 
26+  log . LogTrace ( "Trace message" ) ; 
27+  log . LogDebug ( "Debug message" ) ; 
28+  log . LogInformation ( "Information message" ) ; 
29+  log . LogWarning ( "Warning message" ) ; 
30+  log . LogError ( "Error message" ) ; 
31+  log . LogCritical ( "Critical message" ) ; 
32+  return  context . Response . WriteAsync ( "Hello world. Take a look at your terminal to see the logging messages." ) ; 
33+ } ) ; 
34+ app . Run ( ) ; 
35+ 
36+  public  static class  Log 
37+ { 
38+  static ILoggerFactory  _loggerFactory ; 
39+ 
40+  static readonly  ConcurrentDictionary < string ,  ILogger >  _loggers  =  new ( ) ; 
41+  
42+  public  static void  Configure ( ILoggerFactory  loggerFactory ) 
43+  { 
44+  _loggerFactory  =  loggerFactory  ??  throw  new  ArgumentNullException ( nameof ( loggerFactory ) ) ; 
45+  } 
46+  
47+  public  static ILogger  CreateLogger < T > ( )  =>  _loggers . GetOrAdd ( typeof ( T ) . FullName ,  _ =>  _loggerFactory . CreateLogger < T > ( ) ) ; 
48+  
49+  public  static ILogger  CreateLogger ( string  categoryName )  =>  _loggers . GetOrAdd ( categoryName ,  _ =>  _loggerFactory . CreateLogger ( categoryName ) ) ; 
50+ } 
0 commit comments