因此,您將JAR可執行Web應用程序與Tomcat捆綁在一起 (請務必先閱讀其中一個)。 但是,開頭有這些煩人的Tomcat日志,與我們的應用程序日志無關,并且不可自定義:
Nov 24, 2012 11:44:02 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Nov 24, 2012 11:44:02 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Tomcat
Nov 24, 2012 11:44:02 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.30
Nov 24, 2012 11:44:05 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
我真的很想讓他們失望,或者甚至最好將它們保存在某個地方,因為它們有時會顯示出重大的失敗。 但是我絕對不想有單獨的java.util.logging
配置。 在閱讀了上一篇文章之后,您是否想知道我如何知道可運行的Tomcat JAR支持httpPort
參數和其他幾個參數? 好吧,我檢查了資源,但只尋求幫助就更簡單了:
$ java -jar target/standalone.jar -help
usage: java -jar [path to your exec war jar]
-ajpPort <ajpPort> ajp port to use
-clientAuth enable client authentication for
https
-D <arg> key=value
-extractDirectory <extractDirectory> path to extract war content,
default value: .extract
-h,--help help
-httpPort <httpPort> http port to use
-httpProtocol <httpProtocol> http protocol to use: HTTP/1.1 or
org.apache.coyote.http11.Http11Nio
Protocol
-httpsPort <httpsPort> https port to use
-keyAlias <keyAlias> alias from keystore for ssl
-loggerName <loggerName> logger to use: slf4j to use slf4j
bridge on top of jul
-obfuscate <password> obfuscate the password and exit
-resetExtract clean previous extract directory
-serverXmlPath <serverXmlPath> server.xml to use, optional
-uriEncoding <uriEncoding> connector uriEncoding default
ISO-8859-1
-X,--debug debug
-loggerName參數看起來很有希望。 第一次嘗試:
$ java -jar target/standalone.jar -loggerName slf4j
WARNING: issue configuring slf4j jul bridge, skip it
不好。 再次快速查看源代碼,結果發現缺少SLF4J庫。 由于此參數是在Tomcat引導期間(在部署Web應用程序之前)解釋的, slf4j-api.jar
我的Web應用程序內的slf4j-api.jar
不夠,它必須可用于根類加載器(等效于打包的Tomcat中的/ lib目錄)。 幸運的是,插件公開了<extraDependencies />配置參數 :
<configuration><path>/standalone</path><enableNaming>false</enableNaming><finalName>standalone.jar</finalName><charset>utf-8</charset><extraDependencies><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.2</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jul-to-slf4j</artifactId><version>1.7.2</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.0.7</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.0.7</version></dependency></extraDependencies>
</configuration>
運行Tomcat并成功!
00:01:27.110 [main] INFO o.a.coyote.http11.Http11Protocol - Initializing ProtocolHandler ["http-bio-8080"]
00:01:27.127 [main] INFO o.a.catalina.core.StandardService - Starting service Tomcat
00:01:27.128 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet Engine: Apache Tomcat/7.0.33
00:01:29.645 [main] INFO o.a.coyote.http11.Http11Protocol - Starting ProtocolHandler ["http-bio-8080"]
好吧,不完全是。 如果您每天使用Logback ,則您會熟悉默認的控制臺日志記錄模式。 我們沒有選擇任何logback.xml
。 根據我的經驗,似乎將logback.xml
外部放置在文件系統中的某個位置優于將其放置在二進制文件中,尤其是在啟用自動刷新功能的情況下:
<configuration scan="true" scanPeriod="5 seconds">
<!-- ... -->
</configuration>
在未指定其他文件的情況下,將一些fallback logback.xml
文件放在CLASSPATH的根目錄中,如下所示:
$ java -jar standalone.jar -httpPort=8081 -loggerName=slf4j \
-Dlogback.configurationFile=/etc/foo/logback.xml
最后,干凈且一致的日志記錄,最有可能記錄到單個文件。
參考: 迫使Tomcat從Java和社區博客上的JCG合作伙伴 Tomasz Nurkiewicz 通過SLF4J / Logback登錄 。
翻譯自: https://www.javacodegeeks.com/2012/11/forcing-tomcat-to-log-through-slf4jlogback.html