Browse Source

Use local LoggerContext in Log4jLog when static field not initialized yet

Closes gh-24440
pull/26383/head
Juergen Hoeller 6 years ago
parent
commit
abc2269d97
  1. 45
      spring-jcl/src/main/java/org/apache/commons/logging/LogAdapter.java

45
spring-jcl/src/main/java/org/apache/commons/logging/LogAdapter.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2018 the original author or authors. * Copyright 2002-2020 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -157,7 +157,12 @@ final class LogAdapter {
private final ExtendedLogger logger; private final ExtendedLogger logger;
public Log4jLog(String name) { public Log4jLog(String name) {
this.logger = loggerContext.getLogger(name); LoggerContext context = loggerContext;
if (context == null) {
// Circular call in early-init scenario -> static field not initialized yet
context = LogManager.getContext(Log4jLog.class.getClassLoader(), false);
}
this.logger = context.getLogger(name);
} }
@Override @Override
@ -280,92 +285,110 @@ final class LogAdapter {
this.logger = logger; this.logger = logger;
} }
@Override
public boolean isFatalEnabled() { public boolean isFatalEnabled() {
return isErrorEnabled(); return isErrorEnabled();
} }
@Override
public boolean isErrorEnabled() { public boolean isErrorEnabled() {
return this.logger.isErrorEnabled(); return this.logger.isErrorEnabled();
} }
@Override
public boolean isWarnEnabled() { public boolean isWarnEnabled() {
return this.logger.isWarnEnabled(); return this.logger.isWarnEnabled();
} }
@Override
public boolean isInfoEnabled() { public boolean isInfoEnabled() {
return this.logger.isInfoEnabled(); return this.logger.isInfoEnabled();
} }
@Override
public boolean isDebugEnabled() { public boolean isDebugEnabled() {
return this.logger.isDebugEnabled(); return this.logger.isDebugEnabled();
} }
@Override
public boolean isTraceEnabled() { public boolean isTraceEnabled() {
return this.logger.isTraceEnabled(); return this.logger.isTraceEnabled();
} }
@Override
public void fatal(Object message) { public void fatal(Object message) {
error(message); error(message);
} }
@Override
public void fatal(Object message, Throwable exception) { public void fatal(Object message, Throwable exception) {
error(message, exception); error(message, exception);
} }
@Override
public void error(Object message) { public void error(Object message) {
if (message instanceof String || this.logger.isErrorEnabled()) { if (message instanceof String || this.logger.isErrorEnabled()) {
this.logger.error(String.valueOf(message)); this.logger.error(String.valueOf(message));
} }
} }
@Override
public void error(Object message, Throwable exception) { public void error(Object message, Throwable exception) {
if (message instanceof String || this.logger.isErrorEnabled()) { if (message instanceof String || this.logger.isErrorEnabled()) {
this.logger.error(String.valueOf(message), exception); this.logger.error(String.valueOf(message), exception);
} }
} }
@Override
public void warn(Object message) { public void warn(Object message) {
if (message instanceof String || this.logger.isWarnEnabled()) { if (message instanceof String || this.logger.isWarnEnabled()) {
this.logger.warn(String.valueOf(message)); this.logger.warn(String.valueOf(message));
} }
} }
@Override
public void warn(Object message, Throwable exception) { public void warn(Object message, Throwable exception) {
if (message instanceof String || this.logger.isWarnEnabled()) { if (message instanceof String || this.logger.isWarnEnabled()) {
this.logger.warn(String.valueOf(message), exception); this.logger.warn(String.valueOf(message), exception);
} }
} }
@Override
public void info(Object message) { public void info(Object message) {
if (message instanceof String || this.logger.isInfoEnabled()) { if (message instanceof String || this.logger.isInfoEnabled()) {
this.logger.info(String.valueOf(message)); this.logger.info(String.valueOf(message));
} }
} }
@Override
public void info(Object message, Throwable exception) { public void info(Object message, Throwable exception) {
if (message instanceof String || this.logger.isInfoEnabled()) { if (message instanceof String || this.logger.isInfoEnabled()) {
this.logger.info(String.valueOf(message), exception); this.logger.info(String.valueOf(message), exception);
} }
} }
@Override
public void debug(Object message) { public void debug(Object message) {
if (message instanceof String || this.logger.isDebugEnabled()) { if (message instanceof String || this.logger.isDebugEnabled()) {
this.logger.debug(String.valueOf(message)); this.logger.debug(String.valueOf(message));
} }
} }
@Override
public void debug(Object message, Throwable exception) { public void debug(Object message, Throwable exception) {
if (message instanceof String || this.logger.isDebugEnabled()) { if (message instanceof String || this.logger.isDebugEnabled()) {
this.logger.debug(String.valueOf(message), exception); this.logger.debug(String.valueOf(message), exception);
} }
} }
@Override
public void trace(Object message) { public void trace(Object message) {
if (message instanceof String || this.logger.isTraceEnabled()) { if (message instanceof String || this.logger.isTraceEnabled()) {
this.logger.trace(String.valueOf(message)); this.logger.trace(String.valueOf(message));
} }
} }
@Override
public void trace(Object message, Throwable exception) { public void trace(Object message, Throwable exception) {
if (message instanceof String || this.logger.isTraceEnabled()) { if (message instanceof String || this.logger.isTraceEnabled()) {
this.logger.trace(String.valueOf(message), exception); this.logger.trace(String.valueOf(message), exception);
@ -486,74 +509,92 @@ final class LogAdapter {
this.logger = java.util.logging.Logger.getLogger(name); this.logger = java.util.logging.Logger.getLogger(name);
} }
@Override
public boolean isFatalEnabled() { public boolean isFatalEnabled() {
return isErrorEnabled(); return isErrorEnabled();
} }
@Override
public boolean isErrorEnabled() { public boolean isErrorEnabled() {
return this.logger.isLoggable(java.util.logging.Level.SEVERE); return this.logger.isLoggable(java.util.logging.Level.SEVERE);
} }
@Override
public boolean isWarnEnabled() { public boolean isWarnEnabled() {
return this.logger.isLoggable(java.util.logging.Level.WARNING); return this.logger.isLoggable(java.util.logging.Level.WARNING);
} }
@Override
public boolean isInfoEnabled() { public boolean isInfoEnabled() {
return this.logger.isLoggable(java.util.logging.Level.INFO); return this.logger.isLoggable(java.util.logging.Level.INFO);
} }
@Override
public boolean isDebugEnabled() { public boolean isDebugEnabled() {
return this.logger.isLoggable(java.util.logging.Level.FINE); return this.logger.isLoggable(java.util.logging.Level.FINE);
} }
@Override
public boolean isTraceEnabled() { public boolean isTraceEnabled() {
return this.logger.isLoggable(java.util.logging.Level.FINEST); return this.logger.isLoggable(java.util.logging.Level.FINEST);
} }
@Override
public void fatal(Object message) { public void fatal(Object message) {
error(message); error(message);
} }
@Override
public void fatal(Object message, Throwable exception) { public void fatal(Object message, Throwable exception) {
error(message, exception); error(message, exception);
} }
@Override
public void error(Object message) { public void error(Object message) {
log(java.util.logging.Level.SEVERE, message, null); log(java.util.logging.Level.SEVERE, message, null);
} }
@Override
public void error(Object message, Throwable exception) { public void error(Object message, Throwable exception) {
log(java.util.logging.Level.SEVERE, message, exception); log(java.util.logging.Level.SEVERE, message, exception);
} }
@Override
public void warn(Object message) { public void warn(Object message) {
log(java.util.logging.Level.WARNING, message, null); log(java.util.logging.Level.WARNING, message, null);
} }
@Override
public void warn(Object message, Throwable exception) { public void warn(Object message, Throwable exception) {
log(java.util.logging.Level.WARNING, message, exception); log(java.util.logging.Level.WARNING, message, exception);
} }
@Override
public void info(Object message) { public void info(Object message) {
log(java.util.logging.Level.INFO, message, null); log(java.util.logging.Level.INFO, message, null);
} }
@Override
public void info(Object message, Throwable exception) { public void info(Object message, Throwable exception) {
log(java.util.logging.Level.INFO, message, exception); log(java.util.logging.Level.INFO, message, exception);
} }
@Override
public void debug(Object message) { public void debug(Object message) {
log(java.util.logging.Level.FINE, message, null); log(java.util.logging.Level.FINE, message, null);
} }
@Override
public void debug(Object message, Throwable exception) { public void debug(Object message, Throwable exception) {
log(java.util.logging.Level.FINE, message, exception); log(java.util.logging.Level.FINE, message, exception);
} }
@Override
public void trace(Object message) { public void trace(Object message) {
log(java.util.logging.Level.FINEST, message, null); log(java.util.logging.Level.FINEST, message, null);
} }
@Override
public void trace(Object message, Throwable exception) { public void trace(Object message, Throwable exception) {
log(java.util.logging.Level.FINEST, message, exception); log(java.util.logging.Level.FINEST, message, exception);
} }

Loading…
Cancel
Save