Skip to content

Commit 68b78c6

Browse files
johnmayegonw
authored andcommitted
Move over to Log4J2 configuration - allows us to remove some log4j-1.2 deps
1 parent 268e172 commit 68b78c6

File tree

5 files changed

+65
-49
lines changed

5 files changed

+65
-49
lines changed

misc/log4j/pom.xml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,6 @@
1414

1515
<name>cdk-log4j</name>
1616
<dependencies>
17-
<dependency>
18-
<groupId>org.apache.logging.log4j</groupId>
19-
<artifactId>log4j-1.2-api</artifactId>
20-
</dependency>
2117
<dependency>
2218
<groupId>org.apache.logging.log4j</groupId>
2319
<artifactId>log4j-core</artifactId>

misc/log4j/src/main/java/org/openscience/cdk/tools/LoggingTool.java

Lines changed: 51 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,22 @@
1919
*/
2020
package org.openscience.cdk.tools;
2121

22+
import org.apache.logging.log4j.Level;
23+
import org.apache.logging.log4j.LogManager;
24+
import org.apache.logging.log4j.Logger;
25+
import org.apache.logging.log4j.core.LoggerContext;
26+
import org.apache.logging.log4j.core.config.ConfigurationSource;
27+
import org.apache.logging.log4j.core.config.Configurator;
28+
import org.apache.logging.log4j.core.config.xml.XmlConfiguration;
29+
import org.apache.logging.log4j.internal.LogManagerStatus;
30+
2231
import java.io.BufferedReader;
32+
import java.io.InputStream;
2333
import java.io.PrintWriter;
2434
import java.io.StringReader;
25-
26-
import org.apache.log4j.Level;
27-
import org.apache.log4j.Logger;
35+
import java.net.URI;
36+
import java.util.HashMap;
37+
import java.util.Map;
2838

2939
/**
3040
* Useful for logging messages. Often used as a class static variable instantiated like:
@@ -88,7 +98,7 @@ public class LoggingTool implements ILoggingTool {
8898

8999
private boolean toSTDOUT = false;
90100

91-
private Logger log4jLogger;
101+
private Logger log4jLogger;
92102
private static ILoggingTool logger;
93103
private String classname;
94104

@@ -97,6 +107,19 @@ public class LoggingTool implements ILoggingTool {
97107
/** Default number of StackTraceElements to be printed by debug(Exception). */
98108
public final int DEFAULT_STACK_LENGTH = 5;
99109

