如何在独立的JBoss中配置自定义日志记录

我正在尝试为在Docker映像中运行JBoss EAP 7.2的应用程序设置自定义日志配置(在外部文件中),但我无法使其工作。

我有一个使用外部log4j2.xml文件进行日志记录配置的应用程序。该文件的路径在属性-Dlog4j.configurationFile中设置。

该应用程序在JBoss EAP 7.2中运行,并且当我在本地(Windows)中运行该日志记录配置时,它已正确定义,可以在eclipse中运行它(在服务器中设置属性->启动配置->程序参数)或直接执行standalone.bat(在standalone.conf.bat文件中设置属性)。

当我尝试在Docker映像中执行应用程序时就会出现问题(并且我想在Linux OS中也会发生同样的情况)。我评论了日志记录扩展名和子系统,并且应用程序正确启动,但是没有日志。 我在WildFly中尝试了完全相同的方法,并且在Windows和Docker映像中都可以正常工作。

考虑到JBoss和WildFly之间的共同点,我尽最大可能简化了JBoss的standalone.conf并使它类似于WildFly。

我已经评论了原始standalone.conf的这一部分:

. $JBOSS_HOME/bin/launch/files.sh

JBOSS_MODULES_JAR=$(getfiles jboss-modules)
JBOSS_LOGMANAGER_JAR=$(getfiles org/jboss/logmanager/main/jboss-logmanager)
WILDFLY_COMMON_JAR=$(getfiles org/wildfly/common/main/wildfly-common)

# for newer WF,these modules have changed names. We try the old ones first
# then the new ones for compatability

JBOSS_JSON_JAR=$(getfiles org/wildfly/javax/json/main/javax.json-1)
if [ $? -ne "0" ]; then
    JBOSS_JSON_JAR=$(getfiles org/glassfish/javax/json/main/javax.json-1)
fi

if [ $? -ne "0" ]; then
    echo Unable to locate a javax.json JAR,aborting.
    exit 1
fi

JBOSS_JSON_API_JAR=$(getfiles org/wildfly/javax/json/main/javax.json-api)
if [ $? -ne "0" ]; then
    JBOSS_JSON_API_JAR=$(getfiles javax/json/api/main/javax.json-api)
fi

if [ $? -ne "0" ]; then
    echo Unable to locate a javax.json API JAR,aborting.
    exit 1
fi

AB_JOLOKIA_PORT=$((${AB_JOLOKIA_PORT:-8778} + ${PORT_OFFSET:-0}))
export AB_JOLOKIA_PORT

# add jolokia options
JAVA_OPTS="${JAVA_OPTS} $(/opt/jolokia/jolokia-opts)"

JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:${JBOSS_MODULES_JAR}:${JBOSS_LOGMANAGER_JAR}:${JBOSS_JSON_JAR}:${JBOSS_JSON_API_JAR}:${WILDFLY_COMMON_JAR} -Djava.util.logging.manager=org.jboss.logmanager.LogManager"

source /usr/local/dynamic-resources/dynamic_resources.sh
export GC_MAX_MetaSPACE_SIZE=${GC_MAX_MetaSPACE_SIZE:-256}
JAVA_OPTS="$(adjust_java_options ${JAVA_OPTS})"

# Make sure that we use /dev/urandom (CLOUD-422)
JAVA_OPTS="${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom"

# White list packages for use in ObjectMessages: CLOUD-703
if [ -n "$MQ_SERIALIZABLE_PACKAGES" ]; then
  JAVA_OPTS="${JAVA_OPTS} -Dorg.apache.activemq.SERIALIZABLE_PACKAGES=${MQ_SERIALIZABLE_PACKAGES}"
fi

# Append to JAVA_OPTS. Necessary to prevent some values being omitted if JAVA_OPTS is defined directly
JAVA_OPTS="$JAVA_OPTS $JAVA_OPTS_APPEND"
# add hawkular options
if [ -n "${AB_HAWKULAR_REST_URL:+x}" ]; then
  # we need to configure java logging for hawkular
  AB_HAWKULAR_AGENT_OPTS="$(source /opt/hawkular/hawkular-opts && get_hawkular_opts) -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
  JAVA_OPTS="${JAVA_OPTS} ${AB_HAWKULAR_AGENT_OPTS}"
fi

# add prometheus options
JAVA_OPTS="${JAVA_OPTS} $(source ${JBOSS_CONTAINER_PROMETHEUS_MODULE}/prometheus-opts && get_prometheus_opts)"

但是失败了:

Could not load Logmanager "org.jboss.logmanager.LogManager"
java.lang.ClassnotFoundException: org.jboss.logmanager.LogManager
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at org.jboss.modules.JDKSpecific.getSystemClass(JDKSpecific.java:180)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:395)
        at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
        at java.util.logging.LogManager$1.run(LogManager.java:195)
        at java.util.logging.LogManager$1.run(LogManager.java:181)
        at java.security.accessController.doPrivileged(Native Method)
        at java.util.logging.LogManager.<clinit>(LogManager.java:181)
        at org.jboss.modules.Main.main(Main.java:523)
WARNING: Failed to load the specified log manager class org.jboss.logmanager.LogManager
Exception in thread "main" java.lang.NoClassDefFoundError: org/jboss/logmanager/Level
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at org.jboss.modules.Module.run(Module.java:340)
        at org.jboss.modules.Module.run(Module.java:320)
        at org.jboss.modules.Main.main(Main.java:593)
Caused by: java.lang.ClassnotFoundException: org.jboss.logmanager.Level
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at org.jboss.modules.JDKSpecific.getSystemClass(JDKSpecific.java:180)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:395)
        at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
        ... 5 more

的确,在原始的standalone.conf中,有一些对“ LogManager”的引用,如果我还原它们,应用程序将再次启动,但没有日志。因此,这使我认为技巧与之相关。

我尝试了其他替代方法,例如在standalone.xml中设置<use-deployment-logging-config value =" true "/>并将log4j2.xml文件定位到应用程序的WAR中,并且它可以工作,但是我需要将该文件移出应用程序。

我将不胜感激任何想法或建议。

zhyl1109 回答:如何在独立的JBoss中配置自定义日志记录

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3123148.html

大家都在问