0

我有一个配置了tomcat-slf4j-logback的 tomcat 实例。

我想使用com.papertrailapp.logback.Syslog4jAppender这样我就可以使用 unix syslog socket 登录到 systemd-journald /dev/log。(不幸的是,内置的 logback SyslogAppender不支持这个。)

我进行了配置tomcat-slf4j-logback,并且按预期工作。

然后我将 logback-syslog4j jar 放入/bin

$ ls /opt/pigeon/bin/logback-syslog4j-1.0.0.jar /opt/pigeon/bin/syslog4j-0.9.30.jar -l
-rw-r--r-- 1 root root   4133 Feb 22 17:37 /opt/pigeon/bin/logback-syslog4j-1.0.0.jar
-rw-r--r-- 1 root root 156578 Feb 22 17:37 /opt/pigeon/bin/syslog4j-0.9.30.jar

并将这些罐子添加到类路径中bin/setenv.sh

JAVA_OPTS="$JAVA_OPTS -Djuli-logback.configurationFile=$CATALINA_HOME/conf/logback.xml" 
CLASSPATH="${CATALINA_HOME}/bin/logback-syslog4j-1.0.0.jar:${CATALINA_HOME}/bin/syslog4j-0.9.30.jar"

并在以下位置配置了附加程序conf/logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="CONSOLE" class="org.apache.juli.logging.ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>CONSOLE %-5level [%logger{20}]: %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="SYSLOG" class="com.papertrailapp.logback.Syslog4jAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>SYSLOG %-5level [%logger{20}]: %m%n%xEx</pattern>
        </layout>
        
        <syslogConfig class="org.productivity.java.syslog4j.impl.unix.socket.UnixSocketSyslogConfig">
            <path>/dev/log</path>
        </syslogConfig>
    </appender>


    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="SYSLOG" />
    </root>

</configuration>

它无法加载附加程序:

$ /opt/pigeon/bin/catalina.sh run
Using CATALINA_BASE:   /opt/pigeon
Using CATALINA_HOME:   /opt/pigeon
Using CATALINA_TMPDIR: /opt/pigeon/temp
Using JRE_HOME:        /
Using CLASSPATH:       /opt/pigeon/bin/logback-syslog4j-1.0.0.jar:/opt/pigeon/bin/syslog4j-0.9.30.jar:/opt/pigeon/bin/bootstrap.jar:/opt/pigeon/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
17:38:23,956 |-INFO in org.apache.juli.logging.ch.qos.logback.classic.LoggerContext[default] - Found resource [/opt/pigeon/conf/logback.xml] at [file:/opt/pigeon/conf/logback.xml]
17:38:24,106 |-INFO in org.apache.juli.logging.ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
17:38:24,106 |-INFO in org.apache.juli.logging.ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [org.apache.juli.logging.ch.qos.logback.core.ConsoleAppender]
17:38:24,114 |-INFO in org.apache.juli.logging.ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [CONSOLE]
17:38:24,121 |-INFO in org.apache.juli.logging.ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [org.apache.juli.logging.ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
17:38:24,157 |-INFO in org.apache.juli.logging.ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [com.papertrailapp.logback.Syslog4jAppender]
17:38:24,161 |-ERROR in org.apache.juli.logging.ch.qos.logback.core.joran.action.AppenderAction - Could not create an Appender of type [com.papertrailapp.logback.Syslog4jAppender]. org.apache.juli.logging.ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type com.papertrailapp.logback.Syslog4jAppender
    at org.apache.juli.logging.ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type com.papertrailapp.logback.Syslog4jAppender
    at  at org.apache.juli.logging.ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:69)
    at  at org.apache.juli.logging.ch.qos.logback.core.util.OptionHelper.instantiateByClassName(OptionHelper.java:45)
    at  at org.apache.juli.logging.ch.qos.logback.core.util.OptionHelper.instantiateByClassName(OptionHelper.java:34)
    at  at org.apache.juli.logging.ch.qos.logback.core.joran.action.AppenderAction.begin(AppenderAction.java:52)
    at  at org.apache.juli.logging.ch.qos.logback.core.joran.spi.Interpreter.callBeginAction(Interpreter.java:269)
    at  at org.apache.juli.logging.ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:145)
    at  at org.apache.juli.logging.ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:128)
    at  at org.apache.juli.logging.ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:50)
    at  at org.apache.juli.logging.ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:165)
    at  at org.apache.juli.logging.ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:152)
    at  at org.apache.juli.logging.ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110)
    at  at org.apache.juli.logging.ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)
    at  at org.apache.juli.logging.ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
    at  at org.apache.juli.logging.ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)
    at  at org.apache.juli.logging.org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)
    at  at org.apache.juli.logging.org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
    at  at org.apache.juli.logging.org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
    at  at org.apache.juli.logging.org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
    at  at org.apache.juli.logging.org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)
    at  at org.apache.juli.logging.org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
    at  at org.apache.juli.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155)
    at  at org.apache.juli.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
    at  at org.apache.juli.logging.LogFactory.getLog(LogFactory.java:273)
    at  at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:50)
