我有一个配置了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
...
我该怎么做才能让它工作?