标签: tomcat-juli

jetty-maven-plugin和tomcat-jdbc 8.0.9+之间的类路径问题导致ServiceConfigurationError

我正在使用以下应用程序:

jetty-maven-plugin:9.3.2.v20150730
tomcat-jdbc:8.0.8(以tomcat-juli为依赖)

尝试将tomcat-jdbc jar升级到8.0.9+以上的任何版本后,我收到以下错误:

java.util.ServiceConfigurationError:org.apache.juli.logging.Log:Provider org.eclipse.jetty.apache.jsp.JuliLog不是子类型

查看这两个版本之间的更改日志,我发现了一些看起来很可疑的内容:

"向JULI LogFactory添加一个简单的基于ServiceLoader的发现机制,以便更容易地独立于Tomcat使用依赖于JULI的JULI和Tomcat组件(如Jasper).补丁由Greg Wilkins提供.(markt)"

此外,我发现Apache Tomcat JDBC连接池中引入了一个新的系统属性:

org.apache.tomcat.jdbc.pool.onlyAttemptCurrentClassLoader

"控制动态类的类加载,例如JDBC驱动程序,拦截器和验证器.如果设置为false,默认值,池将首先尝试使用当前加载器加载(即加载池类的类加载器)以及是否加载类尝试使用线程上下文加载器加载失败.如果您希望保持向后兼容Apache Tomcat 8.0.8及更早版本,并且只尝试当前加载器,则将此值设置为true.如果未设置,则默认值为false.

不幸的是,使用jetty启动插件:使用此属性运行并不能解决问题.

任何帮助,将不胜感激!谢谢!

堆栈跟踪和依赖树:

Caused by: 
java.util.ServiceConfigurationError: org.apache.juli.logging.Log: Provider org.eclipse.jetty.apache.jsp.JuliLog not a subtype
    at java.util.ServiceLoader.fail(ServiceLoader.java:239)
    at java.util.ServiceLoader.access$300(ServiceLoader.java:185)
    at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:376)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
    at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
    at org.apache.juli.logging.LogFactory.(LogFactory.java:78)
    at org.apache.juli.logging.LogFactory.(LogFactory.java:66)
    at org.apache.tomcat.jdbc.pool.DataSourceFactory.(DataSourceFactory.java:58)
    at local.ristretto.persistence.datasource.mail.MailDataSourceConfiguration.dataSource(MailDataSourceConfiguration.java:31)
    at local.ristretto.persistence.datasource.mail.MailDataSourceConfiguration$$EnhancerBySpringCGLIB$$497970dd.CGLIB$dataSource$0()
    at local.ristretto.persistence.datasource.mail.MailDataSourceConfiguration$$EnhancerBySpringCGLIB$$497970dd$$FastClassBySpringCGLIB$$2ba2dde9.invoke()
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:309)
    at local.ristretto.persistence.datasource.mail.MailDataSourceConfiguration$$EnhancerBySpringCGLIB$$497970dd.dataSource()
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1119)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1014)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    at …

java jetty maven tomcat-juli tomcat-jdbc

18
推荐指数
2
解决办法
1万
查看次数

使用log4j2.xml进行tomcat 7内部日志记录

我正在尝试配置tomcat 7内部日志记录log4j2.我已经跟踪了Tomcat 6中使用log4j2Logging服务器类中提供的答案.

我使用Tomcat 7.0.54,和log4j-core-2.1.jar,log4j-api-2.1.jar.我已经下载了额外的内容,并完成了以下所有步骤,但是当我启动tomcat时,我收到一个错误:

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
Run Code Online (Sandbox Code Playgroud)

