2012-07-03 37 views
12

Tôi đang sử dụng Tomcat 7.0.28, chạy dưới OpenJDK 1.7 trên Ubuntu và đang cố sửa đổi chuỗi định dạng được sử dụng bởi java.util.logging.SimpleFormatter. Theo Javadocs cho lớp đó, tôi có thể chỉ định thuộc tính java.util.logging.SimpleFormatter.format để thay đổi định dạng. Và thực sự, khi tôi chạy ứng dụng web của tôi trong Eclipse và thay đổi thuộc tính này trong tệp logging.properties của tôi, nó hoạt động.Sửa đổi thuộc tính định dạng java.util.logging.SimpleFormatter dưới Tomcat

Tuy nhiên, khi tôi triển khai ứng dụng cho Tomcat, thuộc tính này dường như không có bất kỳ ảnh hưởng nào. Tôi tin tưởng rằng tập tin thuộc tính của tôi đang được đọc một cách chính xác, như những thay đổi khác mà tôi làm cho nó làm thực sự có hiệu lực (Tôi đang đọc các thuộc tính trong từ một tập tin sử dụng

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

nơi tập tin được cấu hình thông qua một tham số trong tệp web.xml của tôi. Tôi đã thử đặt tệp trong WEB-INF/classes/logging.properties, không thay đổi hành vi.

Javadocs cho SimpleFormatter chỉ định rằng nếu cả tệp thuộc tính và thuộc tính hệ thống xác định chuỗi định dạng, thuộc tính hệ thống được ưu tiên. Tôi đã xác minh rằng thuộc tính hệ thống không được đặt là

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

trong phương thức ServletContextListener.contextInitialized.

Dưới đây là tập tin thuộc tính đăng nhập của tôi đầy đủ

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 

Tôi đã thử tất cả mọi thứ tôi có thể nghĩ đến, trong đó có sửa đổi logging.properties ở cả TOMCAT/conf và JRE_HOME/lib. Không có gì có vẻ tạo nên sự khác biệt.

+2

Đối mặt với cùng một vấn đề. Đây là một dự đoán: Các tính năng bất động sản của java.util.logging.SimpleFormatter.format' được giới thiệu trong Java 7. Tôi biết rằng Tomcat về cơ bản sử dụng một phiên bản sửa đổi hơi của 'java.util.logging'. Tôi tự hỏi nếu đó là lý do. – peterh

+0

Có nolan6000, tôi gặp vấn đề tương tự và nó liên quan đến phiên bản JDK mà tôi đang sử dụng. Cảm ơn. –

Trả lời

2

Không biết điều này có giải quyết được sự cố của bạn hay không nhưng có thể đáng để thử. Tôi đã nhìn thấy hành vi tương tự, mặc dù trong trường hợp của tôi, tôi đã làm các thiết lập đăng nhập lập trình thay vì sử dụng tài sản. Hóa ra giá trị thuộc tính cho java.util.logging.SimpleFormatter.format cần phải được thiết lập TRƯỚC KHI xây dựng (trong trường hợp của tôi) FileHandler. Tôi đã thiết lập nó sau khi xây dựng FileHandler, nhưng trước khi xây dựng SimpleFormatter. Tôi tự hỏi nếu, trong tập tin thuộc tính của bạn, xác định java.util.logging.SimpleFormatter.format TRƯỚC KHI xác định bất kỳ thuộc tính Handler nào sẽ giải quyết được vấn đề.

7

java.util.logging.SimpleFormatter.format thực sự là tài liệu có thể được đặt ở cả hai tệp logging.properties - điều này không hoạt động đối với tôi hoặc là đối số dòng lệnh (tùy chọn java).

Đối số dòng lệnh xuất hiện để hoạt động đối với tôi. Bởi vì biến $ JAVA_OPTS đang trải qua quá nhiều giả mạo và kết thúc bằng eval, đây là cách tôi giải quyết nó (trên Debian, java 1.7.0_07, apache-tomcat-7.0.30)

$ CATALINA_HOME/bin/catalina.sh (dòng 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

Bạn có thể được chứng kiến ​​this bug.

Lỗi được sửa từ phiên bản Tomcat 7.0.41 trở đi cũng như 6.0.38 trở đi.

8

Nhờ thông tin trong the bug report được chỉ ra bởi nolan6000 Tôi cuối cùng đã làm việc này với tomcat-juli.

Thay vì:

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

nó phải là:

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

Sử dụng một mẫu định dạng trong mặc định Tomcat 8 Juli logger nhu cầu này, bạn có thể đặt các tham số cho một toàn cầu $tomcat/conf/logging.properties hay webapp cụ thể $tomcat/webapps/myapp/WEB-INF/classes/logging.properties tệp.

Đây là tệp toàn cục của tôi, nơi cũng đã vô hiệu hoá tệp nhật ký quản lý web-người quản lý. Đường ghi là:
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

nó có vẻ làm việc cho tôi trong tập tin toàn cục, nhưng khi tôi chỉ định định dạng trong tệp ứng dụng web cụ thể, nó dường như không hoạt động – gaurav5430

+0

Cảm ơn @Whome! Nó làm việc cho tôi, nhưng chỉ với java.util.logging.SimpleFormatter. Với org.apache.juli.OneLineFormatter không :( – Gaucho

Các vấn đề liên quan