diff --git a/build-ivysettings.xml b/build-ivysettings.xml index 0cb55298013..d58d40b23aa 100644 --- a/build-ivysettings.xml +++ b/build-ivysettings.xml @@ -4,7 +4,9 @@ - + + + diff --git a/client/ivy.xml b/client/ivy.xml index d2f700f7318..95ccfbf8f2c 100644 --- a/client/ivy.xml +++ b/client/ivy.xml @@ -9,7 +9,8 @@ - + + diff --git a/common/ivy.xml b/common/ivy.xml index 7f0b5aa7325..961a59ba4cb 100644 --- a/common/ivy.xml +++ b/common/ivy.xml @@ -16,7 +16,8 @@ - + + diff --git a/common/src/java/com/zimbra/common/util/Log.java b/common/src/java/com/zimbra/common/util/Log.java index 7d12a22a302..e184369a669 100644 --- a/common/src/java/com/zimbra/common/util/Log.java +++ b/common/src/java/com/zimbra/common/util/Log.java @@ -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; @@ -36,23 +38,23 @@ public class Log { private final Map mAccountLoggers = new ConcurrentHashMap(); - private static final Map ZIMBRA_TO_LOG4J = - new EnumMap(Level.class); + private static final Map ZIMBRA_TO_LOG4J = + new EnumMap(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 LOG4J_TO_ZIMBRA = - new ImmutableMap.Builder() - .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 LOG4J_TO_ZIMBRA = + new ImmutableMap.Builder() + .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 { @@ -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)); } /** @@ -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) { @@ -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) { @@ -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() { diff --git a/common/src/java/com/zimbra/common/util/LogFactory.java b/common/src/java/com/zimbra/common/util/LogFactory.java index 821d7a7de9c..ad7ff4a1743 100644 --- a/common/src/java/com/zimbra/common/util/LogFactory.java +++ b/common/src/java/com/zimbra/common/util/LogFactory.java @@ -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; @@ -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() { @@ -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) { @@ -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; @@ -78,7 +77,7 @@ public static Log getLog(String name) { * Returns true if a logger with the given name exists. */ public static boolean logExists(String name) { - return (LogManager.exists(name) != null); + return (LogManager.exists(name)); } /** diff --git a/common/src/java/com/zimbra/common/util/ZimbraLog.java b/common/src/java/com/zimbra/common/util/ZimbraLog.java index 389be8c95ea..803bdd12182 100644 --- a/common/src/java/com/zimbra/common/util/ZimbraLog.java +++ b/common/src/java/com/zimbra/common/util/ZimbraLog.java @@ -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. @@ -485,6 +497,25 @@ public final class ZimbraLog { */ public static final Map 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() { } @@ -850,22 +881,39 @@ 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) { @@ -873,21 +921,32 @@ public static void toolSetupLog4jConsole(String defaultLevel, boolean stderr, bo 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 @@ -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); } diff --git a/common/src/java/com/zimbra/common/util/ZimbraPatternLayout.java b/common/src/java/com/zimbra/common/util/ZimbraPatternLayout.java index 833f6b2fdfd..a2a149169da 100644 --- a/common/src/java/com/zimbra/common/util/ZimbraPatternLayout.java +++ b/common/src/java/com/zimbra/common/util/ZimbraPatternLayout.java @@ -1,59 +1,26 @@ -/* - * ***** BEGIN LICENSE BLOCK ***** - * Zimbra Collaboration Suite Server - * Copyright (C) 2007, 2009, 2010, 2013, 2014, 2016 Synacor, Inc. - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software Foundation, - * version 2 of the License. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * You should have received a copy of the GNU General Public License along with this program. - * If not, see . - * ***** END LICENSE BLOCK ***** - */ package com.zimbra.common.util; -import org.apache.log4j.Category; -import org.apache.log4j.ConsoleAppender; -import org.apache.log4j.Layout; -import org.apache.log4j.PatternLayout; -import org.apache.log4j.helpers.PatternParser; +import org.apache.logging.log4j.core.LogEvent; +import org.apache.logging.log4j.core.config.plugins.Plugin; +import org.apache.logging.log4j.core.pattern.ConverterKeys; +import org.apache.logging.log4j.core.pattern.LogEventPatternConverter; -/** - * Subclasses Log4J's PatternLayout class to add additional support for - * the %z option, which prints the value returned by {@link ZimbraLog#getContextString()}. - * - * @author bburtin - */ -public class ZimbraPatternLayout extends PatternLayout { +@Plugin(name = "ZimbraPatternLayout", category = "Converter") +@ConverterKeys({ "z" }) +public class ZimbraPatternLayout extends LogEventPatternConverter { - public ZimbraPatternLayout() { - this(DEFAULT_CONVERSION_PATTERN); + protected ZimbraPatternLayout(String name, String style) { + super(name, style); } - - public ZimbraPatternLayout(String pattern) { - super(pattern); + + public static ZimbraPatternLayout newInstance(String[] options) + { + return new ZimbraPatternLayout("z", Thread.currentThread().getName()); } - public PatternParser createPatternParser(String pattern) { - if (pattern == null) { - pattern = DEFAULT_CONVERSION_PATTERN; - } - return new ZimbraPatternParser(pattern, this); + @Override + public void format(LogEvent event, StringBuilder toAppendTo) { + toAppendTo.append(ZimbraLog.getContextString() == null ? "" : ZimbraLog.getContextString()); } - - public static void main(String[] args) { - Layout layout = new ZimbraPatternLayout("[%z] - %m%n"); - Category cat = Category.getInstance("some.cat"); - cat.addAppender(new ConsoleAppender(layout, ConsoleAppender.SYSTEM_OUT)); - ZimbraLog.addAccountNameToContext("my@account.com"); - ZimbraLog.addMboxToContext(99); - cat.debug("Hello, log"); - cat.info("Hello again..."); - ZimbraLog.clearContext(); - cat.info("No more context"); - } -} + +} \ No newline at end of file diff --git a/common/src/java/com/zimbra/common/util/ZimbraPatternParser.java b/common/src/java/com/zimbra/common/util/ZimbraPatternParser.java deleted file mode 100644 index 0436de0edc4..00000000000 --- a/common/src/java/com/zimbra/common/util/ZimbraPatternParser.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * ***** BEGIN LICENSE BLOCK ***** - * Zimbra Collaboration Suite Server - * Copyright (C) 2007, 2009, 2010, 2013, 2014, 2016 Synacor, Inc. - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software Foundation, - * version 2 of the License. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * You should have received a copy of the GNU General Public License along with this program. - * If not, see . - * ***** END LICENSE BLOCK ***** - */ -package com.zimbra.common.util; - -import org.apache.log4j.helpers.FormattingInfo; -import org.apache.log4j.helpers.PatternConverter; -import org.apache.log4j.helpers.PatternParser; -import org.apache.log4j.spi.LoggingEvent; - -/** - * Formats the %z pattern as all the keys and values passed - * to {@link ZimbraLog#addToContext}. - * - * @author bburtin - */ -public class ZimbraPatternParser -extends PatternParser { - - ZimbraPatternLayout mLayout; - - ZimbraPatternParser(String pattern, ZimbraPatternLayout layout) { - super(pattern); - mLayout = layout; - } - - public void finalizeConverter(char c) { - if (c == 'z') { - addConverter(new ZimbraPatternConverter(formattingInfo)); - currentLiteral.setLength(0); - } else { - super.finalizeConverter(c); - } - } - - private class ZimbraPatternConverter extends PatternConverter { - ZimbraPatternConverter(FormattingInfo formattingInfo) { - super(formattingInfo); - } - - public String convert(LoggingEvent event) { - return ZimbraLog.getContextString(); - } - } -} diff --git a/milter-conf/conf/milter.log4j.properties b/milter-conf/conf/milter.log4j.properties index d24db8990c5..c06ac349fd9 100644 --- a/milter-conf/conf/milter.log4j.properties +++ b/milter-conf/conf/milter.log4j.properties @@ -1,20 +1,34 @@ -# An example log4j configuration file that outputs to System.out. The -# output information consists of relative time, log level, thread -# name, logger name, nested diagnostic context and the message in that -# order. +status = error +dest = err +name = PropertiesConfig +packages = com.zimbra -# For the general syntax of property based configuration files see the -# documenation of org.apache.log4j.PropertyConfigurator. +# Appender MILTER writes to the file "/opt/zimbra/log/mailbox.log". +# Daily rolling policy with compressing the old log file while rotating!! +# The archived log files location can be changed using FileNamePattern value -log4j.threshhold=OFF -log4j.rootLogger=INFO,MILTER -log4j.appender.MILTER=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.MILTER.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.MILTER.RollingPolicy.FileNamePattern=/opt/zimbra/log/milter.log.%d{yyyy-MM-dd} -log4j.appender.MILTER.File=/opt/zimbra/log/milter.log -log4j.appender.MILTER.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.MILTER.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n -log4j.additivity.zimbra.milter=false -log4j.logger.zimbra.milter=INFO,MILTER -log4j.additivity.zimbra.security=false -log4j.logger.zimbra.security=INFO,MILTER +# Reference https://logging.apache.org/log4j/2.0/manual/configuration.html#ConfigurationSyntax + +appender.MILTER.type = RollingFile +appender.MILTER.name = milterFile +appender.MILTER.fileName = /opt/zimbra/log/milter.log +appender.MILTER.filePattern = /opt/zimbra/log/milter.log.%d{yyyy-MM-dd} +appender.MILTER.layout.type = PatternLayout +appender.MILTER.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.MILTER.policies.type = Policies +appender.MILTER.policies.time.type = TimeBasedTriggeringPolicy +appender.MILTER.policies.time.interval = 2 +appender.MILTER.policies.time.modulate = true +appender.MILTER.strategy.type = DefaultRolloverStrategy + +logger.milter.name = zimbra.milter +logger.milter.level = info,MILTER +logger.milter.additivity = false +logger.milter.appenderRef.MILTER.ref = milterFile + +logger.security.name = zimbra.security +logger.security.level = info,MILTER +logger.security.additivity = false + +rootLogger=info,MILTER +rootLogger.appenderRef.MILTER.ref = milterFile diff --git a/soap/ivy-soapdoclet.xml b/soap/ivy-soapdoclet.xml index f6fc9964497..c52f131c946 100644 --- a/soap/ivy-soapdoclet.xml +++ b/soap/ivy-soapdoclet.xml @@ -4,7 +4,8 @@ xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"> - + + diff --git a/soap/ivy-tools.xml b/soap/ivy-tools.xml index 7d27c0f5560..4cd36003ceb 100644 --- a/soap/ivy-tools.xml +++ b/soap/ivy-tools.xml @@ -6,7 +6,8 @@ - + + diff --git a/soap/ivy.xml b/soap/ivy.xml index 494261d91eb..949f367a357 100644 --- a/soap/ivy.xml +++ b/soap/ivy.xml @@ -17,7 +17,8 @@ - + + diff --git a/soap/src/java/com/zimbra/soap/util/Jaxb2Xsds.java b/soap/src/java/com/zimbra/soap/util/Jaxb2Xsds.java index 277fb0e7a7f..13d01d3eee5 100644 --- a/soap/src/java/com/zimbra/soap/util/Jaxb2Xsds.java +++ b/soap/src/java/com/zimbra/soap/util/Jaxb2Xsds.java @@ -27,9 +27,9 @@ import javax.xml.transform.Result; import javax.xml.transform.stream.StreamResult; -import org.apache.log4j.BasicConfigurator; -import org.apache.log4j.Level; -import org.apache.log4j.Logger; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.core.config.Configurator; import com.google.common.base.Strings; import com.google.common.collect.Lists; @@ -39,16 +39,14 @@ /** */ public class Jaxb2Xsds { - private static final Logger LOG = Logger.getLogger(Jaxb2Xsds.class); private static final String ARG_DIR = "--dir"; private static String dir = null; static { - BasicConfigurator.configure(); - Logger.getRootLogger().setLevel(Level.INFO); - LOG.setLevel(Level.INFO); + Configurator.setLevel(LogManager.getRootLogger().getName(), Level.INFO); + Configurator.setLevel(LogManager.getLogger(Jaxb2Xsds.class).getName(), Level.INFO); } /** * Main @@ -57,10 +55,11 @@ public static void main(String[] args) throws Exception { readArguments(args); createXsds(); } - + /** * Reads the command line arguments. */ + private static void readArguments(String[] args) { int argPos = 0; diff --git a/soap/src/java/com/zimbra/soap/util/XsdCleaner.java b/soap/src/java/com/zimbra/soap/util/XsdCleaner.java index 85b8dcd8205..7eef6d69dce 100644 --- a/soap/src/java/com/zimbra/soap/util/XsdCleaner.java +++ b/soap/src/java/com/zimbra/soap/util/XsdCleaner.java @@ -37,9 +37,10 @@ import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; -import org.apache.log4j.BasicConfigurator; -import org.apache.log4j.Level; -import org.apache.log4j.Logger; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.config.Configurator; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; @@ -52,13 +53,14 @@ import com.zimbra.common.util.ZimbraLog; + /** * This class adjusts the .xsd files automatically generated from JAXB classes to work better for WSDL. * For instance, the adjustments include a workaround for a wsdl.exe code generation issue
* See http://connect.microsoft.com/VisualStudio/feedback/details/471297 */ public class XsdCleaner { - private static final Logger LOG = Logger.getLogger(XsdCleaner.class); + private static final Logger LOG = LogManager.getLogger(XsdCleaner.class); private static final String ARG_DIR = "--dir"; private static final String KEEP_BACKUPS = "--keep.backups"; @@ -67,9 +69,8 @@ public class XsdCleaner { private static boolean keepBackups = false; static { - BasicConfigurator.configure(); - Logger.getRootLogger().setLevel(Level.INFO); - LOG.setLevel(Level.INFO); + Configurator.setLevel(LogManager.getRootLogger().getName(), Level.INFO); + Configurator.setLevel(LogManager.getLogger(XsdCleaner.class).getName(), Level.INFO); } /** * Main diff --git a/store-conf/conf/imapd.log4j.properties b/store-conf/conf/imapd.log4j.properties index bb587aaf3b2..bfa935e0e6c 100755 --- a/store-conf/conf/imapd.log4j.properties +++ b/store-conf/conf/imapd.log4j.properties @@ -4,7 +4,12 @@ # order. # For the general syntax of property based configuration files see the -# documenation of org.apache.log4j.PropertyConfigurator. +# Reference https://logging.apache.org/log4j/2.0/manual/configuration.html#ConfigurationSyntax + +status = error +dest = err +name = PropertiesConfig +packages = com.zimbra log4j.threshhold=OFF @@ -14,40 +19,64 @@ log4j.rootLogger=INFO,LOGFILE # Appender LOGFILE writes to the file "/opt/zimbra/log/imapd.log". # Daily rolling policy with compressing the old log file while rotating!! # The archived log files location can be changed using FileNamePattern value -log4j.appender.LOGFILE=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.LOGFILE.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.LOGFILE.RollingPolicy.FileNamePattern=/opt/zimbra/log/imapd.log.%d{yyyy-MM-dd} -log4j.appender.LOGFILE.File=/opt/zimbra/log/imapd.log -log4j.appender.LOGFILE.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.LOGFILE.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n - +appender.LOGFILE.type = RollingFile +appender.LOGFILE.name = imapdFile +appender.LOGFILE.fileName = /opt/zimbra/log/imapd.log +appender.LOGFILE.filePattern = /opt/zimbra/log/imapd.log.%d{yyyy-MM-dd} +appender.LOGFILE.layout.type = PatternLayout +appender.LOGFILE.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.LOGFILE.policies.type = Policies +appender.LOGFILE.policies.time.type = TimeBasedTriggeringPolicy +appender.LOGFILE.policies.time.interval = 2 +appender.LOGFILE.policies.time.modulate = true +appender.LOGFILE.strategy.type = DefaultRolloverStrategy + # Appender AUDIT writes to the file "imapd-audit.log". -log4j.appender.AUDIT=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.AUDIT.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.AUDIT.RollingPolicy.FileNamePattern=/opt/zimbra/log/imapd-audit.log.%d{yyyy-MM-dd} -log4j.appender.AUDIT.File=/opt/zimbra/log/imapd-audit.log -log4j.appender.AUDIT.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.AUDIT.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n - -# Save zimbra.security to AUDIT appender -log4j.additivity.zimbra.security=false -log4j.logger.zimbra.security=INFO,AUDIT +appender.AUDIT.type = RollingFile +appender.AUDIT.name = auditFile +appender.AUDIT.fileName = /opt/zimbra/log/imapd-audit.log +appender.AUDIT.filePattern = /opt/zimbra/log/imapd-audit.log.%d{yyyy-MM-dd} +appender.AUDIT.layout.type = PatternLayout +appender.AUDIT.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.AUDIT.policies.type = Policies +appender.AUDIT.policies.time.type = TimeBasedTriggeringPolicy +appender.AUDIT.policies.time.interval = 2 +appender.AUDIT.policies.time.modulate = true +appender.AUDIT.strategy.type = DefaultRolloverStrategy # Syslog appender -log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender -log4j.appender.SYSLOG.SyslogHost=localhost -log4j.appender.SYSLOG.Facility=LOCAL0 -log4j.appender.SYSLOG.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.SYSLOG.layout.ConversionPattern=imap: %-5p [%t] [%z] %c{1} - %m +appender.SYSLOG.type = Syslog +appender.SYSLOG.name = syslogAppender +appender.SYSLOG.host = localhost +appender.SYSLOG.facility = LOCAL0 +appender.SYSLOG.layout.type = PatternLayout +appender.SYSLOG.layout.pattern = imap: %-5p [%t] [%z] %c{1} - %m + +logger.zimbra.name = zimbra.imap +logger.zimbra.level = info +logger.zimbra.additivity = false +logger.zimbra.appenderRef.LOGFILE.ref = imapdFile +logger.imap-client.name = zimbra.imap-client +logger.imap-client.level = info +logger.imap-client.additivity = false + +# Save zimbra.security to AUDIT appender +logger.security.name = zimbra.security +logger.security.level = debug, AUDIT +logger.security.additivity = false +logger.security.appenderRef.AUDIT.ref = auditFile + +logger.syslog.name = com.zimbra +logger.syslog.level = debug +logger.syslog.additivity = false +logger.syslog.appenderRef.SYSLOG.ref = syslogAppender # HttpMethodBase spews out too many WARN on the badly formatted cookies. -log4j.logger.org.apache.commons.httpclient.HttpMethodBase=ERROR +#log4j.logger.org.apache.commons.httpclient.HttpMethodBase=ERROR # spymemcached is too verbose at INFO level. -log4j.logger.net.spy.memcached=WARN - -log4j.logger.zimbra=INFO -log4j.logger.zimbra.op=WARN -log4j.logger.com.zimbra=INFO +#log4j.logger.net.spy.memcached=WARN +rootLogger.level=info +rootLogger.appenderRef.LOGFILE.ref = imapdFile diff --git a/store-conf/conf/log4j.properties b/store-conf/conf/log4j.properties index 5e2ac0ae84b..ef70352eeb4 100644 --- a/store-conf/conf/log4j.properties +++ b/store-conf/conf/log4j.properties @@ -1,142 +1,240 @@ -# An example log4j configuration file that outputs to System.out. The -# output information consists of relative time, log level, thread -# name, logger name, nested diagnostic context and the message in that -# order. +status = error +dest = err +name = PropertiesConfig +packages = com.zimbra -# For the general syntax of property based configuration files see the -# documenation of org.apache.log4j.PropertyConfigurator. - -log4j.threshhold=OFF - -log4j.rootLogger=INFO,CONSOLE,LOGFILE - -# CONSOLE is set to be a ConsoleAppender which outputs to System.out. -log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender -log4j.appender.CONSOLE.layout=com.zimbra.common.util.ZimbraPatternLayout - -# The conversion pattern uses format specifiers. You might want to -# change the pattern an watch the output format change. -log4j.appender.CONSOLE.layout.ConversionPattern=%-4r %-5p [%t] [%z] %c{1} - %m%n - -# Appender LOGFILE writes to the file "mailbox.log". +# Appender LOGFILE writes to the file "/opt/zimbra/log/mailbox.log". # Daily rolling policy with compressing the old log file while rotating!! # The archived log files location can be changed using FileNamePattern value -log4j.appender.LOGFILE=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.LOGFILE.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.LOGFILE.RollingPolicy.FileNamePattern=/opt/zimbra/log/mailbox.log.%d{yyyy-MM-dd} -log4j.appender.LOGFILE.File=/opt/zimbra/log/mailbox.log -log4j.appender.LOGFILE.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.LOGFILE.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n +# Reference https://logging.apache.org/log4j/2.0/manual/configuration.html#ConfigurationSyntax + +appender.A1.type = Console +appender.A1.name = STDOUT +appender.A1.layout.type = PatternLayout +appender.A1.layout.pattern = %m%n + +appender.LOGFILE.type = RollingFile +appender.LOGFILE.name = mailboxFile +appender.LOGFILE.fileName = /opt/zimbra/log/mailbox.log +appender.LOGFILE.filePattern = /opt/zimbra/log/mailbox.log.%d{yyyy-MM-dd} +appender.LOGFILE.layout.type = PatternLayout +appender.LOGFILE.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.LOGFILE.policies.type = Policies +appender.LOGFILE.policies.time.type = TimeBasedTriggeringPolicy +appender.LOGFILE.policies.time.interval = 2 +appender.LOGFILE.policies.time.modulate = true +appender.LOGFILE.strategy.type = DefaultRolloverStrategy + # Appender AUDIT writes to the file "audit.log". -log4j.appender.AUDIT=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.AUDIT.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.AUDIT.RollingPolicy.FileNamePattern=/opt/zimbra/log/audit.log.%d{yyyy-MM-dd} -log4j.appender.AUDIT.File=/opt/zimbra/log/audit.log -log4j.appender.AUDIT.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.AUDIT.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n +appender.AUDIT.type = RollingFile +appender.AUDIT.name = auditFile +appender.AUDIT.fileName = /opt/zimbra/log/audit.log +appender.AUDIT.filePattern = /opt/zimbra/log/audit.log.%d{yyyy-MM-dd} +appender.AUDIT.layout.type = PatternLayout +appender.AUDIT.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.AUDIT.policies.type = Policies +appender.AUDIT.policies.time.type = TimeBasedTriggeringPolicy +appender.AUDIT.policies.time.interval = 2 +appender.AUDIT.policies.time.modulate = true +appender.AUDIT.strategy.type = DefaultRolloverStrategy # Appender SYNC writes to the file "sync.log". -log4j.appender.SYNC=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.SYNC.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.SYNC.RollingPolicy.FileNamePattern=/opt/zimbra/log/sync.log.%d{yyyy-MM-dd} -log4j.appender.SYNC.File=/opt/zimbra/log/sync.log -log4j.appender.SYNC.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.SYNC.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n +appender.SYNC.type = RollingFile +appender.SYNC.name = syncFile +appender.SYNC.fileName = /opt/zimbra/log/sync.log +appender.SYNC.filePattern = /opt/zimbra/log/sync.log.%d{yyyy-MM-dd} +appender.SYNC.layout.type = PatternLayout +appender.SYNC.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.SYNC.policies.type = Policies +appender.SYNC.policies.time.type = TimeBasedTriggeringPolicy +appender.SYNC.policies.time.interval = 2 +appender.SYNC.policies.time.modulate = true +appender.SYNC.strategy.type = DefaultRolloverStrategy # Appender SYNCTRACE writes to the file "synctrace.log". -log4j.appender.SYNCTRACE=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.SYNCTRACE.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.SYNCTRACE.RollingPolicy.FileNamePattern=/opt/zimbra/log/synctrace.log.%d{yyyy-MM-dd} -log4j.appender.SYNCTRACE.File=/opt/zimbra/log/synctrace.log -log4j.appender.SYNCTRACE.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.SYNCTRACE.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n +appender.SYNCTRACE.type = RollingFile +appender.SYNCTRACE.name = syncTraceFile +appender.SYNCTRACE.fileName = /opt/zimbra/log/synctrace.log +appender.SYNCTRACE.filePattern = /opt/zimbra/log/synctrace.log.%d{yyyy-MM-dd} +appender.SYNCTRACE.layout.type = PatternLayout +appender.SYNCTRACE.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.SYNCTRACE.policies.type = Policies +appender.SYNCTRACE.policies.time.type = TimeBasedTriggeringPolicy +appender.SYNCTRACE.policies.time.interval = 2 +appender.SYNCTRACE.policies.time.modulate = true +appender.SYNCTRACE.strategy.type = DefaultRolloverStrategy # Appender SYNCSTATE writes to the file "syncstate.log". -log4j.appender.SYNCSTATE=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.SYNCSTATE.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.SYNCSTATE.RollingPolicy.FileNamePattern=/opt/zimbra/log/syncstate.log.%d{yyyy-MM-dd} -log4j.appender.SYNCSTATE.File=/opt/zimbra/log/syncstate.log -log4j.appender.SYNCSTATE.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.SYNCSTATE.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n +appender.SYNCSTATE.type = RollingFile +appender.SYNCSTATE.name = syncStateFile +appender.SYNCSTATE.fileName = /opt/zimbra/log/syncstate.log +appender.SYNCSTATE.filePattern = /opt/zimbra/log/syncstate.log.%d{yyyy-MM-dd} +appender.SYNCSTATE.layout.type = PatternLayout +appender.SYNCSTATE.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.SYNCSTATE.policies.type = Policies +appender.SYNCSTATE.policies.time.type = TimeBasedTriggeringPolicy +appender.SYNCSTATE.policies.time.interval = 2 +appender.SYNCSTATE.policies.time.modulate = true +appender.SYNCSTATE.strategy.type = DefaultRolloverStrategy # Appender WBXML writes to the file "wbxml.log". -log4j.appender.WBXML=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.WBXML.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.WBXML.RollingPolicy.FileNamePattern=/opt/zimbra/log/wbxml.log.%d{yyyy-MM-dd} -log4j.appender.WBXML.File=/opt/zimbra/log/wbxml.log -log4j.appender.WBXML.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.WBXML.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n +appender.WBXML.type = RollingFile +appender.WBXML.name = wbXmlFile +appender.WBXML.fileName = /opt/zimbra/log/wbxml.log +appender.WBXML.filePattern = /opt/zimbra/log/wbxml.log.%d{yyyy-MM-dd} +appender.WBXML.layout.type = PatternLayout +appender.WBXML.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.WBXML.policies.type = Policies +appender.WBXML.policies.time.type = TimeBasedTriggeringPolicy +appender.WBXML.policies.time.interval = 2 +appender.WBXML.policies.time.modulate = true +appender.WBXML.strategy.type = DefaultRolloverStrategy # Appender ACTIVITY writes to the file "activity.log". -log4j.appender.ACTIVITY=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.ACTIVITY.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.ACTIVITY.RollingPolicy.FileNamePattern=/opt/zimbra/log/activity.log.%d{yyyy-MM-dd} -log4j.appender.ACTIVITY.File=/opt/zimbra/log/activity.log -log4j.appender.ACTIVITY.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.ACTIVITY.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n +appender.ACTIVITY.type = RollingFile +appender.ACTIVITY.name = activityFile +appender.ACTIVITY.fileName = /opt/zimbra/log/activity.log +appender.ACTIVITY.filePattern = /opt/zimbra/log/activity.log.%d{yyyy-MM-dd} +appender.ACTIVITY.layout.type = PatternLayout +appender.ACTIVITY.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.ACTIVITY.policies.type = Policies +appender.ACTIVITY.policies.time.type = TimeBasedTriggeringPolicy +appender.ACTIVITY.policies.time.interval = 2 +appender.ACTIVITY.policies.time.modulate = true +appender.ACTIVITY.strategy.type = DefaultRolloverStrategy # Appender SEARCHSTAT writes to the file "searchstat.log". -log4j.appender.SEARCHSTAT=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.SEARCHSTAT.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.SEARCHSTAT.RollingPolicy.FileNamePattern=/opt/zimbra/log/searchstat.log.%d{yyyy-MM-dd} -log4j.appender.SEARCHSTAT.File=/opt/zimbra/log/searchstat.log -log4j.appender.SEARCHSTAT.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.SEARCHSTAT.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n +appender.SEARCHSTAT.type = RollingFile +appender.SEARCHSTAT.name = searchStatFile +appender.SEARCHSTAT.fileName = /opt/zimbra/log/searchstat.log +appender.SEARCHSTAT.filePattern = /opt/zimbra/log/searchstat.log.%d{yyyy-MM-dd} +appender.SEARCHSTAT.layout.type = PatternLayout +appender.SEARCHSTAT.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.SEARCHSTAT.policies.type = Policies +appender.SEARCHSTAT.policies.time.type = TimeBasedTriggeringPolicy +appender.SEARCHSTAT.policies.time.interval = 2 +appender.SEARCHSTAT.policies.time.modulate = true +appender.SEARCHSTAT.strategy.type = DefaultRolloverStrategy # Appender EWS writes to the file "ews.log". -log4j.appender.EWS=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.EWS.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.EWS.RollingPolicy.FileNamePattern=/opt/zimbra/log/ews.log.%d{yyyy-MM-dd} -log4j.appender.EWS.File=/opt/zimbra/log/ews.log -log4j.appender.EWS.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.EWS.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n +appender.EWS.type = RollingFile +appender.EWS.name = ewsFile +appender.EWS.fileName = /opt/zimbra/log/ews.log +appender.EWS.filePattern = /opt/zimbra/log/ews.log.%d{yyyy-MM-dd} +appender.EWS.layout.type = PatternLayout +appender.EWS.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.EWS.policies.type = Policies +appender.EWS.policies.time.type = TimeBasedTriggeringPolicy +appender.EWS.policies.time.interval = 2 +appender.EWS.policies.time.modulate = true +appender.EWS.strategy.type = DefaultRolloverStrategy + +# Syslog appender +appender.SYSLOG.type = Syslog +appender.SYSLOG.name = syslogAppender +appender.SYSLOG.host = localhost +appender.SYSLOG.facility = LOCAL0 +appender.SYSLOG.layout.type = PatternLayout +appender.SYSLOG.layout.pattern = mailboxd: %-5p [%t] [%z] %c{1} - %m + +# Logger service appender +appender.SLOGGER.type = Syslog +appender.SLOGGER.name = sloggerAppender +appender.SLOGGER.host = suchit.test.com +appender.SLOGGER.facility = LOCAL1 +appender.SLOGGER.layout.type = PatternLayout +appender.SLOGGER.layout.pattern = mailboxd: %-5p [%t] [%z] %c{1} - %m + +logger.zimbra.name = zimbra.mailbox +logger.zimbra.level = debug +logger.zimbra.additivity = false +logger.zimbra.appenderRef.LOGFILE.ref = mailboxFile # Save zimbra.security to AUDIT appender -log4j.additivity.zimbra.security=false -log4j.logger.zimbra.security=INFO,AUDIT +logger.security.name = zimbra.security +logger.security.level = debug, AUDIT +logger.security.additivity = false +logger.security.appenderRef.AUDIT.ref = auditFile + +logger.sync.name = zimbra.sync +logger.sync.level = info,SYNC +logger.sync.additivity = false +logger.sync.appenderRef.SYNC.ref = syncFile + +logger.synctrace.name = zimbra.synctrace +logger.synctrace.level = info,SYNCTRACE +logger.synctrace.additivity = false +logger.synctrace.appenderRef.SYNCTRACE.ref = syncTraceFile + +logger.syncstate.name = zimbra.syncstate +logger.syncstate.level = info,SYNCSTATE +logger.syncstate.additivity = false +logger.syncstate.appenderRef.SYNCSTATE.ref = syncStateFile + +logger.wbxml.name = zimbra.wbxml +logger.wbxml.level = info,WBXML +logger.wbxml.additivity = false +logger.wbxml.appenderRef.WBXML.ref = wbXmlFile + +logger.activity.name = zimbra.activity +logger.activity.level = info,ACTIVITY +logger.activity.additivity = false +logger.activity.appenderRef.ACTIVITY.ref = activityFile + +logger.searchstat.name = zimbra.searchstat +logger.searchstat.level = info,SEARCHSTAT +logger.searchstat.additivity = false +logger.searchstat.appenderRef.SEARCHSTAT.ref = searchStatFile + +logger.ews.name = zimbra.ews +logger.ews.level = info,EWS +logger.ews.additivity = false +logger.ews.appenderRef.EWS.ref = ewsFile + +logger.syslog.name = com.zimbra +logger.syslog.level = debug +logger.syslog.additivity = false +logger.syslog.appenderRef.SYSLOG.ref = syslogAppender # HttpMethodBase spews out too many WARN on the badly formatted cookies. -log4j.logger.org.apache.commons.httpclient.HttpMethodBase=ERROR +logger.org.apache.commons.httpclient.HttpMethodBase=ERROR # spymemcached is too verbose at INFO level. -log4j.logger.net.spy.memcached=WARN - -#log4j.logger.httpclient=DEBUG -#log4j.logger.org.apache.commons.httpclient=DEBUG -#log4j.logger.com.zimbra.common.util.ZimbraHttpConnectionManager=DEBUG - -#log4j.logger.zimbra.imap=DEBUG -log4j.logger.zimbra.test=DEBUG - -log4j.logger.com.zimbra=INFO -#log4j.logger.com.zimbra=DEBUG -log4j.logger.com.zimbra.soap.SoapEngine=DEBUG -#log4j.logger.com.zimbra.cs.store.BlobChunk=DEBUG -#log4j.logger.com.zimbra.cs.Archiver=DEBUG -#log4j.logger.com.zimbra.cs=DEBUG -#log4j.logger.com.zimbra.cs.index=DEBUG - -#log4j.logger.zimbra.sqltrace=DEBUG -log4j.logger.com.zimbra.cs.service.util.SpamHandler=DEBUG - -log4j.additivity.zimbra.sync=false -log4j.logger.zimbra.sync=INFO,SYNC -log4j.additivity.zimbra.synctrace=false -log4j.logger.zimbra.synctrace=TRACE,SYNCTRACE -log4j.additivity.zimbra.syncstate=false -log4j.logger.zimbra.syncstate=INFO,SYNCSTATE -log4j.additivity.zimbra.wbxml=false -log4j.logger.zimbra.wbxml=INFO,WBXML -log4j.additivity.zimbra.activity=false -log4j.logger.zimbra.activity=INFO,ACTIVITY -log4j.additivity.zimbra.ews=false -log4j.logger.zimbra.ews=INFO,EWS -log4j.logger.zimbra.doc=DEBUG -log4j.logger.zimbra.dav=DEBUG -log4j.logger.zimbra.offline=DEBUG -log4j.logger.zimbra.offline.request=INFO -log4j.logger.zimbra.offline.response=INFO -log4j.logger.zimbra.webclient=DEBUG -log4j.logger.zimbra.slogger=OFF -log4j.logger.zimbra.searchstat=INFO,SEARCHSTAT +logger.net.spy.memcached=WARN + +logger.slogger.name = zimbra.slogger +logger.slogger.level=INFO,SLOGGER +#logger.slogger.level=ERROR +logger.slogger.additivity = false +logger.slogger.appenderRef.SLOGGER.ref = sloggerAppender + +logger.soapengine.name = com.zimbra.soap.SoapEngine +logger.soapengine.level = debug + +logger.blobchunk.name = com.zimbra.cs.store.BlobChunk +logger.blobchunk.level = debug + +logger.zimbracs.name = com.zimbra.cs +logger.zimbracs.level = debug + +logger.zimbradoc.name = zimbra.doc +logger.zimbradoc.level = debug + +logger.zimbraoffline.name = zimbra.offline +logger.zimbraoffline.level = debug + +logger.offlinerequest.name = zimbra.offline.request +logger.offlinerequest.level = debug + +logger.offlineresponse.name = zimbra.offline.response +logger.offlineresponse.level = debug + +logger.webclinet.name = zimbra.webclient +logger.webclinet.level = debug + +logger.dav.name = zimbra.dav +logger.dav.level = debug + +rootLogger=INFO,CONSOLE,LOGFILE +rootLogger.appenderRef.LOGFILE.ref = mailboxFile diff --git a/store-conf/conf/log4j.properties.production b/store-conf/conf/log4j.properties.production index 390bd0e5438..767a4b324f4 100644 --- a/store-conf/conf/log4j.properties.production +++ b/store-conf/conf/log4j.properties.production @@ -1,131 +1,213 @@ -# An example log4j configuration file that outputs to System.out. The -# output information consists of relative time, log level, thread -# name, logger name, nested diagnostic context and the message in that -# order. - -# For the general syntax of property based configuration files see the -# documenation of org.apache.log4j.PropertyConfigurator. - -log4j.threshhold=OFF - -%%uncomment VAR:!zimbraLogToSyslog%%log4j.rootLogger=INFO,LOGFILE -%%uncomment VAR:zimbraLogToSyslog%%log4j.rootLogger=INFO,LOGFILE,SYSLOG +status = error +dest = err +name = PropertiesConfig +packages = com.zimbra # Appender LOGFILE writes to the file "/opt/zimbra/log/mailbox.log". # Daily rolling policy with compressing the old log file while rotating!! # The archived log files location can be changed using FileNamePattern value -log4j.appender.LOGFILE=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.LOGFILE.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.LOGFILE.RollingPolicy.FileNamePattern=/opt/zimbra/log/mailbox.log.%d{yyyy-MM-dd} -log4j.appender.LOGFILE.File=/opt/zimbra/log/mailbox.log -log4j.appender.LOGFILE.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.LOGFILE.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n +# Reference https://logging.apache.org/log4j/2.0/manual/configuration.html#ConfigurationSyntax + +appender.LOGFILE.type = RollingFile +appender.LOGFILE.name = mailboxFile +appender.LOGFILE.fileName = /opt/zimbra/log/mailbox.log +appender.LOGFILE.filePattern = /opt/zimbra/log/mailbox.log.%d{yyyy-MM-dd} +appender.LOGFILE.layout.type = PatternLayout +appender.LOGFILE.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.LOGFILE.policies.type = Policies +appender.LOGFILE.policies.time.type = TimeBasedTriggeringPolicy +appender.LOGFILE.policies.time.interval = 2 +appender.LOGFILE.policies.time.modulate = true +appender.LOGFILE.strategy.type = DefaultRolloverStrategy + # Appender AUDIT writes to the file "audit.log". -log4j.appender.AUDIT=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.AUDIT.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.AUDIT.RollingPolicy.FileNamePattern=/opt/zimbra/log/audit.log.%d{yyyy-MM-dd} -log4j.appender.AUDIT.File=/opt/zimbra/log/audit.log -log4j.appender.AUDIT.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.AUDIT.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n - -# Save zimbra.security to AUDIT appender -log4j.additivity.zimbra.security=false -log4j.logger.zimbra.security=INFO,AUDIT - -# Syslog appender -log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender -log4j.appender.SYSLOG.SyslogHost=localhost -log4j.appender.SYSLOG.Facility=LOCAL0 -log4j.appender.SYSLOG.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.SYSLOG.layout.ConversionPattern=mailboxd: %-5p [%t] [%z] %c{1} - %m - -# Logger service appender -%%comment VAR:!zimbraLogHostname%%log4j.appender.SLOGGER=org.apache.log4j.net.SyslogAppender -%%comment VAR:!zimbraLogHostname%%log4j.appender.SLOGGER.SyslogHost=%%zimbraLogHostname%% -%%comment VAR:!zimbraLogHostname%%log4j.appender.SLOGGER.Facility=LOCAL1 -%%comment VAR:!zimbraLogHostname%%log4j.appender.SLOGGER.layout=com.zimbra.common.util.ZimbraPatternLayout -%%comment VAR:!zimbraLogHostname%%log4j.appender.SLOGGER.layout.ConversionPattern=mailboxd: %-5p [%t] [%z] %c{1} - %m +appender.AUDIT.type = RollingFile +appender.AUDIT.name = auditFile +appender.AUDIT.fileName = /opt/zimbra/log/audit.log +appender.AUDIT.filePattern = /opt/zimbra/log/audit.log.%d{yyyy-MM-dd} +appender.AUDIT.layout.type = PatternLayout +appender.AUDIT.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.AUDIT.policies.type = Policies +appender.AUDIT.policies.time.type = TimeBasedTriggeringPolicy +appender.AUDIT.policies.time.interval = 2 +appender.AUDIT.policies.time.modulate = true +appender.AUDIT.strategy.type = DefaultRolloverStrategy # Appender SYNC writes to the file "sync.log". -log4j.appender.SYNC=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.SYNC.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.SYNC.RollingPolicy.FileNamePattern=/opt/zimbra/log/sync.log.%d{yyyy-MM-dd} -log4j.appender.SYNC.File=/opt/zimbra/log/sync.log -log4j.appender.SYNC.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.SYNC.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n +appender.SYNC.type = RollingFile +appender.SYNC.name = syncFile +appender.SYNC.fileName = /opt/zimbra/log/sync.log +appender.SYNC.filePattern = /opt/zimbra/log/sync.log.%d{yyyy-MM-dd} +appender.SYNC.layout.type = PatternLayout +appender.SYNC.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.SYNC.policies.type = Policies +appender.SYNC.policies.time.type = TimeBasedTriggeringPolicy +appender.SYNC.policies.time.interval = 2 +appender.SYNC.policies.time.modulate = true +appender.SYNC.strategy.type = DefaultRolloverStrategy # Appender SYNCTRACE writes to the file "synctrace.log". -log4j.appender.SYNCTRACE=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.SYNCTRACE.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.SYNCTRACE.RollingPolicy.FileNamePattern=/opt/zimbra/log/synctrace.log.%d{yyyy-MM-dd} -log4j.appender.SYNCTRACE.File=/opt/zimbra/log/synctrace.log -log4j.appender.SYNCTRACE.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.SYNCTRACE.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n +appender.SYNCTRACE.type = RollingFile +appender.SYNCTRACE.name = syncTraceFile +appender.SYNCTRACE.fileName = /opt/zimbra/log/synctrace.log +appender.SYNCTRACE.filePattern = /opt/zimbra/log/synctrace.log.%d{yyyy-MM-dd} +appender.SYNCTRACE.layout.type = PatternLayout +appender.SYNCTRACE.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.SYNCTRACE.policies.type = Policies +appender.SYNCTRACE.policies.time.type = TimeBasedTriggeringPolicy +appender.SYNCTRACE.policies.time.interval = 2 +appender.SYNCTRACE.policies.time.modulate = true +appender.SYNCTRACE.strategy.type = DefaultRolloverStrategy # Appender SYNCSTATE writes to the file "syncstate.log". -log4j.appender.SYNCSTATE=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.SYNCSTATE.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.SYNCSTATE.RollingPolicy.FileNamePattern=/opt/zimbra/log/syncstate.log.%d{yyyy-MM-dd} -log4j.appender.SYNCSTATE.File=/opt/zimbra/log/syncstate.log -log4j.appender.SYNCSTATE.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.SYNCSTATE.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n +appender.SYNCSTATE.type = RollingFile +appender.SYNCSTATE.name = syncStateFile +appender.SYNCSTATE.fileName = /opt/zimbra/log/syncstate.log +appender.SYNCSTATE.filePattern = /opt/zimbra/log/syncstate.log.%d{yyyy-MM-dd} +appender.SYNCSTATE.layout.type = PatternLayout +appender.SYNCSTATE.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.SYNCSTATE.policies.type = Policies +appender.SYNCSTATE.policies.time.type = TimeBasedTriggeringPolicy +appender.SYNCSTATE.policies.time.interval = 2 +appender.SYNCSTATE.policies.time.modulate = true +appender.SYNCSTATE.strategy.type = DefaultRolloverStrategy # Appender WBXML writes to the file "wbxml.log". -log4j.appender.WBXML=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.WBXML.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.WBXML.RollingPolicy.FileNamePattern=/opt/zimbra/log/wbxml.log.%d{yyyy-MM-dd} -log4j.appender.WBXML.File=/opt/zimbra/log/wbxml.log -log4j.appender.WBXML.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.WBXML.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n +appender.WBXML.type = RollingFile +appender.WBXML.name = wbXmlFile +appender.WBXML.fileName = /opt/zimbra/log/wbxml.log +appender.WBXML.filePattern = /opt/zimbra/log/wbxml.log.%d{yyyy-MM-dd} +appender.WBXML.layout.type = PatternLayout +appender.WBXML.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.WBXML.policies.type = Policies +appender.WBXML.policies.time.type = TimeBasedTriggeringPolicy +appender.WBXML.policies.time.interval = 2 +appender.WBXML.policies.time.modulate = true +appender.WBXML.strategy.type = DefaultRolloverStrategy # Appender ACTIVITY writes to the file "activity.log". -log4j.appender.ACTIVITY=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.ACTIVITY.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.ACTIVITY.RollingPolicy.FileNamePattern=/opt/zimbra/log/activity.log.%d{yyyy-MM-dd} -log4j.appender.ACTIVITY.File=/opt/zimbra/log/activity.log -log4j.appender.ACTIVITY.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.ACTIVITY.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n +appender.ACTIVITY.type = RollingFile +appender.ACTIVITY.name = activityFile +appender.ACTIVITY.fileName = /opt/zimbra/log/activity.log +appender.ACTIVITY.filePattern = /opt/zimbra/log/activity.log.%d{yyyy-MM-dd} +appender.ACTIVITY.layout.type = PatternLayout +appender.ACTIVITY.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.ACTIVITY.policies.type = Policies +appender.ACTIVITY.policies.time.type = TimeBasedTriggeringPolicy +appender.ACTIVITY.policies.time.interval = 2 +appender.ACTIVITY.policies.time.modulate = true +appender.ACTIVITY.strategy.type = DefaultRolloverStrategy # Appender SEARCHSTAT writes to the file "searchstat.log". -log4j.appender.SEARCHSTAT=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.SEARCHSTAT.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.SEARCHSTAT.RollingPolicy.FileNamePattern=/opt/zimbra/log/searchstat.log.%d{yyyy-MM-dd} -log4j.appender.SEARCHSTAT.File=/opt/zimbra/log/searchstat.log -log4j.appender.SEARCHSTAT.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.SEARCHSTAT.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n +appender.SEARCHSTAT.type = RollingFile +appender.SEARCHSTAT.name = searchStatFile +appender.SEARCHSTAT.fileName = /opt/zimbra/log/searchstat.log +appender.SEARCHSTAT.filePattern = /opt/zimbra/log/searchstat.log.%d{yyyy-MM-dd} +appender.SEARCHSTAT.layout.type = PatternLayout +appender.SEARCHSTAT.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.SEARCHSTAT.policies.type = Policies +appender.SEARCHSTAT.policies.time.type = TimeBasedTriggeringPolicy +appender.SEARCHSTAT.policies.time.interval = 2 +appender.SEARCHSTAT.policies.time.modulate = true +appender.SEARCHSTAT.strategy.type = DefaultRolloverStrategy # Appender EWS writes to the file "ews.log". -log4j.appender.EWS=org.apache.log4j.rolling.RollingFileAppender -log4j.appender.EWS.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy -log4j.appender.EWS.RollingPolicy.FileNamePattern=/opt/zimbra/log/ews.log.%d{yyyy-MM-dd} -log4j.appender.EWS.File=/opt/zimbra/log/ews.log -log4j.appender.EWS.layout=com.zimbra.common.util.ZimbraPatternLayout -log4j.appender.EWS.layout.ConversionPattern=%d %-5p [%t] [%z] %c{1} - %m%n +appender.EWS.type = RollingFile +appender.EWS.name = ewsFile +appender.EWS.fileName = /opt/zimbra/log/ews.log +appender.EWS.filePattern = /opt/zimbra/log/ews.log.%d{yyyy-MM-dd} +appender.EWS.layout.type = PatternLayout +appender.EWS.layout.pattern = %d %-5p [%t] [%z] %c{1} - %m%n +appender.EWS.policies.type = Policies +appender.EWS.policies.time.type = TimeBasedTriggeringPolicy +appender.EWS.policies.time.interval = 2 +appender.EWS.policies.time.modulate = true +appender.EWS.strategy.type = DefaultRolloverStrategy + +# Syslog appender +appender.SYSLOG.type = Syslog +appender.SYSLOG.name = syslogAppender +appender.SYSLOG.host = localhost +appender.SYSLOG.facility = LOCAL0 +appender.SYSLOG.layout.type = PatternLayout +appender.SYSLOG.layout.pattern = mailboxd: %-5p [%t] [%z] %c{1} - %m + +# Logger service appender +%%comment VAR:!zimbraLogHostname%%appender.SLOGGER.type = Syslog +%%comment VAR:!zimbraLogHostname%%appender.SLOGGER.name = sloggerAppender +%%comment VAR:!zimbraLogHostname%%appender.SLOGGER.host = %%zimbraLogHostname%% +%%comment VAR:!zimbraLogHostname%%appender.SLOGGER.facility = LOCAL1 +%%comment VAR:!zimbraLogHostname%%appender.SLOGGER.layout.type = PatternLayout +%%comment VAR:!zimbraLogHostname%%appender.SLOGGER.layout.pattern = mailboxd: %-5p [%t] [%z] %c{1} - %m + +logger.zimbra.name = zimbra.mailbox +logger.zimbra.level = info +logger.zimbra.additivity = false +logger.zimbra.appenderRef.LOGFILE.ref = mailboxFile + +# Save zimbra.security to AUDIT appender +logger.security.name = zimbra.security +logger.security.level = debug, AUDIT +logger.security.additivity = false +logger.security.appenderRef.AUDIT.ref = auditFile + +logger.sync.name = zimbra.sync +logger.sync.level = info,SYNC +logger.sync.additivity = false +logger.sync.appenderRef.SYNC.ref = syncFile + +logger.synctrace.name = zimbra.synctrace +logger.synctrace.level = info,SYNCTRACE +logger.synctrace.additivity = false +logger.synctrace.appenderRef.SYNCTRACE.ref = syncTraceFile + +logger.syncstate.name = zimbra.syncstate +logger.syncstate.level = info,SYNCSTATE +logger.syncstate.additivity = false +logger.syncstate.appenderRef.SYNCSTATE.ref = syncStateFile + +logger.wbxml.name = zimbra.wbxml +logger.wbxml.level = info,WBXML +logger.wbxml.additivity = false +logger.wbxml.appenderRef.WBXML.ref = wbXmlFile + +logger.activity.name = zimbra.activity +logger.activity.level = info,ACTIVITY +logger.activity.additivity = false +logger.activity.appenderRef.ACTIVITY.ref = activityFile + +logger.searchstat.name = zimbra.searchstat +logger.searchstat.level = info,SEARCHSTAT +logger.searchstat.additivity = false +logger.searchstat.appenderRef.SEARCHSTAT.ref = searchStatFile + +logger.ews.name = zimbra.ews +logger.ews.level = info,EWS +logger.ews.additivity = false +logger.ews.appenderRef.EWS.ref = ewsFile + +logger.syslog.name = com.zimbra +logger.syslog.level = debug +logger.syslog.additivity = false +logger.syslog.appenderRef.SYSLOG.ref = syslogAppender # HttpMethodBase spews out too many WARN on the badly formatted cookies. -log4j.logger.org.apache.commons.httpclient.HttpMethodBase=ERROR +#logger.org.apache.commons.httpclient.HttpMethodBase=ERROR +logger.httpmethodbase.name = org.apache.commons.httpclient.HttpMethodBase +logger.httpmethodbase.level = ERROR # spymemcached is too verbose at INFO level. -log4j.logger.net.spy.memcached=WARN - -log4j.additivity.zimbra.sync=false -log4j.logger.zimbra.sync=INFO,SYNC -log4j.additivity.zimbra.synctrace=false -log4j.logger.zimbra.synctrace=INFO,SYNCTRACE -log4j.additivity.zimbra.syncstate=false -log4j.logger.zimbra.syncstate=INFO,SYNCSTATE -log4j.additivity.zimbra.wbxml=false -log4j.logger.zimbra.wbxml=INFO,WBXML -log4j.additivity.zimbra.activity=false -log4j.logger.zimbra.activity=INFO,ACTIVITY -log4j.logger.zimbra.searchstat=INFO,SEARCHSTAT -log4j.additivity.zimbra.ews=false -log4j.logger.zimbra.ews=INFO,EWS - -log4j.logger.zimbra=INFO -log4j.logger.zimbra.op=WARN -log4j.logger.com.zimbra=INFO -log4j.additivity.zimbra.slogger=FALSE -%%comment VAR:!zimbraLogHostname%%log4j.logger.zimbra.slogger=INFO,SLOGGER -%%uncomment VAR:!zimbraLogHostname%%log4j.logger.zimbra.slogger=ERROR +#logger.net.spy.memcached=WARN +logger.memcached.name = net.spy.memcached +logger.memcached.level = WARN + +%%comment VAR:!zimbraLogHostname%%logger.slogger.name = zimbra.slogger +%%comment VAR:!zimbraLogHostname%%logger.slogger.level=INFO,SLOGGER +%%uncomment VAR:!zimbraLogHostname%%logger.slogger.level=ERROR +%%comment VAR:!zimbraLogHostname%%logger.slogger.additivity = false +%%comment VAR:!zimbraLogHostname%%logger.slogger.appenderRef.SLOGGER.ref = sloggerAppender + +rootLogger.level=INFO + +rootLogger.appenderRef.LOGFILE.ref = mailboxFile diff --git a/store/build.xml b/store/build.xml index f9a10532ab6..fdf84d64cd5 100644 --- a/store/build.xml +++ b/store/build.xml @@ -270,14 +270,14 @@ - - + + - + diff --git a/store/ivy.xml b/store/ivy.xml index 4faa011fe43..9292dd7136b 100644 --- a/store/ivy.xml +++ b/store/ivy.xml @@ -15,13 +15,14 @@ - - + + - + + @@ -70,7 +71,7 @@ - + diff --git a/store/src/java/com/zimbra/cs/ephemeral/EphemeralStore.java b/store/src/java/com/zimbra/cs/ephemeral/EphemeralStore.java index f575ee7c9cc..80bd17e4fab 100644 --- a/store/src/java/com/zimbra/cs/ephemeral/EphemeralStore.java +++ b/store/src/java/com/zimbra/cs/ephemeral/EphemeralStore.java @@ -370,7 +370,7 @@ private static void usage() { public static class EphemeralStoreMatcher implements ExtensionUtil.ExtensionMatcher { private final String storeId; public EphemeralStoreMatcher(String storeId) { - this.storeId = storeId; + this.storeId = storeId; } @Override public boolean matches(ZimbraExtension ext) { diff --git a/store/src/java/com/zimbra/cs/imap/ImapDaemon.java b/store/src/java/com/zimbra/cs/imap/ImapDaemon.java index a13fd3d11ab..c8cd260d714 100644 --- a/store/src/java/com/zimbra/cs/imap/ImapDaemon.java +++ b/store/src/java/com/zimbra/cs/imap/ImapDaemon.java @@ -23,7 +23,8 @@ import java.util.Properties; import com.zimbra.cs.extension.ExtensionUtil; -import org.apache.log4j.PropertyConfigurator; +import org.apache.logging.log4j.core.config.ConfigurationSource; +import org.apache.logging.log4j.core.config.Configurator; import com.zimbra.common.calendar.WellKnownTimeZones; import com.zimbra.common.localconfig.LC; @@ -94,11 +95,12 @@ private void stopServers() { public static void main(String[] args) { try { - Properties props = new Properties(); - try (FileInputStream fisLog4j = new FileInputStream(IMAPD_LOG4J_CONFIG)) { - props.load(fisLog4j); - } - PropertyConfigurator.configure(props); + try { + ConfigurationSource logConfigSource = new ConfigurationSource(new FileInputStream(IMAPD_LOG4J_CONFIG)); + Configurator.initialize(null, logConfigSource); + } catch (IOException e) { + ZimbraLog.misc.info("Error initializing the loggers.", e); + } String imapdClassStore=LC.imapd_class_store.value(); try { StoreManager.getInstance(imapdClassStore).startup(); @@ -106,7 +108,7 @@ public static void main(String[] args) { throw ServiceException.FAILURE(String.format("Unable to initialize StoreManager: %s", imapdClassStore), e); } - if(isZimbraImapEnabled()) { + if(isZimbraImapEnabled()) { ZimbraPerf.prepare(ZimbraPerf.ServerID.IMAP_DAEMON); MemoryStats.startup(); ZimbraPerf.initialize(ZimbraPerf.ServerID.IMAP_DAEMON); diff --git a/store/src/java/com/zimbra/cs/index/IndexEditor.java b/store/src/java/com/zimbra/cs/index/IndexEditor.java index 4609b8c07c9..a61c5400bd6 100644 --- a/store/src/java/com/zimbra/cs/index/IndexEditor.java +++ b/store/src/java/com/zimbra/cs/index/IndexEditor.java @@ -23,6 +23,7 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; +import java.io.OutputStreamWriter; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; @@ -33,11 +34,16 @@ import java.util.List; import java.util.Set; -import org.apache.log4j.Layout; -import org.apache.log4j.Level; -import org.apache.log4j.Logger; -import org.apache.log4j.PatternLayout; -import org.apache.log4j.WriterAppender; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.Layout; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.appender.WriterAppender; +import org.apache.logging.log4j.core.config.Configuration; +import org.apache.logging.log4j.core.config.Configurator; +import org.apache.logging.log4j.core.config.LoggerConfig; +import org.apache.logging.log4j.core.layout.PatternLayout; import org.apache.lucene.document.DateTools; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; @@ -437,22 +443,27 @@ protected boolean authenticate() throws IOException { public boolean enableLogging() { if (mAppender == null) { - Layout layout = new PatternLayout(logLayoutPattern ); - mAppender = new WriterAppender(layout, mOutputStream); - Logger root = Logger.getRootLogger(); + Layout layout = PatternLayout.newBuilder().withPattern(logLayoutPattern).build(); + mAppender = WriterAppender.newBuilder().setTarget(new OutputStreamWriter(mOutputStream)) + .setLayout(layout).build(); - root.addAppender(mAppender); + Logger root = LogManager.getRootLogger(); + LoggerContext context = LoggerContext.getContext(false); + Configuration configuration = context.getConfiguration(); + LoggerConfig loggerConfig = configuration.getLoggerConfig(root.getName()); + + loggerConfig.addAppender(mAppender, Level.INFO, null); return true; } else { - return false; + return false; } } public boolean disableLogging() { if (mAppender != null) { - Logger root = Logger.getRootLogger(); - root.removeAppender(mAppender); - mAppender = null; + final LoggerContext context = LoggerContext.getContext(false); + final Configuration config = context.getConfiguration(); + config.getRootLogger().removeAppender(mAppender.getName()); return true; } return false; @@ -678,7 +689,7 @@ public void logLevel() outputStream.print("Caught exception: "+e.toString()); } - Logger root = Logger.getRootLogger(); + Logger root = LoggerContext.getContext().getRootLogger(); if (logLevel != null && !logLevel.equals("")) { @@ -705,7 +716,7 @@ public void logLevel() return; } - root.setLevel(newLevel); + Configurator.setLevel(root.getName(), newLevel); } Level cur = root.getLevel(); outputStream.println("Current level is: "+cur); diff --git a/store/src/java/com/zimbra/cs/mailclient/MailClient.java b/store/src/java/com/zimbra/cs/mailclient/MailClient.java index 4df01bef02c..39e64dd2b30 100644 --- a/store/src/java/com/zimbra/cs/mailclient/MailClient.java +++ b/store/src/java/com/zimbra/cs/mailclient/MailClient.java @@ -29,6 +29,12 @@ import com.zimbra.cs.mailclient.pop3.Pop3Connection; import javax.security.sasl.Sasl; + +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.config.Configurator; + import javax.security.auth.login.LoginException; import java.io.Console; @@ -41,25 +47,23 @@ import java.util.Map; import java.util.HashMap; -import org.apache.log4j.BasicConfigurator; -import org.apache.log4j.Logger; -import org.apache.log4j.Level; - public abstract class MailClient { private final MailConfig config; protected MailConnection connection; private final StringBuilder sbuf = new StringBuilder(132); private String password; private boolean eof; + + private static final Logger LOG = LogManager.getLogger(MailClient.class); protected MailClient(MailConfig config) { this.config = config; } public void run(String[] args) throws LoginException, IOException { - BasicConfigurator.configure(); - Logger.getRootLogger().setLevel(Level.INFO); - config.getLogger().setLevel(Log.Level.trace); + Configurator.reconfigure(); + Configurator.setRootLevel(Level.INFO); + Configurator.setLevel(LOG.getName(), Level.INFO); parseArguments(args, config); connect(); authenticate(); diff --git a/store/src/java/com/zimbra/cs/redolog/util/PlaybackUtil.java b/store/src/java/com/zimbra/cs/redolog/util/PlaybackUtil.java index e3640b10e2b..ade67f5fe8e 100644 --- a/store/src/java/com/zimbra/cs/redolog/util/PlaybackUtil.java +++ b/store/src/java/com/zimbra/cs/redolog/util/PlaybackUtil.java @@ -37,9 +37,13 @@ import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; -import org.apache.log4j.Appender; -import org.apache.log4j.ConsoleAppender; -import org.apache.log4j.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.core.Appender; +import org.apache.logging.log4j.core.Logger; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.appender.ConsoleAppender; +import org.apache.logging.log4j.core.config.Configuration; +import org.apache.logging.log4j.core.config.LoggerConfig; import com.zimbra.common.localconfig.LC; import com.zimbra.common.service.ServiceException; @@ -378,17 +382,21 @@ private static void setup() throws ServiceException { // set up log4j ZimbraLog.toolSetupLog4j("INFO", LC.zimbra_log4j_properties.value()); // remove the console appender if any - Logger rootLogger = Logger.getRootLogger(); + org.apache.logging.log4j.Logger rootLogger = LogManager.getRootLogger(); Appender consoleAppender = null; - Enumeration appenders = rootLogger.getAllAppenders(); - while (appenders.hasMoreElements()) { - Appender appender = (Appender) appenders.nextElement(); + LoggerContext context = LoggerContext.getContext(false); + Configuration configuration = context.getConfiguration(); + LoggerConfig loggerConfig = configuration.getLoggerConfig(rootLogger.getName()); + Map appenders = loggerConfig.getAppenders(); + + while (appenders.values().iterator().hasNext()) { + Appender appender = appenders.values().iterator().next(); if (appender instanceof ConsoleAppender) { consoleAppender = appender; } } if (consoleAppender != null) - rootLogger.removeAppender(consoleAppender); + loggerConfig.removeAppender(consoleAppender.getName()); DbPool.startup(); Zimbra.startupCLI(); diff --git a/store/src/java/com/zimbra/cs/service/admin/AddAccountLogger.java b/store/src/java/com/zimbra/cs/service/admin/AddAccountLogger.java index 0cf1da20e67..71171f7ac5a 100644 --- a/store/src/java/com/zimbra/cs/service/admin/AddAccountLogger.java +++ b/store/src/java/com/zimbra/cs/service/admin/AddAccountLogger.java @@ -23,6 +23,9 @@ import java.util.List; import java.util.Map; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.core.LoggerContext; + import com.zimbra.common.account.Key.AccountBy; import com.zimbra.common.localconfig.LC; import com.zimbra.common.service.ServiceException; @@ -83,7 +86,7 @@ public Element handle(Element request, Map context) throw ServiceException.INVALID_REQUEST(error, null); } - if (!category.equalsIgnoreCase(CATEGORY_ALL) && !LogFactory.logExists(category)) { + if (!category.equalsIgnoreCase(CATEGORY_ALL) && !((LoggerContext) LogManager.getContext(false)).hasLogger(category)) { throw ServiceException.INVALID_REQUEST("Log category " + category + " does not exist.", null); } diff --git a/store/src/java/com/zimbra/cs/service/admin/RemoveAccountLogger.java b/store/src/java/com/zimbra/cs/service/admin/RemoveAccountLogger.java index 6574ec73d9c..f880f280ecc 100644 --- a/store/src/java/com/zimbra/cs/service/admin/RemoveAccountLogger.java +++ b/store/src/java/com/zimbra/cs/service/admin/RemoveAccountLogger.java @@ -19,6 +19,9 @@ import java.util.List; import java.util.Map; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.core.LoggerContext; + import com.zimbra.common.service.ServiceException; import com.zimbra.common.soap.AdminConstants; import com.zimbra.common.soap.Element; @@ -63,7 +66,7 @@ public Element handle(Element request, Map context) category = eLogger.getAttribute(AdminConstants.A_CATEGORY); if (category.equalsIgnoreCase(AddAccountLogger.CATEGORY_ALL)) { category = null; - } else if (!LogFactory.logExists(category)) { + } else if (!((LoggerContext) LogManager.getContext(false)).hasLogger(category)) { throw ServiceException.INVALID_REQUEST("Log category " + category + " does not exist.", null); } } diff --git a/store/src/java/com/zimbra/cs/util/yauth/AuthTest.java b/store/src/java/com/zimbra/cs/util/yauth/AuthTest.java index 77097660680..5bed9b09622 100644 --- a/store/src/java/com/zimbra/cs/util/yauth/AuthTest.java +++ b/store/src/java/com/zimbra/cs/util/yauth/AuthTest.java @@ -16,10 +16,11 @@ */ package com.zimbra.cs.util.yauth; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.core.config.Configurator; + import junit.framework.TestCase; -import org.apache.log4j.Logger; -import org.apache.log4j.BasicConfigurator; -import org.apache.log4j.Level; + public class AuthTest extends TestCase { private static final String APPID = "D2hTUBHAkY0IEL5MA7ibTS_1K86E8RErSSaTGn4-"; @@ -29,8 +30,8 @@ public class AuthTest extends TestCase { private static String token; static { - BasicConfigurator.configure(); - Logger.getRootLogger().setLevel(Level.DEBUG); + Configurator.reconfigure(); + Configurator.setRootLevel(Level.DEBUG); } private static String getToken() throws Exception { diff --git a/store/src/java/com/zimbra/cs/util/yauth/FileTokenStore.java b/store/src/java/com/zimbra/cs/util/yauth/FileTokenStore.java index 8a33e06afbb..b3dabd59eb1 100644 --- a/store/src/java/com/zimbra/cs/util/yauth/FileTokenStore.java +++ b/store/src/java/com/zimbra/cs/util/yauth/FileTokenStore.java @@ -16,7 +16,6 @@ */ package com.zimbra.cs.util.yauth; -import org.apache.log4j.Logger; import java.io.File; import java.io.IOException; @@ -28,13 +27,17 @@ import java.io.FileNotFoundException; import java.io.BufferedReader; import java.util.Map; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + import java.util.HashMap; public class FileTokenStore extends TokenStore { private final File file; private final Map tokens; - private static final Logger LOG = Logger.getLogger(FileTokenStore.class); + private static final Logger LOG = LogManager.getLogger(FileTokenStore.class); public FileTokenStore(File file) throws IOException { this.file = file; diff --git a/store/src/java/com/zimbra/cs/util/yauth/RawAuth.java b/store/src/java/com/zimbra/cs/util/yauth/RawAuth.java index dddc7193ce3..825cd74ab23 100644 --- a/store/src/java/com/zimbra/cs/util/yauth/RawAuth.java +++ b/store/src/java/com/zimbra/cs/util/yauth/RawAuth.java @@ -31,8 +31,10 @@ import org.apache.http.client.methods.HttpGet; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.message.BasicNameValuePair; -import org.apache.log4j.Level; -import org.apache.log4j.Logger; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.core.Logger; +import org.apache.logging.log4j.core.config.Configurator; import com.zimbra.common.httpclient.HttpClientUtil; import com.zimbra.common.localconfig.LC; @@ -49,13 +51,14 @@ public class RawAuth implements Auth { private String wssId; private long expiration; - private static final Logger LOG = Logger.getLogger(RawAuth.class); + private static final org.apache.logging.log4j.Logger LOG = LogManager.getLogger(RawAuth.class); private static final boolean DEBUG = false; static { if (DEBUG) { - LOG.setLevel(Level.DEBUG); + Configurator.reconfigure(); + Configurator.setLevel(LOG.getName(), Level.DEBUG); System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog"); System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true"); System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire.header", "debug"); diff --git a/store/src/java/com/zimbra/cs/util/yauth/RawAuthManager.java b/store/src/java/com/zimbra/cs/util/yauth/RawAuthManager.java index dab8edd433e..800dac90e8a 100644 --- a/store/src/java/com/zimbra/cs/util/yauth/RawAuthManager.java +++ b/store/src/java/com/zimbra/cs/util/yauth/RawAuthManager.java @@ -16,16 +16,18 @@ */ package com.zimbra.cs.util.yauth; -import org.apache.log4j.Logger; import java.io.IOException; import java.util.HashMap; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + public final class RawAuthManager { private final TokenStore store; private final HashMap cookies; - private static final Logger LOG = Logger.getLogger(RawAuthManager.class); + private static final Logger LOG = LogManager.getLogger(RawAuthManager.class); public RawAuthManager(TokenStore store) { this.store = store; @@ -72,9 +74,12 @@ public Authenticator newAuthenticator(final String appId, final String user, final String pass) { return new Authenticator() { + @Override public RawAuth authenticate() throws AuthenticationException, IOException { return RawAuthManager.this.authenticate(appId, user, pass); } + + @Override public void invalidate() { RawAuthManager.this.invalidate(appId, user); } @@ -89,6 +94,7 @@ private String key(String appId, String user) { return appId + " " + user; } + @Override public String toString() { return String.format("{cookies=%d,tokens=%d}", cookies.size(), store.size()); } diff --git a/store/src/java/com/zimbra/qa/unittest/TestImapClient.java b/store/src/java/com/zimbra/qa/unittest/TestImapClient.java index c8596314064..0db924102a2 100644 --- a/store/src/java/com/zimbra/qa/unittest/TestImapClient.java +++ b/store/src/java/com/zimbra/qa/unittest/TestImapClient.java @@ -41,9 +41,10 @@ import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; -import org.apache.log4j.BasicConfigurator; -import org.apache.log4j.Level; -import org.apache.log4j.Logger; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.config.Configurator; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -92,7 +93,7 @@ public class TestImapClient { private ImapConfig config; private ImapConnection connection; - private static final Logger LOG = Logger.getLogger(TestImapClient.class); + private static final Logger LOG = LogManager.getLogger(TestImapClient.class); private static final String USER = "TestImapClient-user1"; private static final String PASS = "test123"; @@ -116,9 +117,9 @@ public class TestImapClient { @BeforeClass public static void beforeClass() throws Exception { - BasicConfigurator.configure(); - Logger.getRootLogger().setLevel(Level.INFO); - LOG.setLevel(Level.DEBUG); + Configurator.reconfigure(); + Configurator.setRootLevel(Level.INFO); + Configurator.setLevel(LOG.getName(), Level.DEBUG); sp = new SoapProvisioning(); prov = Provisioning.getInstance(); homeServer = prov.getLocalServer(); @@ -383,7 +384,7 @@ public void testID() throws Exception { @Ignore ("deprecated") public void testYahoo() throws Exception { ImapConfig config = new ImapConfig(); - config.getLogger().setLevel(Log.Level.trace); + config.getLogger().setLevel(Log.Level.trace); config.setHost("imap.mail.yahoo.com"); config.setAuthenticationId("dacztest"); connection = new ImapConnection(config); diff --git a/store/src/java/com/zimbra/qa/unittest/TestPop3Client.java b/store/src/java/com/zimbra/qa/unittest/TestPop3Client.java index 1fe54bfdfb5..e14765b8f4f 100644 --- a/store/src/java/com/zimbra/qa/unittest/TestPop3Client.java +++ b/store/src/java/com/zimbra/qa/unittest/TestPop3Client.java @@ -19,9 +19,10 @@ import java.io.IOException; import java.io.InputStream; +import org.apache.logging.log4j.core.config.Configurator; + import junit.framework.TestCase; -import org.apache.log4j.BasicConfigurator; import com.zimbra.common.util.Log; import com.zimbra.cs.mailclient.pop3.Pop3Capabilities; @@ -41,7 +42,7 @@ public class TestPop3Client extends TestCase { private static final String PASS = "test123"; static { - BasicConfigurator.configure(); + Configurator.reconfigure(); } public void testDown() throws Exception { diff --git a/store/src/java/org/apache/mina/transport/socket/nio/ZimbraSocketAcceptor.java b/store/src/java/org/apache/mina/transport/socket/nio/ZimbraSocketAcceptor.java index 500ca116e41..5bb73ab2634 100644 --- a/store/src/java/org/apache/mina/transport/socket/nio/ZimbraSocketAcceptor.java +++ b/store/src/java/org/apache/mina/transport/socket/nio/ZimbraSocketAcceptor.java @@ -23,6 +23,7 @@ import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; +import java.nio.channels.spi.SelectorProvider; import java.util.Collection; import java.util.Iterator; import java.util.concurrent.Executor; @@ -238,4 +239,9 @@ public void remove() { } } + @Override + protected void init(SelectorProvider arg0) throws Exception { + selector = Selector.open(); + } + }