Итак, у вас есть исполняемое веб-приложение в JAR с Tomcat (обязательно прочитайте его сначала). Однако вначале есть эти раздражающие журналы Tomcat, независимые от журналов нашего приложения и не настраиваемые:
1
2
3
4
5
6
7
8
|
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
. Задумывались ли вы после прочтения предыдущей статьи, откуда я узнал, что работающий JAR Tomcat поддерживает параметр httpPort
и некоторые другие? Ну, я проверил источники, но проще просто попросить помощи:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
$ 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 выглядит многообещающе. Первая попытка:
1
2
|
$ java -jar target /standalone .jar -loggerName slf4j WARNING: issue configuring slf4j jul bridge, skip it |
Не хорошо. Беглый взгляд на исходный код еще раз, и получается, что библиотека SLF4J отсутствует. Поскольку этот параметр интерпретируется во время начальной загрузки Tomcat (перед развертыванием веб-приложения), slf4j-api.jar
внутри моего веб-приложения недостаточно, он должен быть доступен для загрузчика корневых классов (эквивалентно каталогу / lib в упакованном Tomcat). К счастью, плагин предоставляет параметр конфигурации <extraDependencies /> :
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
< 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 и … успехов!
1
2
3
4
|
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
. Исходя из моего опыта, кажется, что размещение logback.xml
где-то в вашей файловой системе лучше, чем размещение его в вашем бинарном файле, особенно с включенной функцией автоматического обновления:
1
2
3
|
< configuration scan = "true" scanPeriod = "5 seconds" > <!-- ... --> </ configuration > |
Поместите какой-нибудь резервный файл logback.xml
в корень вашего CLASSPATH на тот случай, если другой файл не был указан, как показано ниже, и вуаля:
1
2
|
$ java -jar standalone.jar -httpPort= 8081 -loggerName=slf4j \ -Dlogback.configurationFile=/etc/foo/logback.xml |
Наконец, чистая и согласованная регистрация, скорее всего, для одного файла.
Ссылка: принуждение Tomcat войти через SLF4J / Logback от нашего партнера по JCG Томаша Нуркевича в блоге на Java и соседях .