1
1
/*
2
- * Copyright 2002-2019 the original author or authors.
2
+ * Copyright 2002-2022 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
22
22
import org .apache .commons .logging .Log ;
23
23
import org .apache .commons .logging .impl .NoOpLog ;
24
24
25
+
25
26
/**
26
27
* Implementation of {@link Log} that wraps a list of loggers and delegates
27
28
* to the first one for which logging is enabled at the given level.
@@ -35,131 +36,119 @@ final class CompositeLog implements Log {
35
36
private static final Log NO_OP_LOG = new NoOpLog ();
36
37
37
38
38
- private final Log fatalLogger ;
39
-
40
- private final Log errorLogger ;
41
-
42
- private final Log warnLogger ;
43
-
44
- private final Log infoLogger ;
45
-
46
- private final Log debugLogger ;
47
-
48
- private final Log traceLogger ;
39
+ private final List <Log > loggers ;
49
40
50
41
51
42
/**
52
- * Constructor with list of loggers. For optimal performance, the constructor
53
- * checks and remembers which logger is on for each log category.
43
+ * Package-private constructor with list of loggers.
54
44
* @param loggers the loggers to use
55
45
*/
56
- public CompositeLog (List <Log > loggers ) {
57
- this .fatalLogger = initLogger (loggers , Log ::isFatalEnabled );
58
- this .errorLogger = initLogger (loggers , Log ::isErrorEnabled );
59
- this .warnLogger = initLogger (loggers , Log ::isWarnEnabled );
60
- this .infoLogger = initLogger (loggers , Log ::isInfoEnabled );
61
- this .debugLogger = initLogger (loggers , Log ::isDebugEnabled );
62
- this .traceLogger = initLogger (loggers , Log ::isTraceEnabled );
63
- }
64
-
65
- private static Log initLogger (List <Log > loggers , Predicate <Log > predicate ) {
66
- for (Log logger : loggers ) {
67
- if (predicate .test (logger )) {
68
- return logger ;
69
- }
70
- }
71
- return NO_OP_LOG ;
46
+ CompositeLog (List <Log > loggers ) {
47
+ this .loggers = loggers ;
72
48
}
73
49
74
50
75
51
@ Override
76
52
public boolean isFatalEnabled () {
77
- return ( this . fatalLogger != NO_OP_LOG );
53
+ return isEnabled ( Log :: isFatalEnabled );
78
54
}
79
55
80
56
@ Override
81
57
public boolean isErrorEnabled () {
82
- return ( this . errorLogger != NO_OP_LOG );
58
+ return isEnabled ( Log :: isErrorEnabled );
83
59
}
84
60
85
61
@ Override
86
62
public boolean isWarnEnabled () {
87
- return ( this . warnLogger != NO_OP_LOG );
63
+ return isEnabled ( Log :: isWarnEnabled );
88
64
}
89
65
90
66
@ Override
91
67
public boolean isInfoEnabled () {
92
- return ( this . infoLogger != NO_OP_LOG );
68
+ return isEnabled ( Log :: isInfoEnabled );
93
69
}
94
70
95
71
@ Override
96
72
public boolean isDebugEnabled () {
97
- return ( this . debugLogger != NO_OP_LOG );
73
+ return isEnabled ( Log :: isDebugEnabled );
98
74
}
99
75
100
76
@ Override
101
77
public boolean isTraceEnabled () {
102
- return (this .traceLogger != NO_OP_LOG );
78
+ return isEnabled (Log ::isTraceEnabled );
79
+ }
80
+
81
+ private boolean isEnabled (Predicate <Log > predicate ) {
82
+ return (getLogger (predicate ) != NO_OP_LOG );
103
83
}
104
84
105
85
@ Override
106
86
public void fatal (Object message ) {
107
- this . fatalLogger .fatal (message );
87
+ getLogger ( Log :: isFatalEnabled ) .fatal (message );
108
88
}
109
89
110
90
@ Override
111
91
public void fatal (Object message , Throwable ex ) {
112
- this . fatalLogger .fatal (message , ex );
92
+ getLogger ( Log :: isFatalEnabled ) .fatal (message , ex );
113
93
}
114
94
115
95
@ Override
116
96
public void error (Object message ) {
117
- this . errorLogger .error (message );
97
+ getLogger ( Log :: isErrorEnabled ) .error (message );
118
98
}
119
99
120
100
@ Override
121
101
public void error (Object message , Throwable ex ) {
122
- this . errorLogger .error (message , ex );
102
+ getLogger ( Log :: isErrorEnabled ) .error (message , ex );
123
103
}
124
104
125
105
@ Override
126
106
public void warn (Object message ) {
127
- this . warnLogger .warn (message );
107
+ getLogger ( Log :: isWarnEnabled ) .warn (message );
128
108
}
129
109
130
110
@ Override
131
111
public void warn (Object message , Throwable ex ) {
132
- this . warnLogger .warn (message , ex );
112
+ getLogger ( Log :: isWarnEnabled ) .warn (message , ex );
133
113
}
134
114
135
115
@ Override
136
116
public void info (Object message ) {
137
- this . infoLogger .info (message );
117
+ getLogger ( Log :: isInfoEnabled ) .info (message );
138
118
}
139
119
140
120
@ Override
141
121
public void info (Object message , Throwable ex ) {
142
- this . infoLogger .info (message , ex );
122
+ getLogger ( Log :: isInfoEnabled ) .info (message , ex );
143
123
}
144
124
145
125
@ Override
146
126
public void debug (Object message ) {
147
- this . debugLogger .debug (message );
127
+ getLogger ( Log :: isDebugEnabled ) .debug (message );
148
128
}
149
129
150
130
@ Override
151
131
public void debug (Object message , Throwable ex ) {
152
- this . debugLogger .debug (message , ex );
132
+ getLogger ( Log :: isDebugEnabled ) .debug (message , ex );
153
133
}
154
134
155
135
@ Override
156
136
public void trace (Object message ) {
157
- this . traceLogger .trace (message );
137
+ getLogger ( Log :: isTraceEnabled ) .trace (message );
158
138
}
159
139
160
140
@ Override
161
141
public void trace (Object message , Throwable ex ) {
162
- this .traceLogger .trace (message , ex );
142
+ getLogger (Log ::isTraceEnabled ).trace (message , ex );
143
+ }
144
+
145
+ private Log getLogger (Predicate <Log > predicate ) {
146
+ for (Log logger : this .loggers ) {
147
+ if (predicate .test (logger )) {
148
+ return logger ;
149
+ }
150
+ }
151
+ return NO_OP_LOG ;
163
152
}
164
153
165
154
}
0 commit comments