Tomcat 작 동 방식 (10)
15290 단어 tomcat
tomcat 의 로그 기록 기 는 org. apache. catalina. Logger 인 터 페 이 스 를 실현 해 야 합 니 다.
public interface Logger {
public static final int FATAL = Integer.MIN_VALUE;
public static final int ERROR = 1;
public static final int WARNING = 2;
public static final int INFORMATION = 3;
public static final int DEBUG = 4;
public Container getContainer();
public void setContainer(Container container);
public String getInfo();
public int getVerbosity();
public void setVerbosity(int verbosity);
public void addPropertyChangeListener(PropertyChangeListener listener);
public void log(String message);
public void log(Exception exception, String msg);
public void log(String message, Throwable throwable);
public void log(String message, int verbosity);
public void log(String message, Throwable throwable, int verbosity);
public void removePropertyChangeListener(PropertyChangeListener listener);
}
일반적으로 로그 단계 verbosity 가 Logger 가 설정 한 단계 보다 클 때 message 는 기록 되 며, 그렇지 않 으 면 무 시 됩 니 다.
Logger 인 터 페 이 스 는 모두 다섯 가지 로그 단 계 를 정의 하 였 는데, 각각 FATAL 이다. ERROR WARNING INFORMATION DEBUG
Tomcat 은 SystemOutLogger, SystemErrLogger, FileLogger 등 세 가지 유형의 로그 기록 기 를 제공 합 니 다. org. apache. catalina. logger 가방 에서 모두 org. apache. catalina. logger. LoggerBase 류 를 계승 합 니 다.
LoggerBase 클래스 는 org. apache. catalina. Logger 인 터 페 이 스 를 실 현 했 고 tomcat 5 에 서 는 Lifecycle 인터페이스 도 실현 했다.
LoggerBase 클래스 는 추상 클래스 로 Logger 인터페이스 에서 abstract void log (String msg) 를 제외 한 모든 방법 이 실 현 됩 니 다. 모든 다른 재 부팅 방법 은 최종 적 으로 이 방법 (templet 모드) 을 호출 합 니 다. set Verbosity () 방법 으로 로그 단 계 를 설정 할 수 있 습 니 다.
구체 적 인 로그 클래스 는 모두 비교적 간단 합 니 다. 다음은 SystemOutLogger 클래스 의 실현 입 니 다.
public class SystemOutLogger
extends LoggerBase {
protected static final String info =
"org.apache.catalina.logger.SystemOutLogger/1.0";
public void log(String msg) {
System.out.println(msg);
}
}
SystemErrLogger 클래스
public class SystemErrLogger
extends LoggerBase {
protected static final String info =
"org.apache.catalina.logger.SystemErrLogger/1.0";
public void log(String msg) {
System.err.println(msg);
}
}
FileLogger 클래스 는 조금 복잡 합 니 다. servlet 용기 에서 받 은 메 시 지 를 파일 에 기록 합 니 다. (tomcat 4 에서 FileLogger 클래스 는 Lifecycle 인 터 페 이 스 를 실현 합 니 다)
public class FileLogger
extends LoggerBase
implements Lifecycle {
protected LifecycleSupport lifecycle = new LifecycleSupport(this);
private StringManager sm =
StringManager.getManager(Constants.Package);
private boolean started = false;
private String suffix = ".log";
private boolean timestamp = false;
private PrintWriter writer = null;
public void log(String msg) {
// Construct the timestamp we will use, if requested
Timestamp ts = new Timestamp(System.currentTimeMillis());
String tsString = ts.toString().substring(0, 19);
String tsDate = tsString.substring(0, 10);
// If the date has changed, switch log files
if (!date.equals(tsDate)) {
synchronized (this) {
if (!date.equals(tsDate)) {
close();
date = tsDate;
open();
}
}
}
// Log this message, timestamped if necessary
if (writer != null) {
if (timestamp) {
writer.println(tsString + " " + msg);
} else {
writer.println(msg);
}
}
}
private void close() {
if (writer == null)
return;
writer.flush();
writer.close();
writer = null;
date = "";
}
/**
* Open the new log file for the date specified by <code>date</code>.
*/
private void open() {
// Create the directory if necessary
File dir = new File(directory);
if (!dir.isAbsolute())
dir = new File(System.getProperty("catalina.base"), directory);
dir.mkdirs();
// Open the current log file
try {
String pathname = dir.getAbsolutePath() + File.separator +
prefix + date + suffix;
writer = new PrintWriter(new FileWriter(pathname, true), true);
} catch (IOException e) {
writer = null;
}
}
public void addLifecycleListener(LifecycleListener listener) {
lifecycle.addLifecycleListener(listener);
}
public LifecycleListener[] findLifecycleListeners() {
return lifecycle.findLifecycleListeners();
}
public void removeLifecycleListener(LifecycleListener listener) {
lifecycle.removeLifecycleListener(listener);
}
public void start() throws LifecycleException {
// Validate and update our current component state
if (started)
throw new LifecycleException
(sm.getString("fileLogger.alreadyStarted"));
lifecycle.fireLifecycleEvent(START_EVENT, null);
started = true;
}
public void stop() throws LifecycleException {
// Validate and update our current component state
if (!started)
throw new LifecycleException
(sm.getString("fileLogger.notStarted"));
lifecycle.fireLifecycleEvent(STOP_EVENT, null);
started = false;
close();
}
}
---------------------------------------------------------------------------
본 시 리 즈 는 Tomcat Works 학과 본인 의 오리지널 작품 입 니 다.
전재 블 로그 원 고슴도치 의 온순 함 을 밝 혀 주세요.
본인 메 일 박스: chenying 998179 \ # 163. com (\ # @ 으로 변경)
본문 링크
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
EC2 인스턴스에 Tomcat 설치전제 조건: Amazon 계정이 있어야 합니다. Amazon 계정에 로그인하고 EC2 인스턴스를 시작합니다. 여기에서 프리 티어를 선택했고 Amazon Linux 2를 실행하는 EC2 인스턴스를 시작했습니다. 시작 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.