Caused by: java.lang.NoClassDefFoundError: ch/qos/logback/core/AppenderBase
    at  at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at  at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
    at  at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
    at  at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
    at  at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
    at  at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
    at  at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
    at  at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at  at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at  at org.apache.juli.logging.ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:56)
    at  ... 23 common frames omitted
Caused by: java.lang.ClassNotFoundException: ch.qos.logback.core.AppenderBase
    at  at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at  at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at  at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at  ... 33 common frames omitted
17:38:24,162 |-ERROR in org.apache.juli.logging.ch.qos.logback.core.joran.spi.Interpreter@23:80 - ActionException in Action for tag [appender] org.apache.juli.logging.ch.qos.logback.core.joran.spi.ActionException: org.apache.juli.logging.ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type com.papertrailapp.logback.Syslog4jAppender
    at org.apache.juli.logging.ch.qos.logback.core.joran.spi.ActionException: org.apache.juli.logging.ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type com.papertrailapp.logback.Syslog4jAppender
    at  at org.apache.juli.logging.ch.qos.logback.core.joran.action.AppenderAction.begin(AppenderAction.java:76)
    at  at org.apache.juli.logging.ch.qos.logback.core.joran.spi.Interpreter.callBeginAction(Interpreter.java:269)
    at  at org.apache.juli.logging.ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:145)
    at  at org.apache.juli.logging.ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:128)
    at  at org.apache.juli.logging.ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:50)
    at  at org.apache.juli.logging.ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:165)
    at  at org.apache.juli.logging.ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:152)
    at  at org.apache.juli.logging.ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110)
    at  at org.apache.juli.logging.ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)
    at  at org.apache.juli.logging.ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
    at  at org.apache.juli.logging.ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)
    at  at org.apache.juli.logging.org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)
    at  at org.apache.juli.logging.org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
    at  at org.apache.juli.logging.org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
    at  at org.apache.juli.logging.org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
    at  at org.apache.juli.logging.org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)
    at  at org.apache.juli.logging.org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
    at  at org.apache.juli.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155)
    at  at org.apache.juli.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
    at  at org.apache.juli.logging.LogFactory.getLog(LogFactory.java:273)
    at  at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:50)
Caused by: org.apache.juli.logging.ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type com.papertrailapp.logback.Syslog4jAppender
    at  at org.apache.juli.logging.ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:69)
    at  at org.apache.juli.logging.ch.qos.logback.core.util.OptionHelper.instantiateByClassName(OptionHelper.java:45)
    at  at org.apache.juli.logging.ch.qos.logback.core.util.OptionHelper.instantiateByClassName(OptionHelper.java:34)
    at  at org.apache.juli.logging.ch.qos.logback.core.joran.action.AppenderAction.begin(AppenderAction.java:52)
    at  ... 20 common frames omitted
Caused by: java.lang.NoClassDefFoundError: ch/qos/logback/core/AppenderBase
    at  at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at  at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
    at  at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
    at  at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
    at  at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
    at  at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
    at  at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
    at  at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at  at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at  at org.apache.juli.logging.ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:56)
    at  ... 23 common frames omitted
Caused by: java.lang.ClassNotFoundException: ch.qos.logback.core.AppenderBase
    at  at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at  at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at  at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at  ... 33 common frames omitted
17:38:24,162 |-INFO in org.apache.juli.logging.ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to INFO
17:38:24,162 |-INFO in org.apache.juli.logging.ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [CONSOLE] to Logger[ROOT]
17:38:24,162 |-ERROR in org.apache.juli.logging.ch.qos.logback.core.joran.action.AppenderRefAction - Could not find an appender named [SYSLOG]. Did you define it below instead of above in the configuration file?
17:38:24,162 |-ERROR in org.apache.juli.logging.ch.qos.logback.core.joran.action.AppenderRefAction - See http://logback.qos.ch/codes.html#appender_order for more details.
17:38:24,162 |-INFO in org.apache.juli.logging.ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
17:38:24,163 |-INFO in org.apache.juli.logging.ch.qos.logback.classic.joran.JoranConfigurator@a7e666 - Registering current configuration as safe fallback point

...

我该怎么做才能让它工作?

4

0 回答 0