Martin Peřina has uploaded a new change for review. Change subject: tools: Add runtime log4j setup to engine-manage-domains ......................................................................
tools: Add runtime log4j setup to engine-manage-domains 1) Moves default log4j.xml for engine-manage-domains into tools.jar 2) By default logging is off 3) Adds --log-file which sets file to write logging messages into 4) Adds --log-level which sets logging level for logger specified with --log-file (it's set to INFO by default) 5) Adds --log4j-config which sets filename or URL with custom log4j.xml file to setup logging Change-Id: I0641dd6ce8984504c8c6e97df7b90e81ca5a8c4f Bug-Url: https://bugzilla.redhat.com/1083411 Signed-off-by: Martin Perina <mper...@redhat.com> --- M Makefile M backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java M backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsArguments.java A backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsExecutor.java A backend/manager/tools/src/main/resources/engine-manage-domains/log4j.xml M backend/manager/tools/src/main/resources/manage-domains-help.properties M ovirt-engine.spec.in M packaging/bin/engine-manage-domains.sh D packaging/etc/engine-manage-domains/log4j.xml.in M packaging/man/man8/engine-manage-domains.8 10 files changed, 146 insertions(+), 89 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/23/26823/1 diff --git a/Makefile b/Makefile index 29fb82b..4c25a20 100644 --- a/Makefile +++ b/Makefile @@ -163,7 +163,6 @@ packaging/bin/ovirt-engine-log-setup-event.sh \ packaging/bin/pki-common.sh \ packaging/etc/engine-manage-domains/engine-manage-domains.conf \ - packaging/etc/engine-manage-domains/log4j.xml \ packaging/etc/engine.conf.d/README \ packaging/etc/notifier/log4j.xml \ packaging/etc/notifier/notifier.conf.d/README \ diff --git a/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java index a19e0f4..9022c5c 100644 --- a/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java +++ b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java @@ -14,7 +14,6 @@ import static org.ovirt.engine.core.domains.ManageDomainsArguments.ARG_CONFIG_FILE; import static org.ovirt.engine.core.domains.ManageDomainsArguments.ARG_DOMAIN; import static org.ovirt.engine.core.domains.ManageDomainsArguments.ARG_FORCE; -import static org.ovirt.engine.core.domains.ManageDomainsArguments.ARG_HELP; import static org.ovirt.engine.core.domains.ManageDomainsArguments.ARG_LDAP_SERVERS; import static org.ovirt.engine.core.domains.ManageDomainsArguments.ARG_PASSWORD_FILE; import static org.ovirt.engine.core.domains.ManageDomainsArguments.ARG_PROVIDER; @@ -50,13 +49,9 @@ import java.util.Scanner; import java.util.Set; -import javax.xml.parsers.FactoryConfigurationError; - import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.lang.StringUtils; -import org.apache.log4j.LogManager; import org.apache.log4j.Logger; -import org.apache.log4j.xml.DOMConfigurator; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.ldap.LdapProviderType; @@ -151,51 +146,12 @@ } } - private static void exitOnError(ManageDomainsResult result) { + public static void exitOnError(ManageDomainsResult result) { if (!result.isSuccessful()) { log.error(result.getDetailedMessage()); System.out.println(result.getDetailedMessage()); System.exit(result.getExitCode()); } - } - - /** - * Initializes logging configuration - */ - private static void initLogging() { - String cfgFile = System.getProperty("log4j.configuration"); - if (StringUtils.isNotBlank(cfgFile)) { - try { - URL url = new URL(cfgFile); - LogManager.resetConfiguration(); - DOMConfigurator.configure(url); - } catch (FactoryConfigurationError | MalformedURLException ex) { - System.out.println("Cannot configure logging: " + ex.getMessage()); - } - } - } - - public static void main(String[] args) { - initLogging(); - ManageDomains util; - try { - ManageDomainsArguments mdArgs = new ManageDomainsArguments(); - mdArgs.parse(args); - - if (mdArgs.contains(ARG_HELP)) { - mdArgs.printHelp(); - System.exit(0); - } else { - util = new ManageDomains(mdArgs); - util.init(); - util.createConfigurationProvider(); - util.runCommand(); - } - } catch (ManageDomainsResult e) { - exitOnError(e); - } - System.out.println(ManageDomainsResultEnum.OK.getDetailedMessage()); - System.exit(ManageDomainsResultEnum.OK.getExitCode()); } private String convertStreamToString(InputStream is) { @@ -218,7 +174,7 @@ } } - private void createConfigurationProvider() throws ManageDomainsResult { + public void createConfigurationProvider() throws ManageDomainsResult { String engineConfigProperties = createTempPropFile(); try { String engineConfigExecutable = utilityConfiguration.getEngineConfigExecutablePath(); @@ -288,7 +244,7 @@ return result != null && result.getNumOfValidAddresses() > 0; } - private void runCommand() throws ManageDomainsResult { + public void runCommand() throws ManageDomainsResult { String action = args.get(ARG_ACTION); if (ACTION_ADD.equals(action)) { diff --git a/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsArguments.java b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsArguments.java index 72cfbfe..29ea1e4 100644 --- a/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsArguments.java +++ b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsArguments.java @@ -89,6 +89,21 @@ public static final String ARG_LDAP_SERVERS = "--ldap-servers"; /** + * Log file + */ + public static final String ARG_LOG_FILE = "--log-file"; + + /** + * Log level + */ + public static final String ARG_LOG_LEVEL = "--log-level"; + + /** + * Log4j config file + */ + public static final String ARG_LOG4J_CONFIG = "--log4j-config"; + + /** * Password file */ public static final String ARG_PASSWORD_FILE = "--password-file"; @@ -177,6 +192,21 @@ .valueRequied(true) .build()); + parser.addArg(new ArgumentBuilder() + .longName(ARG_LOG_FILE) + .valueRequied(true) + .build()); + + parser.addArg(new ArgumentBuilder() + .longName(ARG_LOG_LEVEL) + .valueRequied(true) + .build()); + + parser.addArg(new ArgumentBuilder() + .longName(ARG_LOG4J_CONFIG) + .valueRequied(true) + .build()); + if (ACTION_ADD.equals(action) || ACTION_EDIT.equals(action)) { parser.addArg(new ArgumentBuilder() .longName(ARG_DOMAIN) diff --git a/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsExecutor.java b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsExecutor.java new file mode 100644 index 0000000..f00fdf2 --- /dev/null +++ b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsExecutor.java @@ -0,0 +1,72 @@ +package org.ovirt.engine.core.domains; + +import static org.ovirt.engine.core.domains.ManageDomainsArguments.ARG_HELP; +import static org.ovirt.engine.core.domains.ManageDomainsArguments.ARG_LOG4J_CONFIG; +import static org.ovirt.engine.core.domains.ManageDomainsArguments.ARG_LOG_FILE; +import static org.ovirt.engine.core.domains.ManageDomainsArguments.ARG_LOG_LEVEL; + +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.log4j.helpers.LogLog; +import org.ovirt.engine.core.utils.log.Log4jUtils; + +/** + * Parses command line arguments, setups logging and executes engine-manage-domains + */ +public class ManageDomainsExecutor { + public static void setupLogging(String log4jConfig, String logFile, String logLevel) { + URL cfgFileUrl = null; + try { + if (log4jConfig == null) { + cfgFileUrl = ManageDomainsExecutor.class.getResource("/engine-manage-domains/log4j.xml"); + } else { + cfgFileUrl = new File(log4jConfig).toURI().toURL(); + } + Log4jUtils.setupLogging(cfgFileUrl); + } catch (MalformedURLException ex) { + throw new IllegalArgumentException( + String.format("Error loading log4j configuration from '%s': %s", cfgFileUrl, ex.getMessage()), + ex); + } + + if (logFile != null) { + Log4jUtils.addFileAppender(logFile, logLevel); + } + } + + public static void main(String... args) { + ManageDomainsArguments mdArgs = null; + try { + // suppress displaying log4j warnings due to accessing logs when parsing params + LogLog.setQuietMode(true); + mdArgs = new ManageDomainsArguments(); + mdArgs.parse(args); + LogLog.setQuietMode(false); + + setupLogging(mdArgs.get(ARG_LOG4J_CONFIG), mdArgs.get(ARG_LOG_FILE), mdArgs.get(ARG_LOG_LEVEL)); + } catch (Throwable t) { + System.out.println(t.getMessage()); + System.exit(1); + } + + try { + if (mdArgs.contains(ARG_HELP)) { + mdArgs.printHelp(); + System.exit(0); + } else { + ManageDomains util = new ManageDomains(mdArgs); + // it's existence is checked during the parser validation + util.init(); + util.createConfigurationProvider(); + util.runCommand(); + } + } catch (ManageDomainsResult e) { + ManageDomains.exitOnError(e); + } + System.out.println(ManageDomainsResultEnum.OK.getDetailedMessage()); + System.exit(ManageDomainsResultEnum.OK.getExitCode()); + } + +} diff --git a/backend/manager/tools/src/main/resources/engine-manage-domains/log4j.xml b/backend/manager/tools/src/main/resources/engine-manage-domains/log4j.xml new file mode 100644 index 0000000..7b0580b --- /dev/null +++ b/backend/manager/tools/src/main/resources/engine-manage-domains/log4j.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> + +<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> + <appender name="null-appender" class="org.apache.log4j.varia.NullAppender" /> + <root> + <level value="DEBUG"/> + <!-- + We need this, because log4j writes warning messages to stderr + if no appender is configured and we add appender only if proper + command line argument is specified. + --> + <appender-ref ref="null-appender" /> + </root> +</log4j:configuration> diff --git a/backend/manager/tools/src/main/resources/manage-domains-help.properties b/backend/manager/tools/src/main/resources/manage-domains-help.properties index ec41977..3352828 100644 --- a/backend/manager/tools/src/main/resources/manage-domains-help.properties +++ b/backend/manager/tools/src/main/resources/manage-domains-help.properties @@ -46,6 +46,15 @@ \n--ldap-servers=SERVERS\ \n\tA comma delimited list of LDAP servers to be set to the domain.\ \n\ +\n--log-file=LOG_FILE\ +\n\tSets file to write logging into (if not set nothing is logged).\ +\n\ +\n--log-level=LOG_LEVEL\ +\n\tSets log level, one of DEBUG (default), INFO, WARN, ERROR (case insensitive).\ +\n\ +\n--log4j-config=XML_FILE\ +\n\tSets log4j.xml file which logging configuration is loaded from.\ +\n\ \n--provider=PROVIDER\ \n\tThe LDAP provider type of server used for the domain, can be one of (case insensitive):\ \n\t\tad Microsoft Active Directory\ diff --git a/ovirt-engine.spec.in b/ovirt-engine.spec.in index 3b6b0c4..feb2a5d 100644 --- a/ovirt-engine.spec.in +++ b/ovirt-engine.spec.in @@ -1006,7 +1006,6 @@ %{engine_data}/conf/jaas.conf %{engine_data}/services/ovirt-engine-notifier %{engine_etc}/engine-config/engine-config.*properties -%{engine_etc}/engine-manage-domains/log4j.xml %{engine_etc}/notifier/notifier.conf.d/ %{engine_java}/tools.jar diff --git a/packaging/bin/engine-manage-domains.sh b/packaging/bin/engine-manage-domains.sh index 2bd5b1a..7f3306c 100755 --- a/packaging/bin/engine-manage-domains.sh +++ b/packaging/bin/engine-manage-domains.sh @@ -19,9 +19,8 @@ # exec "${JAVA_HOME}/bin/java" \ - -Dlog4j.configuration="file:${ENGINE_ETC}/engine-manage-domains/log4j.xml" \ -Djboss.modules.write-indexes=false \ -jar "${JBOSS_HOME}/jboss-modules.jar" \ -dependencies org.ovirt.engine.core.tools \ - -class org.ovirt.engine.core.domains.ManageDomains \ + -class org.ovirt.engine.core.domains.ManageDomainsExecutor \ "$@" diff --git a/packaging/etc/engine-manage-domains/log4j.xml.in b/packaging/etc/engine-manage-domains/log4j.xml.in deleted file mode 100644 index 5819855..0000000 --- a/packaging/etc/engine-manage-domains/log4j.xml.in +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> - -<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> - - <!-- Log levels:DEBUG,INFO,WARN,ERROR,FATAL --> - <appender name="FILE" class="org.apache.log4j.RollingFileAppender"> - <param name="File" value="@ENGINE_LOG@/engine-manage-domains.log" /> - <param name="Append" value="true" /> - <param name="MaxFileSize" value="1500KB" /> - <param name="MaxBackupIndex" value="1" /> - - <layout class="org.apache.log4j.PatternLayout"> - <param name="ConversionPattern" value="%d %-5p [%c] %m%n" /> - <!-- <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n" /> --> - - </layout> - </appender> - - <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> - <param name="Target" value="System.out" /> - <layout class="org.apache.log4j.PatternLayout"> - <!-- The default pattern: Date Priority [Category] Message\n --> - <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" /> - </layout> - </appender> - - <category name="org.ovirt.engine.core.utils.kerberos"> - <priority value="INFO"/> - </category> - - <root> - <priority value="INFO" /> - <!-- appender-ref ref="CONSOLE" /--> - <appender-ref ref="FILE" /> - </root> - -</log4j:configuration> - diff --git a/packaging/man/man8/engine-manage-domains.8 b/packaging/man/man8/engine-manage-domains.8 index 1f82060..ceea6fa 100644 --- a/packaging/man/man8/engine-manage-domains.8 +++ b/packaging/man/man8/engine-manage-domains.8 @@ -82,6 +82,21 @@ A comma delimited list of LDAP servers to be set to the domain. .RE .PP +\fB\-\-log\-file\fR=\fILOG_FILE\fR +.RS 4 +Sets file to write logging into (if not set nothing is logged). +.RE +.PP +\fB\-\-log\-level\fR=\fILOG_LEVEL\fR +.RS 4 +Sets log level, one of DEBUG (default), INFO, WARN, ERROR (case insensitive). +.RE +.PP +\fB\-\-log4j\-config\fR=\fIXML_FILE\fR +.RS 4 +Sets log4j.xml file which logging configuration is loaded from. +.RE +.PP \fB\-\-provider\fR=\fIPROVIDER\fR .RS 4 The LDAP provider type of server used for the domain (case insensitive). -- To view, visit http://gerrit.ovirt.org/26823 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I0641dd6ce8984504c8c6e97df7b90e81ca5a8c4f Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.4 Gerrit-Owner: Martin Peřina <mper...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches