tomcat 로그 java.util.logging.Logger 사용(2)
4192 단어 logging
# default file output is in user's home directory.
java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
# Limit the message that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level = WARNING
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
1:출력 로 그 를 다시 쓰 는 형식
java.util.logging.ConsoleHanlder.formatter 속성 을 설정 해 야 합 니 다.
이 문 제 는 자바 SE 프로그램 에서 문제 가 없습니다.자바 프로그램 은 이 설정 을 통 해 사용자 정의 Formatter 를 찾 을 수 있 습 니 다.
하지만 Tomcat 등 웹 프로젝트 에 넣 으 면문제 가 생 겼 다
Console Handler 의 소스 코드 를 보 겠 습 니 다.
public class ConsoleHandler extends StreamHandler {
// Private method to configure a ConsoleHandler from LogManager
// properties and/or default values as specified in the class
// javadoc.
private void configure() {
LogManager manager = LogManager.getLogManager();
String cname = getClass().getName();
setLevel(manager.getLevelProperty(cname +".level", Level.INFO));
setFilter(manager.getFilterProperty(cname +".filter", null));
setFormatter(manager.getFormatterProperty(cname +".formatter", new SimpleFormatter()));
try {
setEncoding(manager.getStringProperty(cname +".encoding", null));
} catch (Exception ex) {
try {
setEncoding(null);
} catch (Exception ex2) {
// doing a setEncoding with null should always work.
// assert false;
}
}
}
그 중 한 줄 의 코드 가 있 습 니 다.설정 파일 에 있 는'formatter'를 설정 하 는 데 사 용 됩 니 다.setFormatter(manager.getFormatterProperty(cname +".formatter", new SimpleFormatter()));
추적 하여 발견:ClassLoader.getSystem ClassLoader 는 지정 한 class 에 반사 할 수 없습니다. Formatter getFormatterProperty(String name, Formatter defaultValue) {
String val = getProperty(name);
try {
if (val != null) {
Class clz = ClassLoader.getSystemClassLoader().loadClass(val);
return (Formatter) clz.newInstance();
}
} catch (Exception ex) {
// We got one of a variety of exceptions in creating the
// class or creating an instance.
// Drop through.
}
Tomcat 관련 문서 계속 찾 아 보기
http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html
System — This class loader is normally initialized from the contents of the CLASSPATH environment variable. All such classes are visible to both Tomcat internal classes, and to web applications. However, the standard Tomcat startup scripts ($CATALINA_HOME/bin/catalina.sh or %CATALINA_HOME%\bin\catalina.bat) totally ignore the contents of the CLASSPATH environment variable itself, and instead build the System class loader from the following repositories:
$CATALINA_HOME/bin/bootstrap.jar — Contains the main() method that is used to initialize the Tomcat server, and the class loader implementation classes it depends on.
$CATALINA_BASE/bin/tomcat-juli.jar or $CATALINA_HOME/bin/tomcat-juli.jar — Logging implementation classes. These include enhancement classes to java.util.logging API, known as Tomcat JULI, and a package-renamed copy of Apache Commons Logging library used internally by Tomcat. See logging documentation for more details.
If tomcat-juli.jar is present in $CATALINA_BASE/bin, it is used instead of the one in $CATALINA_HOME/bin. It is useful in certain logging configurations
$CATALINA_HOME/bin/commons-daemon.jar — The classes from Apache Commons Daemon project. This JAR file is not present in the CLASSPATH built by catalina.bat|.sh scripts, but is referenced from the manifest file of bootstrap.jar.
SystemClassLoader 를 발견 하면 Tomcat-7.0.34\bin 디 렉 터 리 에 있 는 세 개의 Jar 만 불 러 올 수 있 습 니 다.
그 러 니까 JDK 가 가 져 온 로 그 를 계속 사용 해 야 한다 면 Formater 등 을 다시 쓸 수 없다 는 거 야...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
CodeSite Live Viewer를 좀 더 사용해 보았습니다.로 무려 월간 업 할 수 있는 화상 용량을 넘어 버렸다 이 기사는 마지막 부분의 연속입니다. 토호호... Checkpoint 로그로 CheckPoint를 설정할 수도 있고 Live Viewer에서도 구성 가능 Liv...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.