Skip to content

Commit 844619c

Browse files
committed
Use local LoggerContext in Log4jLog when static field not initialized yet
Closes gh-24440
1 parent cf1d521 commit 844619c

File tree

1 file changed

+46
-5
lines changed

1 file changed

+46
-5
lines changed

Diff for: spring-jcl/src/main/java/org/apache/commons/logging/LogFactory.java

+46-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2017 the original author or authors.
2+
* Copyright 2002-2020 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -201,7 +201,12 @@ private static class Log4jLog implements Log, Serializable {
201201
private final ExtendedLogger logger;
202202

203203
public Log4jLog(String name) {
204-
this.logger = loggerContext.getLogger(name);
204+
LoggerContext context = loggerContext;
205+
if (context == null) {
206+
// Circular call in early-init scenario -> static field not initialized yet
207+
context = LogManager.getContext(Log4jLog.class.getClassLoader(), false);
208+
}
209+
this.logger = context.getLogger(name);
205210
}
206211

207212
@Override
@@ -324,92 +329,110 @@ public Slf4jLog(T logger) {
324329
this.logger = logger;
325330
}
326331

332+
@Override
327333
public boolean isFatalEnabled() {
328334
return isErrorEnabled();
329335
}
330336

337+
@Override
331338
public boolean isErrorEnabled() {
332339
return this.logger.isErrorEnabled();
333340
}
334341

342+
@Override
335343
public boolean isWarnEnabled() {
336344
return this.logger.isWarnEnabled();
337345
}
338346

347+
@Override
339348
public boolean isInfoEnabled() {
340349
return this.logger.isInfoEnabled();
341350
}
342351

352+
@Override
343353
public boolean isDebugEnabled() {
344354
return this.logger.isDebugEnabled();
345355
}
346356

357+
@Override
347358
public boolean isTraceEnabled() {
348359
return this.logger.isTraceEnabled();
349360
}
350361

362+
@Override
351363
public void fatal(Object message) {
352364
error(message);
353365
}
354366

367+
@Override
355368
public void fatal(Object message, Throwable exception) {
356369
error(message, exception);
357370
}
358371

372+
@Override
359373
public void error(Object message) {
360374
if (message instanceof String || this.logger.isErrorEnabled()) {
361375
this.logger.error(String.valueOf(message));
362376
}
363377
}
364378

379+
@Override
365380
public void error(Object message, Throwable exception) {
366381
if (message instanceof String || this.logger.isErrorEnabled()) {
367382
this.logger.error(String.valueOf(message), exception);
368383
}
369384
}
370385

386+
@Override
371387
public void warn(Object message) {
372388
if (message instanceof String || this.logger.isWarnEnabled()) {
373389
this.logger.warn(String.valueOf(message));
374390
}
375391
}
376392

393+
@Override
377394
public void warn(Object message, Throwable exception) {
378395
if (message instanceof String || this.logger.isWarnEnabled()) {
379396
this.logger.warn(String.valueOf(message), exception);
380397
}
381398
}
382399

400+
@Override
383401
public void info(Object message) {
384402
if (message instanceof String || this.logger.isInfoEnabled()) {
385403
this.logger.info(String.valueOf(message));
386404
}
387405
}
388406

407+
@Override
389408
public void info(Object message, Throwable exception) {
390409
if (message instanceof String || this.logger.isInfoEnabled()) {
391410
this.logger.info(String.valueOf(message), exception);
392411
}
393412
}
394413

414+
@Override
395415
public void debug(Object message) {
396416
if (message instanceof String || this.logger.isDebugEnabled()) {
397417
this.logger.debug(String.valueOf(message));
398418
}
399419
}
400420

421+
@Override
401422
public void debug(Object message, Throwable exception) {
402423
if (message instanceof String || this.logger.isDebugEnabled()) {
403424
this.logger.debug(String.valueOf(message), exception);
404425
}
405426
}
406427

428+
@Override
407429
public void trace(Object message) {
408430
if (message instanceof String || this.logger.isTraceEnabled()) {
409431
this.logger.trace(String.valueOf(message));
410432
}
411433
}
412434

435+
@Override
413436
public void trace(Object message, Throwable exception) {
414437
if (message instanceof String || this.logger.isTraceEnabled()) {
415438
this.logger.trace(String.valueOf(message), exception);
@@ -530,89 +553,107 @@ public JavaUtilLog(String name) {
530553
this.logger = java.util.logging.Logger.getLogger(name);
531554
}
532555

556+
@Override
533557
public boolean isFatalEnabled() {
534558
return isErrorEnabled();
535559
}
536560

561+
@Override
537562
public boolean isErrorEnabled() {
538563
return this.logger.isLoggable(java.util.logging.Level.SEVERE);
539564
}
540565

566+
@Override
541567
public boolean isWarnEnabled() {
542568
return this.logger.isLoggable(java.util.logging.Level.WARNING);
543569
}
544570

571+
@Override
545572
public boolean isInfoEnabled() {
546573
return this.logger.isLoggable(java.util.logging.Level.INFO);
547574
}
548575

576+
@Override
549577
public boolean isDebugEnabled() {
550578
return this.logger.isLoggable(java.util.logging.Level.FINE);
551579
}
552580

581+
@Override
553582
public boolean isTraceEnabled() {
554583
return this.logger.isLoggable(java.util.logging.Level.FINEST);
555584
}
556585

586+
@Override
557587
public void fatal(Object message) {
558588
error(message);
559589
}
560590

591+
@Override
561592
public void fatal(Object message, Throwable exception) {
562593
error(message, exception);
563594
}
564595

596+
@Override
565597
public void error(Object message) {
566598
log(java.util.logging.Level.SEVERE, message, null);
567599
}
568600

601+
@Override
569602
public void error(Object message, Throwable exception) {
570603
log(java.util.logging.Level.SEVERE, message, exception);
571604
}
572605

606+
@Override
573607
public void warn(Object message) {
574608
log(java.util.logging.Level.WARNING, message, null);
575609
}
576610

611+
@Override
577612
public void warn(Object message, Throwable exception) {
578613
log(java.util.logging.Level.WARNING, message, exception);
579614
}
580615

616+
@Override
581617
public void info(Object message) {
582618
log(java.util.logging.Level.INFO, message, null);
583619
}
584620

621+
@Override
585622
public void info(Object message, Throwable exception) {
586623
log(java.util.logging.Level.INFO, message, exception);
587624
}
588625

626+
@Override
589627
public void debug(Object message) {
590628
log(java.util.logging.Level.FINE, message, null);
591629
}
592630

631+
@Override
593632
public void debug(Object message, Throwable exception) {
594633
log(java.util.logging.Level.FINE, message, exception);
595634
}
596635

636+
@Override
597637
public void trace(Object message) {
598638
log(java.util.logging.Level.FINEST, message, null);
599639
}
600640

641+
@Override
601642
public void trace(Object message, Throwable exception) {
602643
log(java.util.logging.Level.FINEST, message, exception);
603644
}
604645

605646
private void log(java.util.logging.Level level, Object message, Throwable exception) {
606-
if (logger.isLoggable(level)) {
647+
if (this.logger.isLoggable(level)) {
607648
LogRecord rec;
608649
if (message instanceof LogRecord) {
609650
rec = (LogRecord) message;
610651
}
611652
else {
612653
rec = new LocationResolvingLogRecord(level, String.valueOf(message));
613654
rec.setLoggerName(this.name);
614-
rec.setResourceBundleName(logger.getResourceBundleName());
615-
rec.setResourceBundle(logger.getResourceBundle());
655+
rec.setResourceBundleName(this.logger.getResourceBundleName());
656+
rec.setResourceBundle(this.logger.getResourceBundle());
616657
rec.setThrown(exception);
617658
}
618659
logger.log(rec);

0 commit comments

Comments
 (0)