Skip to content

Commit

Permalink
ZCS-11112: updated jar version for slf4j and apache-mina
Browse files Browse the repository at this point in the history
Made code changes so that logs could be written in logfiles
as well as handles zmprov cases
  • Loading branch information
zimsuchitgupta authored and abhishekdeshmukh2209 committed May 18, 2022
1 parent 01832b4 commit 31a4480
Show file tree
Hide file tree
Showing 6 changed files with 98 additions and 41 deletions.
5 changes: 1 addition & 4 deletions common/src/java/com/zimbra/common/util/LogFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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) {
Expand Down
112 changes: 80 additions & 32 deletions common/src/java/com/zimbra/common/util/ZimbraLog.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

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

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

private ZimbraLog() {
}

Expand Down Expand Up @@ -854,50 +881,71 @@ 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) {
String level = System.getProperty("zimbra.log4j.level");
if (level == null) {
level = defaultLevel;
}
Properties p = new Properties();
p.put("log4j.rootLogger", level + ",A1");

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

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

// create a console appender
AppenderComponentBuilder appenderBuilder = builder.newAppender(DEFAULT_APPENDER_NAME, DEFAULT_APPENDER_TYPE);
if (stderr) {
appenderBuilder.addAttribute(DEFAULT_APPENDER_TARGET, ConsoleAppender.Target.SYSTEM_ERR);
} else {
appenderBuilder.addAttribute(DEFAULT_APPENDER_TARGET, ConsoleAppender.Target.SYSTEM_OUT);
}
LayoutComponentBuilder layoutBuilder = builder.newLayout(LAYOUT_TYPE);
if (showThreads) {
p.put("log4j.appender.A1.layout.ConversionPattern", "[%t] [%x] %p: %m%n");
layoutBuilder.addAttribute(LAYOUT_PATTERN, LAYOUT_PATTERN_VALUE_WITH_THREADS);
} else {
p.put("log4j.appender.A1.layout.ConversionPattern", "[%x] %p: %m%n");
layoutBuilder.addAttribute(LAYOUT_PATTERN, LAYOUT_PATTERN_VALUE);
}
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
Expand Down
6 changes: 3 additions & 3 deletions store/ivy.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
<dependency org="org.powermock" name="powermock-api-mockito-common" rev="1.6.5"/>
<dependency org="org.mockito" name="mockito-all" rev="1.10.19" />
<dependency org="org.javassist" name="javassist" rev="3.18.2-GA" />
<dependency org="org.slf4j" name="slf4j-api" rev="1.7.30"/>
<dependency org="org.slf4j" name="slf4j-log4j12" rev="1.7.30"/>
<dependency org="org.slf4j" name="slf4j-api" rev="1.7.36"/>
<dependency org="org.slf4j" name="slf4j-simple" rev="1.7.36"/>
<dependency org="junit" name="junit" rev="4.8.2" />
<dependency org="javax.mail" name="mail" rev="1.4.5" />
<dependency org="jaxen" name="jaxen" rev="1.1-beta-10"/>
Expand Down Expand Up @@ -71,7 +71,7 @@
<dependency org="org.apache.httpcomponents" name="httpcore-nio" rev="${httpclient.httpcore.version}"/>
<dependency org="org.apache.httpcomponents" name="httpmime" rev="${httpclient.version}"/>
<dependency org="org.apache.commons" name="commons-compress" rev="1.20" />
<dependency org="org.apache.mina" name="mina-core" rev="2.0.4"/>
<dependency org="org.apache.mina" name="mina-core" rev="2.1.6"/>
<dependency org="org.apache.curator" name="curator-recipes" rev="2.0.1-incubating" />
<dependency org="org.apache.curator" name="curator-client" rev="2.0.1-incubating" />
<dependency org="org.apache.curator" name="curator-x-discovery" rev="2.0.1-incubating" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -83,7 +86,7 @@ public Element handle(Element request, Map<String, Object> 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);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -63,7 +66,7 @@ public Element handle(Element request, Map<String, Object> 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);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -238,4 +239,9 @@ public void remove() {
}
}

@Override
protected void init(SelectorProvider arg0) throws Exception {
selector = Selector.open();
}

}

0 comments on commit 31a4480

Please sign in to comment.