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/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/tools/ManageDomains.java
M 
backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/tools/ManageDomainsArguments.java
A 
backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/tools/ManageDomainsExecutor.java
A 
backend/manager/modules/builtin-extensions/src/main/resources/engine-manage-domains/log4j.xml
M 
backend/manager/modules/builtin-extensions/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, 157 insertions(+), 91 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/41/26641/1

diff --git a/Makefile b/Makefile
index 462db52..6fb4748 100644
--- a/Makefile
+++ b/Makefile
@@ -164,7 +164,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/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/tools/ManageDomains.java
 
b/backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/tools/ManageDomains.java
index 0cfb31a..6bf386e 100644
--- 
a/backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/tools/ManageDomains.java
+++ 
b/backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/tools/ManageDomains.java
@@ -14,7 +14,6 @@
 import static 
org.ovirt.engine.extensions.aaa.builtin.tools.ManageDomainsArguments.ARG_CONFIG_FILE;
 import static 
org.ovirt.engine.extensions.aaa.builtin.tools.ManageDomainsArguments.ARG_DOMAIN;
 import static 
org.ovirt.engine.extensions.aaa.builtin.tools.ManageDomainsArguments.ARG_FORCE;
-import static 
org.ovirt.engine.extensions.aaa.builtin.tools.ManageDomainsArguments.ARG_HELP;
 import static 
org.ovirt.engine.extensions.aaa.builtin.tools.ManageDomainsArguments.ARG_LDAP_SERVERS;
 import static 
org.ovirt.engine.extensions.aaa.builtin.tools.ManageDomainsArguments.ARG_PASSWORD_FILE;
 import static 
org.ovirt.engine.extensions.aaa.builtin.tools.ManageDomainsArguments.ARG_PROVIDER;
@@ -50,12 +49,8 @@
 import java.util.Scanner;
 import java.util.Set;
 
-import javax.xml.parsers.FactoryConfigurationError;
-
 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;
@@ -149,53 +144,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);
-                // it's existence is checked during the parser validation
-                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 +172,7 @@
         }
     }
 
-    private void createConfigurationProvider() throws ManageDomainsResult {
+    public void createConfigurationProvider() throws ManageDomainsResult {
         String engineConfigProperties = createTempPropFile();
         try {
             String engineConfigExecutable = 
utilityConfiguration.getEngineConfigExecutablePath();
@@ -282,7 +236,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/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/tools/ManageDomainsArguments.java
 
b/backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/tools/ManageDomainsArguments.java
index 865aa8d..5fbcceb 100644
--- 
a/backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/tools/ManageDomainsArguments.java
+++ 
b/backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/tools/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/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/tools/ManageDomainsExecutor.java
 
b/backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/tools/ManageDomainsExecutor.java
new file mode 100644
index 0000000..a83dd19
--- /dev/null
+++ 
b/backend/manager/modules/builtin-extensions/src/main/java/org/ovirt/engine/extensions/aaa/builtin/tools/ManageDomainsExecutor.java
@@ -0,0 +1,83 @@
+package org.ovirt.engine.extensions.aaa.builtin.tools;
+
+import static 
org.ovirt.engine.extensions.aaa.builtin.tools.ManageDomainsArguments.ARG_HELP;
+import static 
org.ovirt.engine.extensions.aaa.builtin.tools.ManageDomainsArguments.ARG_LOG4J_CONFIG;
+import static 
org.ovirt.engine.extensions.aaa.builtin.tools.ManageDomainsArguments.ARG_LOG_FILE;
+import static 
org.ovirt.engine.extensions.aaa.builtin.tools.ManageDomainsArguments.ARG_LOG_LEVEL;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.apache.log4j.Level;
+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) {
+        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);
+        }
+    }
+
+    public static void addAppender(String fileName, String levelName) {
+        if (fileName != null) {
+            Level level = Level.INFO;
+            if (levelName != null) {
+                level = Level.toLevel(levelName, null);
+                if (level == null) {
+                    throw new IllegalArgumentException(String.format("Invalid 
log level value: '%s'", levelName));
+                }
+            }
+            Log4jUtils.addFileAppender(fileName, level);
+        }
+    }
+
+    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));
+            addAppender(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/modules/builtin-extensions/src/main/resources/engine-manage-domains/log4j.xml
 
b/backend/manager/modules/builtin-extensions/src/main/resources/engine-manage-domains/log4j.xml
new file mode 100644
index 0000000..7b0580b
--- /dev/null
+++ 
b/backend/manager/modules/builtin-extensions/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/modules/builtin-extensions/src/main/resources/manage-domains-help.properties
 
b/backend/manager/modules/builtin-extensions/src/main/resources/manage-domains-help.properties
index ec41977..3352828 100644
--- 
a/backend/manager/modules/builtin-extensions/src/main/resources/manage-domains-help.properties
+++ 
b/backend/manager/modules/builtin-extensions/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 a75e0dc..9a78ae2 100644
--- a/ovirt-engine.spec.in
+++ b/ovirt-engine.spec.in
@@ -1014,7 +1014,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 735f5f3..9758ef1 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.extensions.builtin \
-       -class org.ovirt.engine.extensions.aaa.builtin.tools.ManageDomains \
+       -class 
org.ovirt.engine.extensions.aaa.builtin.tools.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/26641
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0641dd6ce8984504c8c6e97df7b90e81ca5a8c4f
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Martin Peřina <mper...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to