2012-07-03 15 views
12

Używam Tomcat 7.0.28, działającego pod OpenJDK 1.7 na Ubuntu i próbuję zmodyfikować ciąg formatowania używany przez java.util.logging.SimpleFormatter. Zgodnie z Javadocs dla tej klasy, mogę określić właściwość java.util.logging.SimpleFormatter.format, aby zmienić format. I rzeczywiście, po uruchomieniu mojej aplikacji internetowej w Eclipse i zmianie tej właściwości w moim pliku logging.properties, działa.Modyfikowanie właściwości formatu java.util.logging.SimpleFormatter pod Tomcat

Jednak po wdrożeniu aplikacji na serwerze Tomcat ta właściwość nie ma żadnego efektu. Jestem przekonany, że mój plik właściwości jest poprawnie odczytać, jak inne zmiany, które sprawiają, że do niej rzeczywiście skuteczne (Czytam właściwości z pliku przy użyciu

LogManager.getLogManager().readConfiguration(new FileInputStream(file)) 

gdzie plik jest skonfigurowany za pomocą parametru w moim pliku web.xml. Próbowałem umieścić plik w WEB-INF/classes/logging.properties, bez żadnych zmian w zachowaniu:

Javadocs dla SimpleFormatter określają, czy zarówno plik właściwości, jak i właściwość systemowa określić ciąg formatowania, właściwość systemu ma pierwszeństwo. Zweryfikowałem, że właściwość systemowa nie jest ustawiona:

context.log ("Formatting system property is " + System.getProperty("java.util.logging.SimpleFormatter.format")); 

w metodzie ServletContextListener.contextInitialized.

Oto złożyć moje właściwości rejestrowania w pełni

handlers=java.util.logging.ConsoleHandler 

# Default logging level for root logger 
.level=FINE 

# Set the level for the ConsoleHandler 
java.util.logging.ConsoleHandler.level=FINE 
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter 
java.util.logging.SimpleFormatter.format=[%1$tF %1$tr] %3$s %4$s: %5$s %n 

Próbowałem wszystkiego można myślę, w tym modyfikacji logging.properties zarówno w Tomcat/conf i katalogu JRE_HOME/lib. Nic nie robi żadnej różnicy.

+2

obliczu tego samego problemu. Oto domysły: Właściwość właściwości 'java.util.logging.SimpleFormatter.format' została wprowadzona w języku Java 7. Wiem, że Tomcat w zasadzie używa nieco zmodyfikowanej wersji' java.util.logging'. Zastanawiam się, czy to jest powód. – peterh

+0

Tak, nolan6000, miałem ten sam problem i było to związane z wersją JDK, której używałem. Dzięki. –

Odpowiedz

2

Nie wiem, czy to rozwiąże Twój problem, ale warto spróbować. Widziałem to samo zachowanie, chociaż w moim przypadku programowo wykonywałam rejestrowanie zamiast używania właściwości. Okazuje się, że wartość właściwości java.util.logging.SimpleFormatter.format musi być ustawiona PRZED skonstruowaniem (w moim przypadku) FileHandler. Ustawiałem to po zbudowaniu FileHandler, ale przed skonstruowaniem SimpleFormatter. Zastanawiam się, czy w pliku właściwości zdefiniowanie java.util.logging.SimpleFormatter.format PRZED zdefiniowaniem dowolnej właściwości programu Handler rozwiąże problem.

7

java.util.logging.SimpleFormatter.format jest rzeczywiście udokumentowany, aby można go było ustawić w pliku logging.properties - który nie działa dla mnie - albo jako argument wiersza poleceń (opcja java).

Wygląda na to, że argument wiersza poleceń działa. Ponieważ zmienna $ JAVA_OPTS przeżywa tyle manipulacją i kończy się w eval, to w jaki sposób mogę rozwiązać go (na Debianie, Java 1.7.0_07, apache-tomcat-7.0.30)

$ CATALINA_HOME/bin/catalina.sh (linia 230):

JAVA_OPTS="$JAVA_OPTS \"-Djava.util.logging.SimpleFormatter.format=%1\\\$tY-%1\\\$tm-%1\\\$td %1\\\$tH:%1\\\$tM:%1\\\$tS.%1\\\$tL %4\\\$s %3\\\$s %5\\\$s%6\\\$s%n\"" 
7

Możesz być świadkiem this bug.

Błąd jest usuwany z Tomcat w wersji 7.0.41 lub późniejszej, a także od wersji 6.0.38.

8

Dzięki informacjom w the bug report wskazanym przez nolan6000 w końcu udało mi się to zrobić z tomcat-juli.

Zamiast:

java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n 

musi być:

1catalina.java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n 
2

Korzystanie wzór formater zalega Tomcat 8 JULI Rejestrator potrzebuje tego, można umieścić argumentów do globalnej $tomcat/conf/logging.properties lub webapp konkretnego $tomcat/webapps/myapp/WEB-INF/classes/logging.properties plik.

To jest mój globalny plik, w którym również wyłączyłem pliki rejestrowania menedżera-webapp. Rejestrowanie jest linia:
2015-09-23 17:32:11 INFO org.apache.catalina.startup.Catalina Server startup in 1028 ms

#handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler 
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler 

.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler 

# formatter attributes = date, source, logger, level, message, thrown 
java.util.logging.SimpleFormatter.format = %1$tF %1$tT %4$s %3$s %5$s%6$s%n 

1catalina.org.apache.juli.AsyncFileHandler.level = FINE 
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina. 
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8 
1catalina.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter 
#1catalina.org.apache.juli.AsyncFileHandler.bufferSize = 2048 

2localhost.org.apache.juli.AsyncFileHandler.level = FINE 
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost. 
2localhost.org.apache.juli.AsyncFileHandler.encoding = UTF-8 
2localhost.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter 
#2localhost.org.apache.juli.AsyncFileHandler.bufferSize = 2048 

#3manager.org.apache.juli.AsyncFileHandler.level = FINE 
#3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 
#3manager.org.apache.juli.AsyncFileHandler.prefix = manager. 

#4host-manager.org.apache.juli.AsyncFileHandler.level = FINE 
#4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 
#4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager. 

java.util.logging.ConsoleHandler.level = FINE 
#java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 


############################################################ 
# Facility specific properties. 
# Provides extra control for each logger. 
############################################################ 

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO 
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandler 

#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO 
#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandler 

#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO 
#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.AsyncFileHandler 

# For example, set the org.apache.catalina.util.LifecycleBase logger to log 
# each component that extends LifecycleBase changing state: 
#org.apache.catalina.util.LifecycleBase.level = FINE 

# To see debug messages in TldLocationsCache, uncomment the following lines 
#org.apache.jasper.compiler.TldLocationsCache.level = FINE 
#org.apache.jasper.servlet.TldScanner.level=FINE 
+0

wydaje się działać dla mnie w pliku globalnym, ale gdy określam format w pliku specyficznym dla aplikacji internetowej, nie wydaje się działać – gaurav5430

+0

Dzięki @Whome! Działa to dla mnie, ale tylko z java.util.logging.SimpleFormatter. Z org.apache.juli.OneLineFormatter nie :( – Gaucho

Powiązane problemy