From dc0673dcfe647689c6a3f1cf4e53e78d32204018 Mon Sep 17 00:00:00 2001 From: abhishek Date: Mon, 10 Jan 2022 19:14:30 +0530 Subject: [PATCH 1/7] ZCS-11112 : Initial commit with version change of log4j to 2.17.1 is common --- client/ivy.xml | 3 +- common/ivy.xml | 3 +- .../src/java/com/zimbra/common/util/Log.java | 69 ++++++++++--------- .../com/zimbra/common/util/LogFactory.java | 20 +++--- .../com/zimbra/common/util/ZimbraLog.java | 21 ++++-- .../common/util/ZimbraPatternLayout.java | 29 ++++---- .../common/util/ZimbraPatternParser.java | 8 +-- soap/ivy.xml | 3 +- store/ivy.xml | 3 +- 9 files changed, 88 insertions(+), 71 deletions(-) diff --git a/client/ivy.xml b/client/ivy.xml index d2f700f7318..737d691f973 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..14c912f2c9e 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..3d58476c14d 100644 --- a/common/src/java/com/zimbra/common/util/Log.java +++ b/common/src/java/com/zimbra/common/util/Log.java @@ -22,8 +22,9 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import org.apache.log4j.Logger; - +import org.apache.logging.log4j.core.Logger; +import org.apache.logging.log4j.core.config.Configurator; +import org.apache.logging.log4j.LogManager; import com.google.common.collect.ImmutableMap; /** @@ -34,25 +35,25 @@ */ public class Log { - private final Map mAccountLoggers = new ConcurrentHashMap(); + 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 { @@ -62,7 +63,7 @@ public enum Level { private final Logger mLogger; - Log(Logger logger) { + Log(org.apache.logging.log4j.Logger logger) { if (logger == null) { throw new IllegalStateException("logger cannot be null"); } @@ -82,13 +83,13 @@ public void addAccountLogger(String accountName, Level level) { } // Create the account logger if it doesn't already exist. - Logger accountLogger = mAccountLoggers.get(accountName); + org.apache.logging.log4j.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(accountName, org.apache.logging.log4j.Level.DEBUG); } /** @@ -106,7 +107,7 @@ public int removeAccountLoggers() { * @return true if the logger was removed */ public boolean removeAccountLogger(String accountName) { - Logger logger = mAccountLoggers.remove(accountName); + org.apache.logging.log4j.Logger logger = mAccountLoggers.remove(accountName); return (logger != null); } @@ -134,15 +135,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 +444,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) { @@ -563,7 +564,7 @@ List getAccountLoggers() { } List accountLoggers = new ArrayList(); for (String accountName : mAccountLoggers.keySet()) { - Logger log4jLogger = mAccountLoggers.get(accountName); + org.apache.logging.log4j.Logger log4jLogger = mAccountLoggers.get(accountName); AccountLogger al = new AccountLogger(mLogger.getName(), accountName, LOG4J_TO_ZIMBRA.get(log4jLogger.getLevel())); accountLoggers.add(al); @@ -578,12 +579,12 @@ List getAccountLoggers() { * * @see #addAccountLogger */ - private Logger getLogger() { + private org.apache.logging.log4j.Logger getLogger() { if (mAccountLoggers.size() == 0) { return mLogger; } for (String accountName : ZimbraLog.getAccountNamesFromContext()) { - Logger logger = mAccountLoggers.get(accountName); + org.apache.logging.log4j.Logger logger = mAccountLoggers.get(accountName); if (logger != null) { return logger; } diff --git a/common/src/java/com/zimbra/common/util/LogFactory.java b/common/src/java/com/zimbra/common/util/LogFactory.java index 821d7a7de9c..c29b242d820 100644 --- a/common/src/java/com/zimbra/common/util/LogFactory.java +++ b/common/src/java/com/zimbra/common/util/LogFactory.java @@ -16,15 +16,15 @@ */ package com.zimbra.common.util; +import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.List; 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.LoggerContext; import com.zimbra.common.localconfig.LC; @@ -41,7 +41,10 @@ private LogFactory() { } public synchronized static void init() { - PropertyConfigurator.configure(LC.zimbra_log4j_properties.value()); + 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()); } public synchronized static void reset() { @@ -51,8 +54,8 @@ public synchronized static void reset() { for (Log log : getAllLoggers()) { log.removeAccountLoggers(); } - LogManager.resetConfiguration(); - PropertyConfigurator.configure(LC.zimbra_log4j_properties.value()); + LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false); + context.reconfigure(); } public static Log getLog(Class clazz) { @@ -65,7 +68,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 +81,8 @@ 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..931b346df22 100644 --- a/common/src/java/com/zimbra/common/util/ZimbraLog.java +++ b/common/src/java/com/zimbra/common/util/ZimbraLog.java @@ -28,7 +28,11 @@ import java.util.Set; import java.util.TreeMap; -import org.apache.log4j.PropertyConfigurator; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.core.LoggerContext; + +import com.zimbra.common.localconfig.LC; + /** * Log categories. @@ -865,7 +869,10 @@ public static void toolSetupLog4j(String defaultLevel, String logFile, boolean s } else { p.put("log4j.appender.A1.layout.ConversionPattern", "[%x] %p: %m%n"); } - PropertyConfigurator.configure(p); + LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false); + File file = new File(p.getClass().toString()); + // this will force a reconfiguration + context.setConfigLocation(file.toURI()); } public static void toolSetupLog4jConsole(String defaultLevel, boolean stderr, boolean showThreads) { @@ -886,7 +893,10 @@ public static void toolSetupLog4jConsole(String defaultLevel, boolean stderr, bo } else { p.put("log4j.appender.A1.layout.ConversionPattern", "[%x] %p: %m%n"); } - PropertyConfigurator.configure(p); + LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false); + File file = new File(p.getClass().toString()); + // this will force a reconfiguration + context.setConfigLocation(file.toURI()); } /** @@ -899,7 +909,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..658ba5c5a7b 100644 --- a/common/src/java/com/zimbra/common/util/ZimbraPatternLayout.java +++ b/common/src/java/com/zimbra/common/util/ZimbraPatternLayout.java @@ -16,11 +16,7 @@ */ 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.Layout; /** * Subclasses Log4J's PatternLayout class to add additional support for @@ -28,7 +24,7 @@ * * @author bburtin */ -public class ZimbraPatternLayout extends PatternLayout { +public class ZimbraPatternLayout extends PatternLayout { public ZimbraPatternLayout() { this(DEFAULT_CONVERSION_PATTERN); @@ -45,15 +41,14 @@ public PatternParser createPatternParser(String pattern) { return new ZimbraPatternParser(pattern, this); } - 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"); - } + /* + * 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"); } + */ } diff --git a/common/src/java/com/zimbra/common/util/ZimbraPatternParser.java b/common/src/java/com/zimbra/common/util/ZimbraPatternParser.java index 0436de0edc4..d468f00d08e 100644 --- a/common/src/java/com/zimbra/common/util/ZimbraPatternParser.java +++ b/common/src/java/com/zimbra/common/util/ZimbraPatternParser.java @@ -18,8 +18,8 @@ import org.apache.log4j.helpers.FormattingInfo; import org.apache.log4j.helpers.PatternConverter; -import org.apache.log4j.helpers.PatternParser; import org.apache.log4j.spi.LoggingEvent; +import org.apache.logging.log4j.core.pattern.PatternParser; /** * Formats the %z pattern as all the keys and values passed @@ -27,13 +27,13 @@ * * @author bburtin */ -public class ZimbraPatternParser -extends PatternParser { +public class ZimbraPatternParser { ZimbraPatternLayout mLayout; + PatternParser patterParser; ZimbraPatternParser(String pattern, ZimbraPatternLayout layout) { - super(pattern); + patterParser = new PatternParser(pattern); mLayout = layout; } diff --git a/soap/ivy.xml b/soap/ivy.xml index 494261d91eb..b0e51e4c381 100644 --- a/soap/ivy.xml +++ b/soap/ivy.xml @@ -17,7 +17,8 @@ - + + diff --git a/store/ivy.xml b/store/ivy.xml index 4faa011fe43..a8ab45760f5 100644 --- a/store/ivy.xml +++ b/store/ivy.xml @@ -21,7 +21,8 @@ - + + From 27e5aa639664aa8387ab024ac683a62aeb49f66c Mon Sep 17 00:00:00 2001 From: abhishek Date: Thu, 20 Jan 2022 17:38:35 +0530 Subject: [PATCH 2/7] ZCS-11112 : Adding new implemented class ZimbraPattern2Layout --- build-ivysettings.xml | 4 +- client/ivy.xml | 4 +- common/ivy.xml | 4 +- .../src/java/com/zimbra/common/util/Log.java | 8 +- .../com/zimbra/common/util/LogFactory.java | 26 +++-- .../common/util/ZimbraPattern2Layout.java | 27 ++++++ .../common/util/ZimbraPatternLayout.java | 93 +++++++++--------- .../common/util/ZimbraPatternParser.java | 96 ++++++++----------- soap/ivy-soapdoclet.xml | 3 +- soap/ivy-tools.xml | 3 +- soap/ivy.xml | 4 +- .../java/com/zimbra/soap/util/Jaxb2Xsds.java | 15 ++- .../java/com/zimbra/soap/util/XsdCleaner.java | 14 +-- store/ivy.xml | 4 +- .../zimbra/cs/ephemeral/EphemeralStore.java | 2 +- .../java/com/zimbra/cs/imap/ImapDaemon.java | 12 ++- .../java/com/zimbra/cs/index/IndexEditor.java | 41 ++++---- .../com/zimbra/cs/mailclient/MailClient.java | 18 ++-- .../zimbra/cs/redolog/util/PlaybackUtil.java | 24 +++-- .../com/zimbra/cs/util/yauth/AuthTest.java | 11 ++- .../zimbra/cs/util/yauth/FileTokenStore.java | 7 +- .../com/zimbra/cs/util/yauth/RawAuth.java | 11 ++- .../zimbra/cs/util/yauth/RawAuthManager.java | 10 +- .../zimbra/qa/unittest/TestImapClient.java | 17 ++-- .../zimbra/qa/unittest/TestPop3Client.java | 5 +- 25 files changed, 263 insertions(+), 200 deletions(-) create mode 100644 common/src/java/com/zimbra/common/util/ZimbraPattern2Layout.java diff --git a/build-ivysettings.xml b/build-ivysettings.xml index 0cb55298013..a91e90aa9fe 100644 --- a/build-ivysettings.xml +++ b/build-ivysettings.xml @@ -4,7 +4,9 @@ - + + + diff --git a/client/ivy.xml b/client/ivy.xml index 737d691f973..95ccfbf8f2c 100644 --- a/client/ivy.xml +++ b/client/ivy.xml @@ -9,8 +9,8 @@ - - + + diff --git a/common/ivy.xml b/common/ivy.xml index 14c912f2c9e..961a59ba4cb 100644 --- a/common/ivy.xml +++ b/common/ivy.xml @@ -16,8 +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 3d58476c14d..73cebd4bdba 100644 --- a/common/src/java/com/zimbra/common/util/Log.java +++ b/common/src/java/com/zimbra/common/util/Log.java @@ -38,7 +38,7 @@ public class Log { private final Map mAccountLoggers = new ConcurrentHashMap(); private static final Map ZIMBRA_TO_LOG4J = - new EnumMap(Level.class); + new EnumMap(Level.class); static { ZIMBRA_TO_LOG4J.put(Level.error, org.apache.logging.log4j.Level.ERROR); ZIMBRA_TO_LOG4J.put(Level.warn, org.apache.logging.log4j.Level.WARN); @@ -61,7 +61,7 @@ public enum Level { error, warn, info, debug, trace; }; - private final Logger mLogger; + private final org.apache.logging.log4j.Logger mLogger; Log(org.apache.logging.log4j.Logger logger) { if (logger == null) { @@ -89,7 +89,7 @@ public void addAccountLogger(String accountName, Level level) { accountLogger = LogManager.getLogger(accountCategory); mAccountLoggers.put(accountName, accountLogger); } - Configurator.setLevel(accountName, org.apache.logging.log4j.Level.DEBUG); + Configurator.setLevel(accountLogger.getName(), ZIMBRA_TO_LOG4J.get(level)); } /** @@ -546,7 +546,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 c29b242d820..22438b068ca 100644 --- a/common/src/java/com/zimbra/common/util/LogFactory.java +++ b/common/src/java/com/zimbra/common/util/LogFactory.java @@ -16,15 +16,17 @@ */ package com.zimbra.common.util; -import java.io.File; +import java.io.FileInputStream; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.io.IOException; import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.config.ConfigurationSource; +import org.apache.logging.log4j.core.config.Configurator; import com.zimbra.common.localconfig.LC; @@ -41,10 +43,12 @@ private LogFactory() { } public synchronized static void init() { - 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()); + try { + ConfigurationSource logConfigSource = new ConfigurationSource(new FileInputStream(LC.zimbra_log4j_properties.value())); + Configurator.initialize(null, logConfigSource); + } catch (IOException e) { + ZimbraLog.misc.info("Error initializing the loggers.", e); + } } public synchronized static void reset() { @@ -54,8 +58,14 @@ public synchronized static void reset() { for (Log log : getAllLoggers()) { log.removeAccountLoggers(); } - LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false); - context.reconfigure(); + LogManager.shutdown(); + ConfigurationSource logConfigSource; + try { + logConfigSource = new ConfigurationSource(new FileInputStream(LC.zimbra_log4j_properties.value())); + Configurator.initialize(null, logConfigSource); + } catch (IOException e) { + ZimbraLog.misc.info("Error resetting the loggers.", e); + } } public static Log getLog(Class clazz) { diff --git a/common/src/java/com/zimbra/common/util/ZimbraPattern2Layout.java b/common/src/java/com/zimbra/common/util/ZimbraPattern2Layout.java new file mode 100644 index 00000000000..f1482612b90 --- /dev/null +++ b/common/src/java/com/zimbra/common/util/ZimbraPattern2Layout.java @@ -0,0 +1,27 @@ +package com.zimbra.common.util; + +import org.apache.commons.lang.ObjectUtils; +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; + +@Plugin(name = "ZimbraPattern2Layout", category = "Converter") +@ConverterKeys({ "z" }) +public class ZimbraPattern2Layout extends LogEventPatternConverter { + + protected ZimbraPattern2Layout(String name, String style) { + super(name, style); + } + + public static ZimbraPattern2Layout newInstance(String[] options) + { + return new ZimbraPattern2Layout("z", Thread.currentThread().getName()); + } + + @Override + public void format(LogEvent event, StringBuilder toAppendTo) { + toAppendTo.append(ZimbraLog.getContextString()); + } + +} \ No newline at end of file diff --git a/common/src/java/com/zimbra/common/util/ZimbraPatternLayout.java b/common/src/java/com/zimbra/common/util/ZimbraPatternLayout.java index 658ba5c5a7b..20ea152a525 100644 --- a/common/src/java/com/zimbra/common/util/ZimbraPatternLayout.java +++ b/common/src/java/com/zimbra/common/util/ZimbraPatternLayout.java @@ -1,54 +1,47 @@ /* - * ***** BEGIN LICENSE BLOCK ***** - * Zimbra Collaboration Suite Server - * Copyright (C) 2007, 2009, 2010, 2013, 2014, 2016 Synacor, Inc. + * ***** 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. + * 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.logging.log4j.core.Layout; - -/** - * 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 { - - public ZimbraPatternLayout() { - this(DEFAULT_CONVERSION_PATTERN); - } - - public ZimbraPatternLayout(String pattern) { - super(pattern); - } - - public PatternParser createPatternParser(String pattern) { - if (pattern == null) { - pattern = DEFAULT_CONVERSION_PATTERN; - } - return new ZimbraPatternParser(pattern, this); - } - - /* - * 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"); } - */ -} + * 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; + * + *//** + * 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 { + * + * public ZimbraPatternLayout() { this(DEFAULT_CONVERSION_PATTERN); } + * + * public ZimbraPatternLayout(String pattern) { super(pattern); } + * + * public PatternParser createPatternParser(String pattern) { if (pattern == + * null) { pattern = DEFAULT_CONVERSION_PATTERN; } return new + * ZimbraPatternParser(pattern, this); } + * + * 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 index d468f00d08e..43b9b90f60d 100644 --- a/common/src/java/com/zimbra/common/util/ZimbraPatternParser.java +++ b/common/src/java/com/zimbra/common/util/ZimbraPatternParser.java @@ -1,58 +1,46 @@ /* - * ***** BEGIN LICENSE BLOCK ***** - * Zimbra Collaboration Suite Server - * Copyright (C) 2007, 2009, 2010, 2013, 2014, 2016 Synacor, Inc. + * ***** 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. + * 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.spi.LoggingEvent; -import org.apache.logging.log4j.core.pattern.PatternParser; - -/** - * Formats the %z pattern as all the keys and values passed - * to {@link ZimbraLog#addToContext}. - * - * @author bburtin - */ -public class ZimbraPatternParser { - - ZimbraPatternLayout mLayout; - PatternParser patterParser; - - ZimbraPatternParser(String pattern, ZimbraPatternLayout layout) { - patterParser = new PatternParser(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(); - } - } -} + * 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.spi.LoggingEvent; import + * org.apache.logging.log4j.core.pattern.PatternParser; + * + *//** + * Formats the %z pattern as all the keys and values passed to + * {@link ZimbraLog#addToContext}. + * + * @author bburtin + *//* + * public class ZimbraPatternParser { + * + * ZimbraPatternLayout mLayout; PatternParser patterParser; + * + * ZimbraPatternParser(String pattern, ZimbraPatternLayout layout) { + * patterParser = new PatternParser(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(); } } } + */ \ No newline at end of file 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 b0e51e4c381..949f367a357 100644 --- a/soap/ivy.xml +++ b/soap/ivy.xml @@ -17,8 +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..5c2716267d1 100644 --- a/soap/src/java/com/zimbra/soap/util/XsdCleaner.java +++ b/soap/src/java/com/zimbra/soap/util/XsdCleaner.java @@ -37,9 +37,9 @@ 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.core.config.Configurator; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; @@ -52,13 +52,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 org.apache.logging.log4j.Logger LOG = LogManager.getLogger(XsdCleaner.class); private static final String ARG_DIR = "--dir"; private static final String KEEP_BACKUPS = "--keep.backups"; @@ -67,9 +68,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/ivy.xml b/store/ivy.xml index a8ab45760f5..89234f5f36c 100644 --- a/store/ivy.xml +++ b/store/ivy.xml @@ -21,8 +21,8 @@ - - + + 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..b386bb7bf1d 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; @@ -98,7 +99,12 @@ public static void main(String[] args) { try (FileInputStream fisLog4j = new FileInputStream(IMAPD_LOG4J_CONFIG)) { props.load(fisLog4j); } - PropertyConfigurator.configure(props); + try { + ConfigurationSource logConfigSource = new ConfigurationSource(new FileInputStream(LC.zimbra_log4j_properties.value())); + 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 +112,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..6b715b918d9 100644 --- a/store/src/java/com/zimbra/cs/index/IndexEditor.java +++ b/store/src/java/com/zimbra/cs/index/IndexEditor.java @@ -33,11 +33,13 @@ 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.core.Appender; +import org.apache.logging.log4j.core.Logger; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.appender.OutputStreamAppender; +import org.apache.logging.log4j.core.config.Configuration; +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; @@ -433,26 +435,33 @@ protected boolean authenticate() throws IOException { return true; } - private WriterAppender mAppender; + private org.apache.logging.log4j.core.appender.WriterAppender mAppender; public boolean enableLogging() { if (mAppender == null) { - Layout layout = new PatternLayout(logLayoutPattern ); - mAppender = new WriterAppender(layout, mOutputStream); - Logger root = Logger.getRootLogger(); - - root.addAppender(mAppender); + /* + * Layout layout = new PatternLayout(logLayoutPattern ); + * mAppender = new org.apache.logging.log4j.core.appender.WriterAppender(layout, mOutputStream); + * Logger root = Logger.getRootLogger(); + * root.addAppender(mAppender); + */ + final LoggerContext context = LoggerContext.getContext(false); + final Configuration config = context.getConfiguration(); + final PatternLayout layout = PatternLayout.newBuilder().withPattern(logLayoutPattern).build(); + final Appender appender = OutputStreamAppender.createAppender(layout, null, mOutputStream, mAppender.getName(), false, true); + appender.start(); + config.addAppender(appender); 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 +687,7 @@ public void logLevel() outputStream.print("Caught exception: "+e.toString()); } - Logger root = Logger.getRootLogger(); + Logger root = LoggerContext.getContext().getRootLogger(); if (logLevel != null && !logLevel.equals("")) { 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/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 { From 01832b4d4cc9c05773a19a262fbf655238dfae42 Mon Sep 17 00:00:00 2001 From: abhishek Date: Tue, 15 Feb 2022 17:05:28 +0530 Subject: [PATCH 3/7] ZCS-11112 : Worked on review comments, removed fully qualified names and commented classes --- .../src/java/com/zimbra/common/util/Log.java | 19 ++--- .../com/zimbra/common/util/LogFactory.java | 12 +-- .../common/util/ZimbraPattern2Layout.java | 27 ------- .../common/util/ZimbraPatternLayout.java | 73 +++++++------------ .../common/util/ZimbraPatternParser.java | 46 ------------ .../java/com/zimbra/soap/util/XsdCleaner.java | 3 +- .../java/com/zimbra/cs/imap/ImapDaemon.java | 6 +- .../java/com/zimbra/cs/index/IndexEditor.java | 36 ++++----- 8 files changed, 62 insertions(+), 160 deletions(-) delete mode 100644 common/src/java/com/zimbra/common/util/ZimbraPattern2Layout.java delete mode 100644 common/src/java/com/zimbra/common/util/ZimbraPatternParser.java diff --git a/common/src/java/com/zimbra/common/util/Log.java b/common/src/java/com/zimbra/common/util/Log.java index 73cebd4bdba..0c3a4505649 100644 --- a/common/src/java/com/zimbra/common/util/Log.java +++ b/common/src/java/com/zimbra/common/util/Log.java @@ -22,9 +22,10 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import org.apache.logging.log4j.core.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; /** @@ -35,7 +36,7 @@ */ public class Log { - private final Map mAccountLoggers = new ConcurrentHashMap(); + private final Map mAccountLoggers = new ConcurrentHashMap(); private static final Map ZIMBRA_TO_LOG4J = new EnumMap(Level.class); @@ -61,9 +62,9 @@ public enum Level { error, warn, info, debug, trace; }; - private final org.apache.logging.log4j.Logger mLogger; + private final Logger mLogger; - Log(org.apache.logging.log4j.Logger logger) { + Log(Logger logger) { if (logger == null) { throw new IllegalStateException("logger cannot be null"); } @@ -83,7 +84,7 @@ public void addAccountLogger(String accountName, Level level) { } // Create the account logger if it doesn't already exist. - org.apache.logging.log4j.Logger accountLogger = mAccountLoggers.get(accountName); + Logger accountLogger = mAccountLoggers.get(accountName); if (accountLogger == null) { String accountCategory = getAccountCategory(getCategory(), accountName); accountLogger = LogManager.getLogger(accountCategory); @@ -107,7 +108,7 @@ public int removeAccountLoggers() { * @return true if the logger was removed */ public boolean removeAccountLogger(String accountName) { - org.apache.logging.log4j.Logger logger = mAccountLoggers.remove(accountName); + Logger logger = mAccountLoggers.remove(accountName); return (logger != null); } @@ -564,7 +565,7 @@ List getAccountLoggers() { } List accountLoggers = new ArrayList(); for (String accountName : mAccountLoggers.keySet()) { - org.apache.logging.log4j.Logger log4jLogger = mAccountLoggers.get(accountName); + Logger log4jLogger = mAccountLoggers.get(accountName); AccountLogger al = new AccountLogger(mLogger.getName(), accountName, LOG4J_TO_ZIMBRA.get(log4jLogger.getLevel())); accountLoggers.add(al); @@ -579,12 +580,12 @@ List getAccountLoggers() { * * @see #addAccountLogger */ - private org.apache.logging.log4j.Logger getLogger() { + private Logger getLogger() { if (mAccountLoggers.size() == 0) { return mLogger; } for (String accountName : ZimbraLog.getAccountNamesFromContext()) { - org.apache.logging.log4j.Logger logger = mAccountLoggers.get(accountName); + Logger logger = mAccountLoggers.get(accountName); if (logger != null) { return logger; } diff --git a/common/src/java/com/zimbra/common/util/LogFactory.java b/common/src/java/com/zimbra/common/util/LogFactory.java index 22438b068ca..e18a9b30acc 100644 --- a/common/src/java/com/zimbra/common/util/LogFactory.java +++ b/common/src/java/com/zimbra/common/util/LogFactory.java @@ -44,9 +44,8 @@ private LogFactory() { public synchronized static void init() { try { - ConfigurationSource logConfigSource = new ConfigurationSource(new FileInputStream(LC.zimbra_log4j_properties.value())); - Configurator.initialize(null, logConfigSource); - } catch (IOException e) { + Configurator.initialize(null, LC.zimbra_log4j_properties.value()); + } catch (Exception e) { ZimbraLog.misc.info("Error initializing the loggers.", e); } } @@ -59,11 +58,9 @@ public synchronized static void reset() { log.removeAccountLoggers(); } LogManager.shutdown(); - ConfigurationSource logConfigSource; try { - logConfigSource = new ConfigurationSource(new FileInputStream(LC.zimbra_log4j_properties.value())); - Configurator.initialize(null, logConfigSource); - } catch (IOException e) { + Configurator.initialize(null, LC.zimbra_log4j_properties.value()); + } catch (Exception e) { ZimbraLog.misc.info("Error resetting the loggers.", e); } } @@ -92,7 +89,6 @@ public static Log getLog(String name) { */ public static boolean logExists(String name) { return (LogManager.exists(name)); - } /** diff --git a/common/src/java/com/zimbra/common/util/ZimbraPattern2Layout.java b/common/src/java/com/zimbra/common/util/ZimbraPattern2Layout.java deleted file mode 100644 index f1482612b90..00000000000 --- a/common/src/java/com/zimbra/common/util/ZimbraPattern2Layout.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.zimbra.common.util; - -import org.apache.commons.lang.ObjectUtils; -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; - -@Plugin(name = "ZimbraPattern2Layout", category = "Converter") -@ConverterKeys({ "z" }) -public class ZimbraPattern2Layout extends LogEventPatternConverter { - - protected ZimbraPattern2Layout(String name, String style) { - super(name, style); - } - - public static ZimbraPattern2Layout newInstance(String[] options) - { - return new ZimbraPattern2Layout("z", Thread.currentThread().getName()); - } - - @Override - public void format(LogEvent event, StringBuilder toAppendTo) { - toAppendTo.append(ZimbraLog.getContextString()); - } - -} \ No newline at end of file diff --git a/common/src/java/com/zimbra/common/util/ZimbraPatternLayout.java b/common/src/java/com/zimbra/common/util/ZimbraPatternLayout.java index 20ea152a525..a2a149169da 100644 --- a/common/src/java/com/zimbra/common/util/ZimbraPatternLayout.java +++ b/common/src/java/com/zimbra/common/util/ZimbraPatternLayout.java @@ -1,47 +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; - * - *//** - * 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 { - * - * public ZimbraPatternLayout() { this(DEFAULT_CONVERSION_PATTERN); } - * - * public ZimbraPatternLayout(String pattern) { super(pattern); } - * - * public PatternParser createPatternParser(String pattern) { if (pattern == - * null) { pattern = DEFAULT_CONVERSION_PATTERN; } return new - * ZimbraPatternParser(pattern, this); } - * - * 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 +package com.zimbra.common.util; + +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; + +@Plugin(name = "ZimbraPatternLayout", category = "Converter") +@ConverterKeys({ "z" }) +public class ZimbraPatternLayout extends LogEventPatternConverter { + + protected ZimbraPatternLayout(String name, String style) { + super(name, style); + } + + public static ZimbraPatternLayout newInstance(String[] options) + { + return new ZimbraPatternLayout("z", Thread.currentThread().getName()); + } + + @Override + public void format(LogEvent event, StringBuilder toAppendTo) { + toAppendTo.append(ZimbraLog.getContextString() == null ? "" : ZimbraLog.getContextString()); + } + +} \ 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 43b9b90f60d..00000000000 --- a/common/src/java/com/zimbra/common/util/ZimbraPatternParser.java +++ /dev/null @@ -1,46 +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.spi.LoggingEvent; import - * org.apache.logging.log4j.core.pattern.PatternParser; - * - *//** - * Formats the %z pattern as all the keys and values passed to - * {@link ZimbraLog#addToContext}. - * - * @author bburtin - *//* - * public class ZimbraPatternParser { - * - * ZimbraPatternLayout mLayout; PatternParser patterParser; - * - * ZimbraPatternParser(String pattern, ZimbraPatternLayout layout) { - * patterParser = new PatternParser(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(); } } } - */ \ No newline at end of file diff --git a/soap/src/java/com/zimbra/soap/util/XsdCleaner.java b/soap/src/java/com/zimbra/soap/util/XsdCleaner.java index 5c2716267d1..7eef6d69dce 100644 --- a/soap/src/java/com/zimbra/soap/util/XsdCleaner.java +++ b/soap/src/java/com/zimbra/soap/util/XsdCleaner.java @@ -39,6 +39,7 @@ 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; @@ -59,7 +60,7 @@ * See http://connect.microsoft.com/VisualStudio/feedback/details/471297 */ public class XsdCleaner { - private static final org.apache.logging.log4j.Logger LOG = LogManager.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"; diff --git a/store/src/java/com/zimbra/cs/imap/ImapDaemon.java b/store/src/java/com/zimbra/cs/imap/ImapDaemon.java index b386bb7bf1d..c8cd260d714 100644 --- a/store/src/java/com/zimbra/cs/imap/ImapDaemon.java +++ b/store/src/java/com/zimbra/cs/imap/ImapDaemon.java @@ -95,12 +95,8 @@ 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); - } try { - ConfigurationSource logConfigSource = new ConfigurationSource(new FileInputStream(LC.zimbra_log4j_properties.value())); + ConfigurationSource logConfigSource = new ConfigurationSource(new FileInputStream(IMAPD_LOG4J_CONFIG)); Configurator.initialize(null, logConfigSource); } catch (IOException e) { ZimbraLog.misc.info("Error initializing the loggers.", e); diff --git a/store/src/java/com/zimbra/cs/index/IndexEditor.java b/store/src/java/com/zimbra/cs/index/IndexEditor.java index 6b715b918d9..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; @@ -34,11 +35,14 @@ import java.util.Set; import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.core.Appender; -import org.apache.logging.log4j.core.Logger; +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.OutputStreamAppender; +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; @@ -435,22 +439,20 @@ protected boolean authenticate() throws IOException { return true; } - private org.apache.logging.log4j.core.appender.WriterAppender mAppender; + private WriterAppender mAppender; public boolean enableLogging() { if (mAppender == null) { - /* - * Layout layout = new PatternLayout(logLayoutPattern ); - * mAppender = new org.apache.logging.log4j.core.appender.WriterAppender(layout, mOutputStream); - * Logger root = Logger.getRootLogger(); - * root.addAppender(mAppender); - */ - final LoggerContext context = LoggerContext.getContext(false); - final Configuration config = context.getConfiguration(); - final PatternLayout layout = PatternLayout.newBuilder().withPattern(logLayoutPattern).build(); - final Appender appender = OutputStreamAppender.createAppender(layout, null, mOutputStream, mAppender.getName(), false, true); - appender.start(); - config.addAppender(appender); + Layout layout = PatternLayout.newBuilder().withPattern(logLayoutPattern).build(); + mAppender = WriterAppender.newBuilder().setTarget(new OutputStreamWriter(mOutputStream)) + .setLayout(layout).build(); + + 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; @@ -714,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); From 31a44808039c3d1349047028000b9f76ca2f161a Mon Sep 17 00:00:00 2001 From: zimsuchitgupta Date: Wed, 16 Mar 2022 12:50:03 +0530 Subject: [PATCH 4/7] ZCS-11112: updated jar version for slf4j and apache-mina Made code changes so that logs could be written in logfiles as well as handles zmprov cases --- .../com/zimbra/common/util/LogFactory.java | 5 +- .../com/zimbra/common/util/ZimbraLog.java | 112 +++++++++++++----- store/ivy.xml | 6 +- .../cs/service/admin/AddAccountLogger.java | 5 +- .../cs/service/admin/RemoveAccountLogger.java | 5 +- .../socket/nio/ZimbraSocketAcceptor.java | 6 + 6 files changed, 98 insertions(+), 41 deletions(-) diff --git a/common/src/java/com/zimbra/common/util/LogFactory.java b/common/src/java/com/zimbra/common/util/LogFactory.java index e18a9b30acc..7069522e566 100644 --- a/common/src/java/com/zimbra/common/util/LogFactory.java +++ b/common/src/java/com/zimbra/common/util/LogFactory.java @@ -16,16 +16,13 @@ */ package com.zimbra.common.util; -import java.io.FileInputStream; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import java.io.IOException; import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.core.config.ConfigurationSource; import org.apache.logging.log4j.core.config.Configurator; import com.zimbra.common.localconfig.LC; @@ -57,7 +54,7 @@ public synchronized static void reset() { for (Log log : getAllLoggers()) { log.removeAccountLoggers(); } - LogManager.shutdown(); + LogManager.shutdown(true); try { Configurator.initialize(null, LC.zimbra_log4j_properties.value()); } catch (Exception e) { diff --git a/common/src/java/com/zimbra/common/util/ZimbraLog.java b/common/src/java/com/zimbra/common/util/ZimbraLog.java index 931b346df22..d56441c56c7 100644 --- a/common/src/java/com/zimbra/common/util/ZimbraLog.java +++ b/common/src/java/com/zimbra/common/util/ZimbraLog.java @@ -24,12 +24,20 @@ 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.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; @@ -489,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() { } @@ -854,25 +881,38 @@ 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); } - LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false); - File file = new File(p.getClass().toString()); - // this will force a reconfiguration - context.setConfigLocation(file.toURI()); + builder.add(appenderBuilder.add(layoutBuilder)); + + // 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)); + + builder.add(builder.newRootLogger(level) + .add(builder.newAppenderRef(APPENDER_NAME))); + Configurator.initialize(builder.build()); } public static void toolSetupLog4jConsole(String defaultLevel, boolean stderr, boolean showThreads) { @@ -880,24 +920,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); } - LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false); - File file = new File(p.getClass().toString()); - // this will force a reconfiguration - context.setConfigLocation(file.toURI()); - } + 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 diff --git a/store/ivy.xml b/store/ivy.xml index 89234f5f36c..9292dd7136b 100644 --- a/store/ivy.xml +++ b/store/ivy.xml @@ -15,8 +15,8 @@ - - + + @@ -71,7 +71,7 @@ - + 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/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(); + } + } From 1cb7e319852f70a9a2532a3dafcb1e22b1007d66 Mon Sep 17 00:00:00 2001 From: zimsuchitgupta Date: Mon, 21 Mar 2022 17:39:58 +0530 Subject: [PATCH 5/7] ZCS-11112: Updated log4j.properties.production file as per log4j-2.17 documentation --- build-ivysettings.xml | 2 +- .../com/zimbra/common/util/LogFactory.java | 12 +- .../com/zimbra/common/util/ZimbraLog.java | 33 +- milter-conf/conf/milter.log4j.properties | 50 ++- store-conf/conf/imapd.log4j.properties | 87 +++-- store-conf/conf/log4j.properties | 332 ++++++++++++------ store-conf/conf/log4j.properties.production | 296 ++++++++++------ store/build.xml | 6 +- 8 files changed, 517 insertions(+), 301 deletions(-) diff --git a/build-ivysettings.xml b/build-ivysettings.xml index a91e90aa9fe..d58d40b23aa 100644 --- a/build-ivysettings.xml +++ b/build-ivysettings.xml @@ -5,7 +5,7 @@ - + diff --git a/common/src/java/com/zimbra/common/util/LogFactory.java b/common/src/java/com/zimbra/common/util/LogFactory.java index 7069522e566..ad7ff4a1743 100644 --- a/common/src/java/com/zimbra/common/util/LogFactory.java +++ b/common/src/java/com/zimbra/common/util/LogFactory.java @@ -40,11 +40,7 @@ private LogFactory() { } public synchronized static void init() { - try { - Configurator.initialize(null, LC.zimbra_log4j_properties.value()); - } catch (Exception e) { - ZimbraLog.misc.info("Error initializing the loggers.", e); - } + Configurator.initialize(null, LC.zimbra_log4j_properties.value()); } public synchronized static void reset() { @@ -55,11 +51,7 @@ public synchronized static void reset() { log.removeAccountLoggers(); } LogManager.shutdown(true); - try { - Configurator.initialize(null, LC.zimbra_log4j_properties.value()); - } catch (Exception e) { - ZimbraLog.misc.info("Error resetting the loggers.", e); - } + Configurator.initialize(null, LC.zimbra_log4j_properties.value()); } public static Log getLog(Class clazz) { diff --git a/common/src/java/com/zimbra/common/util/ZimbraLog.java b/common/src/java/com/zimbra/common/util/ZimbraLog.java index d56441c56c7..a7600f62b53 100644 --- a/common/src/java/com/zimbra/common/util/ZimbraLog.java +++ b/common/src/java/com/zimbra/common/util/ZimbraLog.java @@ -895,23 +895,24 @@ public static void toolSetupLog4j(String defaultLevel, String logFile, boolean s } builder.add(appenderBuilder.add(layoutBuilder)); - // 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)); - + 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)); + } builder.add(builder.newRootLogger(level) - .add(builder.newAppenderRef(APPENDER_NAME))); + .add(builder.newAppenderRef(DEFAULT_APPENDER_NAME))); Configurator.initialize(builder.build()); } 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/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 @@ - - + + - + From c26d28edf3cf058e731bc7085b644b78daf209bd Mon Sep 17 00:00:00 2001 From: abhishek Date: Wed, 11 May 2022 16:11:46 +0530 Subject: [PATCH 6/7] ZCS-11112 : Removed extra spaces and correcting indentation --- common/src/java/com/zimbra/common/util/Log.java | 2 +- common/src/java/com/zimbra/common/util/ZimbraLog.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/common/src/java/com/zimbra/common/util/Log.java b/common/src/java/com/zimbra/common/util/Log.java index 0c3a4505649..e184369a669 100644 --- a/common/src/java/com/zimbra/common/util/Log.java +++ b/common/src/java/com/zimbra/common/util/Log.java @@ -39,7 +39,7 @@ public class Log { private final Map mAccountLoggers = new ConcurrentHashMap(); private static final Map ZIMBRA_TO_LOG4J = - new EnumMap(Level.class); + new EnumMap(Level.class); static { ZIMBRA_TO_LOG4J.put(Level.error, org.apache.logging.log4j.Level.ERROR); ZIMBRA_TO_LOG4J.put(Level.warn, org.apache.logging.log4j.Level.WARN); diff --git a/common/src/java/com/zimbra/common/util/ZimbraLog.java b/common/src/java/com/zimbra/common/util/ZimbraLog.java index a7600f62b53..e3536f77e23 100644 --- a/common/src/java/com/zimbra/common/util/ZimbraLog.java +++ b/common/src/java/com/zimbra/common/util/ZimbraLog.java @@ -941,11 +941,11 @@ public static void toolSetupLog4jConsole(String defaultLevel, boolean stderr, bo 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)); + .add(builder.newAppenderRef(DEFAULT_APPENDER_NAME)) + .addAttribute(LOGGER_ADDITIVITY, false)); builder.add(builder.newRootLogger(level) - .add(builder.newAppenderRef(DEFAULT_APPENDER_NAME))); + .add(builder.newAppenderRef(DEFAULT_APPENDER_NAME))); Configurator.reconfigure(builder.build()); } /** From 3840063afba1d9eb73136798a18de5380c910e32 Mon Sep 17 00:00:00 2001 From: abhishek Date: Wed, 11 May 2022 18:42:59 +0530 Subject: [PATCH 7/7] ZCS-11112 : Correcting indentation for ZimbraLog.java file --- common/src/java/com/zimbra/common/util/ZimbraLog.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/java/com/zimbra/common/util/ZimbraLog.java b/common/src/java/com/zimbra/common/util/ZimbraLog.java index e3536f77e23..803bdd12182 100644 --- a/common/src/java/com/zimbra/common/util/ZimbraLog.java +++ b/common/src/java/com/zimbra/common/util/ZimbraLog.java @@ -908,8 +908,8 @@ public static void toolSetupLog4j(String defaultLevel, String logFile, boolean s // create the new logger builder.add(builder.newLogger(LOGGER_NAME, level) - .add(builder.newAppenderRef(APPENDER_NAME)) - .addAttribute(LOGGER_ADDITIVITY, false)); + .add(builder.newAppenderRef(APPENDER_NAME)) + .addAttribute(LOGGER_ADDITIVITY, false)); } builder.add(builder.newRootLogger(level) .add(builder.newAppenderRef(DEFAULT_APPENDER_NAME)));