3
3
4
4
using System ;
5
5
using System . Collections . Generic ;
6
- using System . Linq ;
7
6
8
7
namespace Microsoft . Framework . Logging
9
8
{
10
9
internal class Logger : ILogger
11
10
{
12
11
private readonly LoggerFactory _loggerFactory ;
13
12
private readonly string _name ;
14
- private ILogger [ ] _loggers = new ILogger [ 0 ] ;
13
+ private ILogger [ ] _loggers ;
15
14
16
15
public Logger ( LoggerFactory loggerFactory , string name )
17
16
{
18
17
_loggerFactory = loggerFactory ;
19
18
_name = name ;
20
19
21
20
var providers = loggerFactory . GetProviders ( ) ;
22
- _loggers = new ILogger [ providers . Length ] ;
23
- for ( var index = 0 ; index != providers . Length ; index ++ )
21
+ if ( providers . Length > 0 )
24
22
{
25
- _loggers [ index ] = providers [ index ] . CreateLogger ( name ) ;
23
+ _loggers = new ILogger [ providers . Length ] ;
24
+ for ( var index = 0 ; index < providers . Length ; index ++ )
25
+ {
26
+ _loggers [ index ] = providers [ index ] . CreateLogger ( name ) ;
27
+ }
26
28
}
27
29
}
28
30
29
31
public void Log ( LogLevel logLevel , int eventId , object state , Exception exception , Func < object , Exception , string > formatter )
30
32
{
33
+ if ( _loggers == null )
34
+ {
35
+ return ;
36
+ }
37
+
31
38
if ( logLevel >= _loggerFactory . MinimumLevel )
32
39
{
33
40
List < Exception > exceptions = null ;
@@ -58,6 +65,11 @@ public void Log(LogLevel logLevel, int eventId, object state, Exception exceptio
58
65
59
66
public bool IsEnabled ( LogLevel logLevel )
60
67
{
68
+ if ( _loggers == null )
69
+ {
70
+ return false ;
71
+ }
72
+
61
73
if ( logLevel < _loggerFactory . MinimumLevel )
62
74
{
63
75
return false ;
@@ -96,11 +108,13 @@ public bool IsEnabled(LogLevel logLevel)
96
108
97
109
public IDisposable BeginScopeImpl ( object state )
98
110
{
99
- var loggers = _loggers ;
100
- if ( loggers . Length == 0 )
111
+ if ( _loggers == null )
101
112
{
102
113
return null ;
103
114
}
115
+
116
+ var loggers = _loggers ;
117
+
104
118
var scope = new Scope ( loggers . Length ) ;
105
119
List < Exception > exceptions = null ;
106
120
for ( var index = 0 ; index != loggers . Length ; index ++ )
@@ -133,7 +147,18 @@ public IDisposable BeginScopeImpl(object state)
133
147
internal void AddProvider ( ILoggerProvider provider )
134
148
{
135
149
var logger = provider . CreateLogger ( _name ) ;
136
- _loggers = _loggers . Concat ( new [ ] { logger } ) . ToArray ( ) ;
150
+ int logIndex ;
151
+ if ( _loggers == null )
152
+ {
153
+ logIndex = 1 ;
154
+ _loggers = new ILogger [ 1 ] ;
155
+ }
156
+ else
157
+ {
158
+ logIndex = _loggers . Length ;
159
+ Array . Resize ( ref _loggers , logIndex + 1 ) ;
160
+ }
161
+ _loggers [ logIndex ] = logger ;
137
162
}
138
163
139
164
private class Scope : IDisposable
@@ -202,4 +227,4 @@ internal void Add(IDisposable disposable)
202
227
}
203
228
}
204
229
}
205
- }
230
+ }
0 commit comments