Skip to content

Commit

Permalink
Merge pull request #1215 from Zimbra/bugfix/ZCS-11112
Browse files Browse the repository at this point in the history
ZCS-11112 : Log4j version change to 2.17.1
  • Loading branch information
abhishekdeshmukh2209 authored May 18, 2022
2 parents 36756e5 + 3840063 commit 817d91e
Show file tree
Hide file tree
Showing 33 changed files with 789 additions and 534 deletions.
4 changes: 3 additions & 1 deletion build-ivysettings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
<property name="httpclient.httpcore.version" value="4.4.11"/>
<property name="httpclient.async.version" value="4.1.4"/>
<property name="jetty.version" value="9.4.18.v20190429"/>
<property name="dom4j.version" value="2.1.1"/>
<property name="dom4j.version" value="2.1.1"/>
<property name="log4j.core.version" value="2.17.1" />
<property name="log4j.api.version" value="2.17.1" />
<property name="com.google.guava.version" value="28.1-jre"/>
<settings defaultResolver="chain-resolver" />
<caches defaultCacheDir="${dev.home}/.ivy2/cache"/>
Expand Down
3 changes: 2 additions & 1 deletion client/ivy.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
<dependency org="javax.mail" name="mail" rev="1.4.5" />
<dependency org="jaxen" name="jaxen" rev="1.1-beta-10"/>
<dependency org="org.dom4j" name="dom4j" rev="${dom4j.version}" />
<dependency org="log4j" name="log4j" rev="1.2.16" />
<dependency org="org.apache.logging.log4j" name="log4j-core" rev="${log4j.core.version}" />
<dependency org="org.apache.logging.log4j" name="log4j-api" rev="${log4j.api.version}" />
<dependency org="com.google.guava" name="guava" rev="${com.google.guava.version}" />
<dependency org="org.json" name="json" rev="20090211" />
<dependency org="javax.servlet" name="javax.servlet-api" rev="3.1.0" />
Expand Down
3 changes: 2 additions & 1 deletion common/ivy.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
<dependency org="org.dom4j" name="dom4j" rev="${dom4j.version}" />
<dependency org="ical4j" name="ical4j" rev="0.9.16-patched" />
<dependency org="junit" name="junit" rev="4.8.2" />
<dependency org="log4j" name="log4j" rev="1.2.16" />
<dependency org="org.apache.logging.log4j" name="log4j-core" rev="${log4j.core.version}" />
<dependency org="org.apache.logging.log4j" name="log4j-api" rev="${log4j.api.version}" />
<dependency org="javax.mail" name="mail" rev="1.4.5" />
<dependency org="net.sourceforge.nekohtml" name="nekohtml" rev="1.9.13.1z" />
<dependency org="javax.servlet" name="javax.servlet-api" rev="3.1.0" />
Expand Down
56 changes: 29 additions & 27 deletions common/src/java/com/zimbra/common/util/Log.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import org.apache.log4j.Logger;
import org.apache.logging.log4j.core.config.Configurator;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import com.google.common.collect.ImmutableMap;

Expand All @@ -36,23 +38,23 @@ public class Log {

private final Map<String, Logger> mAccountLoggers = new ConcurrentHashMap<String, Logger>();

private static final Map<Level, org.apache.log4j.Level> ZIMBRA_TO_LOG4J =
new EnumMap<Level, org.apache.log4j.Level>(Level.class);
private static final Map<Level, org.apache.logging.log4j.Level> ZIMBRA_TO_LOG4J =
new EnumMap<Level, org.apache.logging.log4j.Level>(Level.class);
static {
ZIMBRA_TO_LOG4J.put(Level.error, org.apache.log4j.Level.ERROR);
ZIMBRA_TO_LOG4J.put(Level.warn, org.apache.log4j.Level.WARN);
ZIMBRA_TO_LOG4J.put(Level.info, org.apache.log4j.Level.INFO);
ZIMBRA_TO_LOG4J.put(Level.debug, org.apache.log4j.Level.DEBUG);
ZIMBRA_TO_LOG4J.put(Level.trace, org.apache.log4j.Level.TRACE);
}
private static final Map<org.apache.log4j.Level, Level> LOG4J_TO_ZIMBRA =
new ImmutableMap.Builder<org.apache.log4j.Level, Level>()
.put(org.apache.log4j.Level.FATAL, Level.error)
.put(org.apache.log4j.Level.ERROR, Level.error)
.put(org.apache.log4j.Level.WARN, Level.warn)
.put(org.apache.log4j.Level.INFO, Level.info)
.put(org.apache.log4j.Level.DEBUG, Level.debug)
.put(org.apache.log4j.Level.TRACE, Level.trace)
ZIMBRA_TO_LOG4J.put(Level.error, org.apache.logging.log4j.Level.ERROR);
ZIMBRA_TO_LOG4J.put(Level.warn, org.apache.logging.log4j.Level.WARN);
ZIMBRA_TO_LOG4J.put(Level.info, org.apache.logging.log4j.Level.INFO);
ZIMBRA_TO_LOG4J.put(Level.debug, org.apache.logging.log4j.Level.DEBUG);
ZIMBRA_TO_LOG4J.put(Level.trace, org.apache.logging.log4j.Level.TRACE);
}
private static final Map<org.apache.logging.log4j.Level, Level> LOG4J_TO_ZIMBRA =
new ImmutableMap.Builder<org.apache.logging.log4j.Level, Level>()
.put(org.apache.logging.log4j.Level.FATAL, Level.error)
.put(org.apache.logging.log4j.Level.ERROR, Level.error)
.put(org.apache.logging.log4j.Level.WARN, Level.warn)
.put(org.apache.logging.log4j.Level.INFO, Level.info)
.put(org.apache.logging.log4j.Level.DEBUG, Level.debug)
.put(org.apache.logging.log4j.Level.TRACE, Level.trace)
.build();

