스프링 부트 내장 Tomcat 로그
스프링부트 1.5.9와 함께 스프링부트 내장 톰캣을 사용하고 있고, Log4j2도 사용하고 있습니다.
최근 로드 중 문제가 발생하여 Tomcat 로그[Not the access Logs]를 더 잘 이해하고 싶습니다. (application.properties에서):
logging.level.org.apache.tomcat: INFO
logging.level.org.apache.catalina: INFO
하지만 위의 것들 중 아무 것도 효과가 없었습니다.그것을 성취하기 위한 다른 방법이 있습니까?
찾았어요!!이제 앱의 Log4j 로그 파일에서 내장된 Tomcat의 내부 로그를 다음과 같은 3가지 쉬운 단계로 볼 수 있습니다.
1] 폼에 추가:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jul</artifactId>
</dependency>
2] 실행 중인 arg에 새 JVM 매개 변수를 추가합니다. 예:
java -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager -jar target/demo-0.0.1-SNAPSHOT.jar
3] application.properties에 추가합니다.
logging.level.org.apache=DEBUG
인생을 즐겨요! :)
설명: 문제는 Log4j 로그 레벨이 JUL(실제 Logging way Embedded tomcat 사용)로 전파되지 않기 때문에 위에서 JUL 및 Log4j 로그 레벨과의 연결을 달성하기 때문입니다.
참조: Spring boot 1.5.10 릴리즈 노트(Spring boot 1.5.10 릴리즈 노트는 솔루션에 필요하지 않음)를 읽고 솔루션을 구현하는 방법과 설명을 설명하는 새 문서를 보았습니다.
https://github.com/spring-projects/spring-boot/issues/2923#issuecomment-358451260
저는 매우 힘들어했고, 제 도움을 전혀 찾지 못했습니다.결국 저는 스프링부팅 애플리케이션에서 "WAR"을 만들었습니다.Tomcat 인스턴스에 배포하고 아래 단계에 따라 모든 내부 Tomcat 로그(JULI) 로그를 내 응용 프로그램 로그 파일로 리디렉션합니다.
기존 JULI 라이브러리(CATALINA_HOME/bin/tomcat-juli.jar 파일)와 기존 Tomcat Java Logging 구성 파일(CATALINA_HOME/conf/logging.properties)을 삭제합니다.
Tomcat 다운로드의 엑스트라 섹션(http://tomcat.apache.org/download-70.cgi) 에서 JULI Log4j Tomcat 라이브러리(tomcat- juli.jar)를 다운로드합니다.다운로드한 파일을 CATALINA_HOME/bin 디렉토리에 놓습니다.
Tomcat 다운로드의 Extras 섹션에서 Tomcat JULI adapters 라이브러리(tomcat-juli-adapters.jar)를 다운로드합니다.이 파일을 CATALINA_HOME/lib 디렉토리에 놓습니다.
Log4j(버전 1.2 이상)를 다운로드하고 다운로드한 라이브러리 파일을 CATALINA_HOME/lib 디렉토리에 놓습니다.
CATALINA_HOME/lib/log4j.properties 위치에 Log4j 구성 파일을 만듭니다.기본 Java Logging 구성과 일치하는 log4j 구성을 아래에서 확인합니다.
Tomcat을 다시 시작합니다.
Log4j 구성 파일 기본 Tomcat 로깅 설정과 일치:
log4j.rootLogger=INFO, CATALINA
//Define all the appenders log4j.appender.CATALINA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File=${catalina.base}/logs/catalina.
log4j.appender.CATALINA.Append=true log4j.appender.CATALINA.Encoding=UTF-8
//Roll-over the log once per day
log4j.appender.CATALINA.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.LOCALHOST=org.apache.log4j.DailyRollingFileAppender
log4j.appender.LOCALHOST.File=${catalina.base}/logs/localhost.
log4j.appender.LOCALHOST.Append=true log4j.appender.LOCALHOST.Encoding=UTF-8
log4j.appender.LOCALHOST.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.MANAGER=org.apache.log4j.DailyRollingFileAppender
log4j.appender.MANAGER.File=${catalina.base}/logs/manager.
log4j.appender.MANAGER.Append=true log4j.appender.MANAGER.Encoding=UTF-8
log4j.appender.MANAGER.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.HOST-MANAGER=org.apache.log4j.DailyRollingFileAppender
log4j.appender.HOST-MANAGER.File=${catalina.base}/logs/host-manager.
log4j.appender.HOST-MANAGER.Append=true log4j.appender.HOST-MANAGER.Encoding=UTF-8
log4j.appender.HOST-MANAGER.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding=UTF-8
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
//Configure which loggers log to which appenders
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].
[localhost]=INFO,
LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].
[localhost].[/manager]=INFO,MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].
[localhost].[/host-manager]=
INFO, HOST-
MANAGER
GIT @ 링크에서 사용 가능한 어댑터를 확인할 수도 있습니다.
스프링 부트 응용 프로그램에서는 스프링 부트의 Tomcat Embedded Servlet ContainerFactory.class를 사용하여 jars, 폴더를 추가 및 제거하거나 사용자 지정 구성 파일을 추가하는 등의 변경을(를) 스프링 부트의 Tomcat Embedded ServletContainerFactory.class.
slf4j 및 Spring Boot 2의 경우 Tomcat에서 예외를 숨기고 직접 처리합니다.
폼에 추가:
<dependency> <groupId>org.slf4j</groupId> <artifactId>jul-to-slf4j</artifactId> <version>${slf4j.version}</version> </dependency>구성에 추가:
@PostConstruct void postConstruct() { SLF4JBridgeHandler.install(); }에 추가
application.yamllogging: level: org.apache.catalina: off핸들 예외 인
ErrorController@Controller @Slf4j public class ErrorController implements org.springframework.boot.web.servlet.error.ErrorController { private static final String ERROR_PATH = "/error"; @Autowired private ErrorAttributes errorAttributes; @Override public String getErrorPath() { return ERROR_PATH; } @RequestMapping(ERROR_PATH) public ModelAndView error(HttpServletRequest request) { return processException(errorAttributes.getError(new ServletWebRequest(request))); } }
Java Util Logging, Log4J, Log4J2 및 Logback에 대한 기본 구성이 제공됩니다.각 경우에 로거는 콘솔 출력을 사용하도록 미리 구성되어 있으며 옵션 파일 출력도 사용할 수 있습니다.
다음 링크 참조: https://stackoverflow.com/questions/31939849/spring-boot-default-log-location/31939886
스프링 부트에 내장된 Tomcat은 내부적으로 로그를 에코하여 콘솔에 전달합니다.기본 로그 구성은 메시지가 기록될 때 콘솔에 에코됩니다.따라서 설명한 대로 파일을 명시적으로 지정할 때까지 해당 파일은 콘솔에 남아 있습니다.
스프링 부트 기록 문서에서.
필요에 따라 로깅을 사용자 정의할 수 있습니다.
생성된 로그 파일org.apache.catalina.valves.AccessLogValve, 보통 이런 이름을 붙입니다.localhost_access_log다음과 같이 구성할 수 있습니다.
@Configuration
public class EmbeddedTomcatConfig {
@Bean
public TomcatEmbeddedServletContainerFactory containerFactory() {
TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory = new TomcatEmbeddedServletContainerFactory();
AccessLogValve accessLogValve = new AccessLogValve();
// set desired properties like
accessLogValve.setDirectory(...);
tomcatEmbeddedServletContainerFactory.addEngineValves(accessLogValve);
return tomcatEmbeddedServletContainerFactory;
}
}
스프링 부츠 2와 함께하면 훨씬 더 좋아집니다.
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> customizer() {
return container -> {
AccessLogValve accessLogValve = new AccessLogValve();
// set desired properties like
accessLogValve.setDirectory("...");
container.addEngineValves(accessLogValve);
};
}
언급URL : https://stackoverflow.com/questions/48312851/spring-boot-embedded-tomcat-logs
'programing' 카테고리의 다른 글
| 스위프트의 블록(애니메이션 위드 듀레이션:애니메이션:완료:) (0) | 2023.10.12 |
|---|---|
| MySQL - 텍스트 대 CHAR 및 VARCHAR (0) | 2023.10.12 |
| c / c++의 메모리에 있는 주소를 통해 함수를 호출하는 중 (0) | 2023.10.12 |
| JS 내에서 PHP를 사용하는 것은 나쁜 관행입니까? (0) | 2023.10.12 |
| Excel VBA 날짜 형식 (0) | 2023.10.12 |