68
68
import org .springframework .core .annotation .Order ;
69
69
import org .springframework .core .env .Environment ;
70
70
import org .springframework .core .io .Resource ;
71
+ import org .springframework .core .io .ResourceLoader ;
71
72
import org .springframework .util .Assert ;
72
73
import org .springframework .util .ClassUtils ;
73
74
import org .springframework .util .CollectionUtils ;
85
86
*/
86
87
public class Log4J2LoggingSystem extends AbstractLoggingSystem {
87
88
89
+ private static final String OPTIONAL_PREFIX = "optional:" ;
90
+
88
91
private static final String LOG4J_BRIDGE_HANDLER = "org.apache.logging.log4j.jul.Log4jBridgeHandler" ;
89
92
90
93
private static final String LOG4J_LOG_MANAGER = "org.apache.logging.log4j.jul.LogManager" ;
@@ -269,9 +272,13 @@ protected void loadConfiguration(String location, LogFile logFile, List<String>
269
272
try {
270
273
List <Configuration > configurations = new ArrayList <>();
271
274
LoggerContext context = getLoggerContext ();
272
- configurations .add (load (location , context ));
275
+ ResourceLoader resourceLoader = ApplicationResourceLoader .get ();
276
+ configurations .add (load (resourceLoader , location , context ));
273
277
for (String override : overrides ) {
274
- configurations .add (load (override , context ));
278
+ Configuration overrideConfiguration = loadOptional (resourceLoader , override , context );
279
+ if (overrideConfiguration != null ) {
280
+ configurations .add (overrideConfiguration );
281
+ }
275
282
}
276
283
Configuration configuration = (configurations .size () > 1 ) ? createComposite (configurations )
277
284
: configurations .iterator ().next ();
@@ -282,8 +289,22 @@ protected void loadConfiguration(String location, LogFile logFile, List<String>
282
289
}
283
290
}
284
291
285
- private Configuration load (String location , LoggerContext context ) throws IOException {
286
- Resource resource = ApplicationResourceLoader .get ().getResource (location );
292
+ private Configuration load (ResourceLoader resourceLoader , String location , LoggerContext context )
293
+ throws IOException {
294
+ Resource resource = resourceLoader .getResource (location );
295
+ return load (resource , context );
296
+ }
297
+
298
+ private Configuration loadOptional (ResourceLoader resourceLoader , String location , LoggerContext context )
299
+ throws IOException {
300
+ if (location .startsWith (OPTIONAL_PREFIX )) {
301
+ Resource resource = resourceLoader .getResource (location .substring (OPTIONAL_PREFIX .length ()));
302
+ return (resource .exists ()) ? load (resource , context ) : null ;
303
+ }
304
+ return load (resourceLoader , location , context );
305
+ }
306
+
307
+ private Configuration load (Resource resource , LoggerContext context ) throws IOException {
287
308
ConfigurationSource source = getConfigurationSource (resource );
288
309
return ConfigurationFactory .getInstance ().getConfiguration (context , source );
289
310
}
@@ -323,9 +344,13 @@ private void reinitializeWithOverrides(List<String> overrides) {
323
344
Configuration base = context .getConfiguration ();
324
345
List <AbstractConfiguration > configurations = new ArrayList <>();
325
346
configurations .add ((AbstractConfiguration ) base );
347
+ ResourceLoader resourceLoader = ApplicationResourceLoader .get ();
326
348
for (String override : overrides ) {
327
349
try {
328
- configurations .add ((AbstractConfiguration ) load (override , context ));
350
+ Configuration overrideConfiguration = loadOptional (resourceLoader , override , context );
351
+ if (overrideConfiguration != null ) {
352
+ configurations .add ((AbstractConfiguration ) overrideConfiguration );
353
+ }
329
354
}
330
355
catch (IOException ex ) {
331
356
throw new RuntimeException ("Failed to load overriding configuration from '" + override + "'" , ex );
0 commit comments