110+
/** Log4J2 has customer levels and no longer has "TRACE_INT" etc so we can't know the values at compile
111+
* time and therefore it's not possible use a switch. */
112+
private static final Map<Level, Integer> LOG4J2_LEVEL_TO_CDK_LEVEL = new HashMap<>();
113+
114+
static {
115+
LOG4J2_LEVEL_TO_CDK_LEVEL.put(Level.TRACE, TRACE);
116+
LOG4J2_LEVEL_TO_CDK_LEVEL.put(Level.DEBUG, DEBUG);
117+
LOG4J2_LEVEL_TO_CDK_LEVEL.put(Level.INFO, INFO);
118+
LOG4J2_LEVEL_TO_CDK_LEVEL.put(Level.WARN, WARN);
119+
LOG4J2_LEVEL_TO_CDK_LEVEL.put(Level.ERROR, ERROR);
120+
LOG4J2_LEVEL_TO_CDK_LEVEL.put(Level.FATAL, FATAL);
121+
}
122+
100123
/**
101124
* Constructs a LoggingTool which produces log lines without any special
102125
* indication which class the message originates from.
@@ -126,7 +149,7 @@ public LoggingTool(Class<?> classInst) {
126149
stackLength = DEFAULT_STACK_LENGTH;
127150
this.classname = classInst.getName();
128151
try {
129-
log4jLogger = Logger.getLogger(classname);
152+
log4jLogger = LogManager.getLogger(classname);
130153
} catch (NoClassDefFoundError e) {
131154
toSTDOUT = true;
132155
logger.debug("Log4J class not found!");
@@ -149,9 +172,9 @@ public LoggingTool(Class<?> classInst) {
149172
// by default debugging is set off, but it can be turned on
150173
// with starting java like "java -Dcdk.debugging=true"
151174
if (System.getProperty("cdk.debugging", "false").equals("true")) {
152-
log4jLogger.setLevel(Level.DEBUG);
175+
Configurator.setLevel(log4jLogger.getName(), Level.DEBUG);
153176
} else {
154-
log4jLogger.setLevel(Level.WARN);
177+
Configurator.setLevel(log4jLogger.getName(), Level.WARN);
155178
}
156179
if (System.getProperty("cdk.debug.stdout", "false").equals("true")) {
157180
toSTDOUT = true;
@@ -170,13 +193,20 @@ public LoggingTool(Class<?> classInst) {
170193
*/
171194
public static void configureLog4j() {
172195
LoggingTool localLogger = new LoggingTool(LoggingTool.class);
173-
try { // NOPMD
174-
org.apache.log4j.PropertyConfigurator.configure(LoggingTool.class
175-
.getResource("/org/openscience/cdk/config/data/log4j.properties"));
196+
try {
197+
try (InputStream resourceAsStream = LoggingTool.class.getResourceAsStream("cdk-log4j2.xml")) {
198+
if (resourceAsStream != null) {
199+
XmlConfiguration config = new XmlConfiguration(
200+
LoggerContext.getContext(true),
201+
new ConfigurationSource(resourceAsStream));
202+
Configurator.reconfigure(config);
203+
}
204+
}
176205
} catch (NullPointerException e) { // NOPMD
177206
localLogger.error("Properties file not found: ", e.getMessage());
178207
localLogger.debug(e);
179208
} catch (Exception e) {
209+
e.printStackTrace();
180210
localLogger.error("Unknown error occurred: ", e.getMessage());
181211
localLogger.debug(e);
182212
}
@@ -467,22 +497,22 @@ public static ILoggingTool create(Class<?> sourceClass) {
467497
public void setLevel(int level) {
468498
switch (level) {
469499
case TRACE:
470-
log4jLogger.setLevel(Level.TRACE);
500+
Configurator.setLevel(log4jLogger.getName(), Level.TRACE);
471501
break;
472502
case DEBUG:
473-
log4jLogger.setLevel(Level.DEBUG);
503+
Configurator.setLevel(log4jLogger.getName(), Level.DEBUG);
474504
break;
475505
case INFO:
476-
log4jLogger.setLevel(Level.INFO);
506+
Configurator.setLevel(log4jLogger.getName(), Level.INFO);
477507
break;
478508
case WARN:
479-
log4jLogger.setLevel(Level.WARN);
509+
Configurator.setLevel(log4jLogger.getName(), Level.WARN);
480510
break;
481511
case ERROR:
482-
log4jLogger.setLevel(Level.ERROR);
512+
Configurator.setLevel(log4jLogger.getName(), Level.ERROR);
483513
break;
484514
case FATAL:
485-
log4jLogger.setLevel(Level.FATAL);
515+
Configurator.setLevel(log4jLogger.getName(), Level.FATAL);
486516
break;
487517
default:
488518
throw new IllegalArgumentException("Invalid log level: " + level);
@@ -496,22 +526,10 @@ public void setLevel(int level) {
496526
public int getLevel() {
497527
Level level = log4jLogger.getLevel();
498528
if (level == null)
499-
level = Logger.getRootLogger().getLevel();
500-
switch (level.toInt()) {
501-
case Level.TRACE_INT:
502-
return TRACE;
503-
case Level.DEBUG_INT:
504-
return DEBUG;
505-
case Level.INFO_INT:
506-
return INFO;
507-
case Level.WARN_INT:
508-
return WARN;
509-
case Level.ERROR_INT:
510-
return ERROR;
511-
case Level.FATAL_INT:
512-
return FATAL;
513-
default:
514-
throw new IllegalArgumentException("Unsupported log4j level: " + level);
515-
}
529+
level = LogManager.getRootLogger().getLevel();
530+
Integer res = LOG4J2_LEVEL_TO_CDK_LEVEL.get(level);
531+
if (res == null)
532+
throw new IllegalArgumentException("Unsupported log4j level: " + level);
533+
return res;
516534
}
517535
}

misc/log4j/src/main/resources/org/openscience/cdk/config/data/log4j.properties

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<Configuration status="ERROR">
2+
<Appenders>
3+
<Console name="Console" target="SYSTEM_ERR">
4+
<PatternLayout pattern="ChemistryDevelopmentKit %d [%t] %-5p %c - %m%n"/>
5+
</Console>
6+
</Appenders>
7+
<Loggers>
8+
<Root level="ERROR">
9+
<AppenderRef ref="Console"/>
10+
</Root>
11+
</Loggers>
12+
</Configuration>

misc/log4j/src/test/java/org/openscience/cdk/tools/LoggingToolTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
*/
2020
package org.openscience.cdk.tools;
2121

22-
import org.apache.log4j.BasicConfigurator;
22+
import org.apache.logging.log4j.core.config.Configurator;
2323
import org.junit.Assert;
2424
import org.junit.BeforeClass;
2525
import org.junit.Test;
@@ -31,7 +31,7 @@ public class LoggingToolTest extends AbstractLoggingToolTest {
3131

3232
@BeforeClass
3333
public static void ensureLog4JConfigured() {
34-
BasicConfigurator.configure();
34+
Configurator.reconfigure();
3535
}
3636

3737
@Override

0 commit comments

Comments
 (0)