public enum Level {
Expand Down Expand Up @@ -85,10 +87,10 @@ public void addAccountLogger(String accountName, Level level) {
Logger accountLogger = mAccountLoggers.get(accountName);
if (accountLogger == null) {
String accountCategory = getAccountCategory(getCategory(), accountName);
accountLogger = Logger.getLogger(accountCategory);
accountLogger = LogManager.getLogger(accountCategory);
mAccountLoggers.put(accountName, accountLogger);
}
accountLogger.setLevel(ZIMBRA_TO_LOG4J.get(level));
Configurator.setLevel(accountLogger.getName(), ZIMBRA_TO_LOG4J.get(level));
}

/**
Expand Down Expand Up @@ -134,15 +136,15 @@ public boolean isInfoEnabled() {
}

public boolean isWarnEnabled() {
return getLogger().isEnabledFor(org.apache.log4j.Level.WARN);
return getLogger().isEnabled(org.apache.logging.log4j.Level.WARN);
}

public boolean isErrorEnabled() {
return getLogger().isEnabledFor(org.apache.log4j.Level.ERROR);
return getLogger().isEnabled(org.apache.logging.log4j.Level.ERROR);
}

public boolean isFatalEnabled() {
return getLogger().isEnabledFor(org.apache.log4j.Level.FATAL);
return getLogger().isEnabled(org.apache.logging.log4j.Level.FATAL);
}

public void trace(Object o) {
Expand Down Expand Up @@ -443,16 +445,16 @@ public void errorQuietly(String format, Object o, Throwable t) {
/**
* Returns Log4j equivalent of {@code level} or org.apache.log4j.Level.TRACE
*/
private static final org.apache.log4j.Level log4jLevel(Level level) {
org.apache.log4j.Level log4jlevel = ZIMBRA_TO_LOG4J.get(level);
private static final org.apache.logging.log4j.Level log4jLevel(Level level) {
org.apache.logging.log4j.Level log4jlevel = ZIMBRA_TO_LOG4J.get(level);
if (log4jlevel == null) {
log4jlevel = org.apache.log4j.Level.TRACE;
log4jlevel = org.apache.logging.log4j.Level.TRACE;
}
return log4jlevel;
}

public boolean isEnabledFor(Level level) {
return getLogger().isEnabledFor(log4jLevel(level));
return getLogger().isEnabled(log4jLevel(level));
}

public void fatal(Object o) {
Expand Down Expand Up @@ -545,7 +547,7 @@ public void log(Level level, String format, Object o1, Object o2, Object o3, Obj


public void setLevel(Level level) {
mLogger.setLevel(ZIMBRA_TO_LOG4J.get(level));
Configurator.setLevel(mLogger.getName(), ZIMBRA_TO_LOG4J.get(level));
}

public Level getLevel() {
Expand Down
15 changes: 7 additions & 8 deletions common/src/java/com/zimbra/common/util/LogFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,8 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.config.Configurator;

import com.zimbra.common.localconfig.LC;

Expand All @@ -41,7 +40,7 @@ private LogFactory() {
}

public synchronized static void init() {
PropertyConfigurator.configure(LC.zimbra_log4j_properties.value());
Configurator.initialize(null, LC.zimbra_log4j_properties.value());
}

public synchronized static void reset() {
Expand All @@ -51,8 +50,8 @@ public synchronized static void reset() {
for (Log log : getAllLoggers()) {
log.removeAccountLoggers();
}
LogManager.resetConfiguration();
PropertyConfigurator.configure(LC.zimbra_log4j_properties.value());
LogManager.shutdown(true);
Configurator.initialize(null, LC.zimbra_log4j_properties.value());
}

public static Log getLog(Class<?> clazz) {
Expand All @@ -65,7 +64,7 @@ public static Log getLog(Class<?> clazz) {
public static Log getLog(String name) {
Log log = NAME2LOG.get(name);
if (log == null) {
log = new Log(Logger.getLogger(name));
log = new Log(LogManager.getLogger(name));
Log prev = NAME2LOG.putIfAbsent(name, log);
if (prev != null) {
log = prev;
Expand All @@ -78,7 +77,7 @@ public static Log getLog(String name) {
* Returns <tt>true</tt> if a logger with the given name exists.
*/
public static boolean logExists(String name) {
return (LogManager.exists(name) != null);
return (LogManager.exists(name));
}

/**
Expand Down
118 changes: 90 additions & 28 deletions common/src/java/com/zimbra/common/util/ZimbraLog.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,23 @@
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.TreeMap;

import org.apache.log4j.PropertyConfigurator;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.appender.ConsoleAppender;
import org.apache.logging.log4j.core.config.Configurator;
import org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder;
import org.apache.logging.log4j.core.config.builder.api.ComponentBuilder;
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder;
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory;
import org.apache.logging.log4j.core.config.builder.api.LayoutComponentBuilder;
import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration;

import com.zimbra.common.localconfig.LC;


/**
* Log categories.
Expand Down Expand Up @@ -485,6 +497,25 @@ public final class ZimbraLog {
*/
public static final Map<String, String> CATEGORY_DESCRIPTIONS;

public static final String LOG_CONFIG_NAME = "RollingBuilder";
public static final String DEFAULT_APPENDER_NAME = "Stdout";
public static final String DEFAULT_APPENDER_TYPE = "CONSOLE";
public static final String DEFAULT_APPENDER_TARGET = "target";
public static final String APPENDER_NAME = "rolling";
public static final String APPENDER_TYPE = "RollingFile";
public static final String LAYOUT_TYPE = "PatternLayout";
public static final String LAYOUT_PATTERN = "pattern";
public static final String LAYOUT_PATTERN_VALUE_WITH_THREADS = "%d [%t] %-5level: %msg%n%throwable";
public static final String LAYOUT_PATTERN_VALUE = "%d [%t] %-5level: %msg%n";
public static final String POLICY_TYPE = "Policies";
public static final String POLICY_TIME_TYPE = "TimeBasedTriggeringPolicy";
public static final String POLICY_TIME_TYPE_INTERVAL = "interval";
public static final String POLICY_TIME_TYPE_INTERVAL_VALUE = "1";
public static final String APPENDER_FILE_NAME = "fileName";
public static final String APPENDER_FILE_PATTERN = "filePattern";
public static final String LOGGER_NAME = "TestLogger";
public static final String LOGGER_ADDITIVITY = "additivity";

private ZimbraLog() {
}

Expand Down Expand Up @@ -850,44 +881,72 @@ public static void toolSetupLog4j(String defaultLevel, String logFile, boolean s
if (level == null) {
level = defaultLevel;
}
Properties p = new Properties();
p.put("log4j.rootLogger", level + ",A1");
if (logFile != null) {
p.put("log4j.appender.A1", "org.apache.log4j.FileAppender");
p.put("log4j.appender.A1.File", logFile);
p.put("log4j.appender.A1.Append", "false");
} else {
p.put("log4j.appender.A1", "org.apache.log4j.ConsoleAppender");
}
p.put("log4j.appender.A1.layout", "org.apache.log4j.PatternLayout");
ConfigurationBuilder< BuiltConfiguration > builder = ConfigurationBuilderFactory.newConfigurationBuilder();
builder.setStatusLevel(Level.INFO);
builder.setConfigurationName(LOG_CONFIG_NAME);
// create a console appender
AppenderComponentBuilder appenderBuilder = builder.newAppender(DEFAULT_APPENDER_NAME, DEFAULT_APPENDER_TYPE)
.addAttribute(DEFAULT_APPENDER_TARGET, ConsoleAppender.Target.SYSTEM_OUT);
LayoutComponentBuilder layoutBuilder = builder.newLayout(LAYOUT_TYPE);
if (showThreads) {
p.put("log4j.appender.A1.layout.ConversionPattern", "[%t] [%x] %p: %m%n");
layoutBuilder.addAttribute(LAYOUT_PATTERN, LAYOUT_PATTERN_VALUE_WITH_THREADS);
} else {
p.put("log4j.appender.A1.layout.ConversionPattern", "[%x] %p: %m%n");
layoutBuilder.addAttribute(LAYOUT_PATTERN, LAYOUT_PATTERN_VALUE);
}
builder.add(appenderBuilder.add(layoutBuilder));

if (null != logFile) {
// create a rolling file appender
ComponentBuilder policy = builder.newComponent(POLICY_TYPE)
.addComponent(builder.newComponent(POLICY_TIME_TYPE).addAttribute(POLICY_TIME_TYPE_INTERVAL, POLICY_TIME_TYPE_INTERVAL_VALUE));
appenderBuilder = builder.newAppender(APPENDER_NAME, APPENDER_TYPE)
.addAttribute(APPENDER_FILE_NAME, logFile)
.addAttribute(APPENDER_FILE_PATTERN, logFile.substring(0, logFile.lastIndexOf(".log")) + "-%d{yyyy-MM-dd}")
.add(layoutBuilder)
.addComponent(policy);
builder.add(appenderBuilder);

// create the new logger
builder.add(builder.newLogger(LOGGER_NAME, level)
.add(builder.newAppenderRef(APPENDER_NAME))
.addAttribute(LOGGER_ADDITIVITY, false));
}
PropertyConfigurator.configure(p);
builder.add(builder.newRootLogger(level)
.add(builder.newAppenderRef(DEFAULT_APPENDER_NAME)));
Configurator.initialize(builder.build());
}

public static void toolSetupLog4jConsole(String defaultLevel, boolean stderr, boolean showThreads) {
String level = System.getProperty("zimbra.log4j.level");
if (level == null) {
level = defaultLevel;
}
Properties p = new Properties();
p.put("log4j.rootLogger", level + ",A1");

p.put("log4j.appender.A1", "org.apache.log4j.ConsoleAppender");
if (stderr)
p.put("log4j.appender.A1.target", "System.err");

p.put("log4j.appender.A1.layout", "org.apache.log4j.PatternLayout");
ConfigurationBuilder< BuiltConfiguration > builder = ConfigurationBuilderFactory.newConfigurationBuilder();
builder.setStatusLevel(Level.INFO);
builder.setConfigurationName(LOG_CONFIG_NAME);

// create a console appender
AppenderComponentBuilder appenderBuilder = builder.newAppender(DEFAULT_APPENDER_NAME, DEFAULT_APPENDER_TYPE);
if (stderr) {
appenderBuilder.addAttribute(DEFAULT_APPENDER_TARGET, ConsoleAppender.Target.SYSTEM_ERR);
} else {
appenderBuilder.addAttribute(DEFAULT_APPENDER_TARGET, ConsoleAppender.Target.SYSTEM_OUT);
}
LayoutComponentBuilder layoutBuilder = builder.newLayout(LAYOUT_TYPE);
if (showThreads) {
p.put("log4j.appender.A1.layout.ConversionPattern", "[%t] [%x] %p: %m%n");
layoutBuilder.addAttribute(LAYOUT_PATTERN, LAYOUT_PATTERN_VALUE_WITH_THREADS);
} else {
p.put("log4j.appender.A1.layout.ConversionPattern", "[%x] %p: %m%n");
layoutBuilder.addAttribute(LAYOUT_PATTERN, LAYOUT_PATTERN_VALUE);
}
PropertyConfigurator.configure(p);
}
builder.add(appenderBuilder.add(layoutBuilder));
// create the new logger
builder.add(builder.newLogger(LOGGER_NAME, level)
.add(builder.newAppenderRef(DEFAULT_APPENDER_NAME))
.addAttribute(LOGGER_ADDITIVITY, false));

builder.add(builder.newRootLogger(level)
.add(builder.newAppenderRef(DEFAULT_APPENDER_NAME)));
Configurator.reconfigure(builder.build()); }

/**
* Setup log4j for command line tool using specified log4j.properties file. If file doesn't exist
Expand All @@ -899,7 +958,10 @@ public static void toolSetupLog4jConsole(String defaultLevel, boolean stderr, bo
*/
public static void toolSetupLog4j(String defaultLevel, String propsFile) {
if (propsFile != null && new File(propsFile).exists()) {
PropertyConfigurator.configure(propsFile);
LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
File file = new File(LC.zimbra_log4j_properties.value());
// this will force a reconfiguration
context.setConfigLocation(file.toURI());
} else {
toolSetupLog4j(defaultLevel, null, false);
}
Expand Down
Loading

0 comments on commit 817d91e

Please sign in to comment.