这些是我执行的步骤:

  • log4j2.xml$CATALINA_BASE/lib
  • 下载tomcat-juli.jartomcat-juli-adapters.jar从"额外"
  • log4j-api-2.1.jar,log4j-core-2.1.jar,log4j-jul-2.1.jar,并tomcat-juli-adapters.jar从"额外"进入$CATALINA_HOME/lib.
  • 替换$CATALINA_HOME/bin/tomcat-juli.jartomcat-juli.jar从"临时演员".
  • 删除 $CATALINA_BASE/conf/logging.properties
  • 设置日志记录管理器以使用log4j2-julbridge(log4j-jul-2.1.jar)中的管理器.改变catalina.sh,以确保类路径包括bin/tomcat-juli.jar,lib/log4j-jul-2.1.jar,lib/log4j-api-2.1.jarlib/log4j-core-2.1.jar,以及用来启动Tomcat的命令包括-Djava.util.logging.manager = org.apache.logging.log4j.jul.LogManager`

我甚至尝试添加这个(LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_HOME/lib/log4j2.xml")catalina.sh …

logging tomcat log4j2 tomcat-juli

11
推荐指数
3
解决办法
1万
查看次数

Tomcat 8.5 org.apache.juli maxDays 属性不起作用

我在我的logging.properties中写了以下配置:

2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.AsyncFileHandler.maxDays=5
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
Run Code Online (Sandbox Code Playgroud)

日志完美写入日志文件,但 maxDays 属性不起作用。意味着我在更改日期最多 6 天后手动运行我的应用程序,但在达到 maxDays 后日志文件未删除。

https://tomcat.apache.org/tomcat-8.5-doc/logging.html上的 maxDays 属性说明:默认情况下,日志文件将永远保留在文件系统上。这可以使用 handlerName.maxDays 属性针对每个处理程序进行更改。如果该属性的指定值<=0,则日志文件将永远保留在文件系统上,否则它们将保留指定的最大天数。

您能帮忙验证一下应用的配置是否正确吗?或者我对 maxDays 属性用法的理解错误。

java tomcat-juli tomcat8.5

5
推荐指数
1
解决办法
6956
查看次数

为什么 Log4j2 JsonLayout + KeyValuePair 打印空的 logEvent 消息

TL;DR 如果我在 log4j2.xml 配置中使用带有嵌套 KeyValuePair 的 JsonLayout,则生成的日志消息为空。任何想法为什么?

很长的故事

我将 Tomcat 8.5.43 与以下与日志相关的 JAR 一起使用:

  • jackson-annotations-2.9.7.jar
  • 杰克逊核心2.9.7.jar
  • 杰克逊-数据绑定-2.9.7.jar
  • slf4j-api-1.7.25.jar
  • jcl-over-slf4j-1.7.25.jar
  • log4j-api-2.12.0.jar
  • log4j-core-2.12.0.jar
  • log4j-jul-2.12.0.jar
  • log4j-slf4j-impl-2.12.0.jar
  • tomcat-extras-juli-8.5.2.jar(作为 /bin 中的 tomcat-juli.jar)
  • tomcat-extras-juli-adapters-8.5.2.jar
  • log4j-web-2.12.0.jar(在 webapp 中)

和 log4j2.xml 配置:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
  <Console name="consoleappender" target="SYSTEM_OUT">
    <JsonLayout compact="true" eventEol="true" stacktraceAsString="true" locationInfo="true">
      <KeyValuePair key="foo" value="bar"/>
    </JsonLayout>
  </Console>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="consoleappender" />
    </Root>
  </Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)

在 setenv.sh 中,我将类路径设置为:

CLASSPATH="$JAVA_HOME/lib/tools.jar\
:$CATALINA_HOME/lib/log4j-api.jar\
:$CATALINA_HOME/lib/log4j-core.jar\
:$CATALINA_HOME/lib/log4j-jul.jar\
:$CATALINA_HOME/lib/jackson-annotations.jar\
:$CATALINA_HOME/lib/jackson-core.jar\
:$CATALINA_HOME/lib/jackson-databind.jar"
Run Code Online (Sandbox Code Playgroud)

并使用额外的 JVM 参数运行 Tomcat:

-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
-Dlog4j.configurationFile=file:log4j2.xml"
Run Code Online (Sandbox Code Playgroud)

所以每个 Tomcat、JULI、Apache …

logging tomcat slf4j log4j2 tomcat-juli

3
推荐指数
1
解决办法
1163
查看次数

标签 统计

tomcat-juli ×4

java ×2

log4j2 ×2

logging ×2

tomcat ×2

jetty ×1

maven ×1

slf4j ×1

tomcat-jdbc ×1

tomcat8.5 ×1