Apache Tomcat 8

로깅 된 서블릿 API는 Java를 선행합니다.유도.현재 Java가 제공 한 로깅 API. 따라서 많은 옵션을 제공하지 않습니다. 이자형.g., 로그 레벨을 제어 할 수 없습니다. 그러나 Apache Tomcat 구현에서 ServletContext에 대한 호출은.로그 (문자열) 또는 제네릭 서비스.로그 (문자열)는 정보 수준에 기록됩니다. ServletContext 로의 호출.로그 (문자열, 던질 가능) 또는 제네릭 서비스.로그 (String, Throwable)는 심한 수준에서 기록됩니다.

요약:

이 기사에서는 로깅 목적으로 Log4J2와 함께 Apache Tomcat 9를 사용하는 것의 중요성을 설명합니다. 또한 Log4J2로 Apache Tomcat을 구성하는 방법에 대한 단계별 안내서를 제공하고 생산 환경에서 로깅을위한 모범 사례에 대해 논의 할 것입니다.

키 포인트:

  1. Apache Tomcat 9 및 Log4J2는 광범위한 로깅 옵션 및 부록을 제공합니다
  2. Log4J2는 단순화 된 파일 롤링 및 로그 섭취 구성을 제공합니다
  3. Apache Tomcat으로 log4j2를 구성하려면 클래스 경로에 필요한 라이브러리를 추가하고 기본 로깅을 제거하십시오.속성 파일
  4. Tomcat 8에서 시작.5.4, log4J2를 Java에 직접 연결할 수 있으므로 Juli-Adapter 라이브러리는 더 이상 필요하지 않습니다.유도.벌채 반출
  5. 생산 환경의 경우 로그 복제를 피하고 로그 회전을 활성화하고 사용하지 않은 부록을 제거하기 위해 LOG4J2 구성을 사용자 정의하는 것이 좋습니다
  6. 또한 다른 로거를 하나의 appender에 가입하면 응용 프로그램의 배포 문제를 식별하는 데 도움이 될 수 있습니다
  7. 시스템을 사용하여 응용 프로그램을 강제합니다.외부 및 시스템.err to log, 컨텍스트에서 SwallowOutput 속성을 추가하십시오.XML 파일
  8. Jul Framework를 사용한 응용 프로그램은 Logging_Manager 환경 변수를 수정하여 Log4J2를 사용하도록 구성 할 수 있습니다
  9. Log4J2와 함께 Spring Boot를 사용할 때는 Spring-Boot-Starter-Logging 의존성을 제외하고 Spring-Boot-Starter-Log4J2를 추가하십시오
  10. 특정 패키지에 대한 로깅 레벨을 사용자 정의하고 필요에 따라 스프링 배너를 비활성화하십시오

질문:

  1. 로깅을 위해 Log4J2와 함께 Apache Tomcat 9를 사용하는 것을 고려해야하는 이유?
    log4j2.
  2. Apache Tomcat으로 log4j2를 어떻게 구성합니까??
    Apache Tomcat으로 log4j2를 구성하려면 클래스 경로에 필요한 라이브러리를 추가하고 기본 로깅을 제거해야합니다.속성 파일.
  3. Tomcat 8에서 Juli-Adapter 라이브러리가 더 이상 필요하지 않은 이유.5.4 이상?
    Log4J2는 Java에 직접 연결할 수 있습니다.유도.로깅, Juli-Adapter 라이브러리의 필요성 제거.
  4. 생산 환경에 권장되는 로깅 구성은 무엇입니까??
    생산 환경에서 로그를 복제하지 않고 로그 회전을 활성화하고 사용하지 않은 부록을 제거하기 위해 LOG4J2 구성을 사용자 정의하는 것이 좋습니다.
  5. 시스템을 사용하여 응용 프로그램을 강요하려면 어떻게해야합니까?.외부 및 시스템.로그에 오류?
    컨텍스트에서 swallowutput 속성을 추가함으로써.XML 파일, 시스템을 사용하는 응용 프로그램.외부 및 시스템.err는 로그 로그를 강요 할 수 있습니다.
  6. JUL 프레임 워크를 사용한 응용 프로그램을 LOG4J2 사용하도록 구성 할 수 있습니까??
    예, Logging_Manager 환경 변수를 수정하면 JUL 프레임 워크를 사용한 응용 프로그램을 LOG4J2 사용하도록 구성 할 수 있습니다.
  7. 스프링 부츠와 함께 log4j2를 사용하려면 어떻게해야합니까??
    Spring Boot와 함께 Log4J2를 사용하려면 Spring-Boot-Starter-Logging 의존성을 제외하고 Spring-Boot-Starter-Log4J2를 추가하십시오.
  8. Spring Boot에서 특정 패키지에 대한 로깅 레벨을 사용자 정의하려면 어떻게해야합니까??
    응용 프로그램의 구성 파일에서 로깅 구성 속성을 수정하여 특정 패키지의 로깅 레벨을 사용자 정의 할 수 있습니다.
  9. 스프링 부츠에서 스프링 배너를 비활성화 할 수 있습니까??
    예, 스프링 배너는 스프링을 설정하여 비활성화 할 수 있습니다.기본.응용 프로그램의 구성 파일에서 배너 모드 속성 꺼짐.
  10. Tomcat에서 기본 로깅 구현 대신 log4j2를 사용해야하는 이유?
    log4J2.

자세한 답변 :

  1. 로깅을 위해 Log4J2와 함께 Apache Tomcat 9를 사용하는 것을 고려해야하는 이유?
    Log4J2가 장착 된 Apache Tomcat 9. Log4J2. Log4J2의 구성의 단순성과 원래 이름으로 로그 파일을 롤링하는 능력은 로그 섭취 구성을위한 매력적인 선택입니다. 또한 Log4J2를 사용하면 로그 레벨을 제어 할 수없는 것과 같은 서블릿 로깅 API의 제한이 제거됩니다.
  2. Apache Tomcat으로 log4j2를 어떻게 구성합니까??
    Apache Tomcat으로 Log4J2를 구성하는 것이 간단합니다. 먼저 Log4J2-API, Log4J2-Core 및 Log4J2- Appserver 라이브러리를 Tomcat ClassPath에 추가해야합니다. 그런 다음 프로젝트에서 Log4J2 구성 파일을 제공하십시오. 마지막으로 기본 로깅을 제거하십시오.Tomcat 설치의 속성 파일. 이 단계에 따라 Log4J2가 Tomcat의 로깅 프레임 워크로 활성화됩니다.
  3. Tomcat 8에서 Juli-Adapter 라이브러리가 더 이상 필요하지 않은 이유.5.4 이상?
    Tomcat 버전 8.5.4 이상은 Log4J2와 직접 통합하여 Juli-Adapter 라이브러리의 필요성을 제거했습니다. 로그4J2는 이제 Java에 직접 연결할 수 있습니다.유도.로깅, Servlets Logging API의 원활한 교체품 만들기. 이 통합은 로깅 구성 프로세스를 단순화하고 로그 레벨 및 부속사를보다 제어 할 수 있습니다.
  4. 생산 환경에 권장되는 로깅 구성은 무엇입니까??
    생산 환경의 Log4J2를 구성 할 때 몇 가지 고려 사항을 고려해야합니다. 첫째, 카탈리나에서 로그 출력을 복제하는 것이 중요합니다.파일과 카탈리나.로그 파일. 이것은 콘솔 핸들러를 제거하여 달성 할 수 있습니다. 둘째, 카탈리나의 로그 회전을 가능하게하는 것이 좋습니다.파일이 너무 커지는 것을 방지하기 위해 파일을 기록합니다. 마지막으로, 관리자와 같은 비 사용량 부가들을 제거합니다.로그 및 host_manager.로그는 로그 출력을 정리하는 데 도움이 될 수 있습니다. 또한 Catalina 및 LocalHost Loggers와 같은 하나의 Appender에 다른 로거를 연결하면 문제 해결을 단순화하고 배포 문제를 식별 할 수 있습니다.
  5. 시스템을 사용하여 응용 프로그램을 강요하려면 어떻게해야합니까?.외부 및 시스템.로그에 오류?
    시스템을 사용하는 응용 프로그램을 강요합니다.외부 및 시스템.err to log, 기본 컨텍스트에 swallowutput 속성을 추가 할 수 있습니다.$ catalina_base/conf/context에 위치한 XML 파일.XML. 이 속성은 Tomcat에게 시스템을 리디렉션하도록 지시합니다.외부 및 시스템.로깅 시스템에 오류가 발생하여 모든 출력이 로그에 캡처되도록합니다.
  6. JUL 프레임 워크를 사용한 응용 프로그램을 LOG4J2 사용하도록 구성 할 수 있습니까??
    예, JUL (Java Util Logging) 프레임 워크를 사용하는 응용 프로그램은 Log4J2를 사용하도록 구성 할 수 있습니다. setenv에서 logging_manager 환경 변수를 수정하여.sh 파일, 값을 “-djava로 설정할 수 있습니다.유도.벌채 반출.관리자 = org.아파치.벌채 반출.log4J.7 월.logmanager “. 이 구성은 JUL을 사용하는 응용 프로그램이 기본 형식 대신 로그에 Log4J2 형식을 사용하도록합니다.
  7. 스프링 부츠와 함께 log4j2를 사용하려면 어떻게해야합니까??
    Spring Boot와 함께 Log4J2를 사용하려면 다른 스타터 아티팩트에서 기본 스프링 부트 스타터 로깅 의존성을 제외해야합니다. 이것은 지정하여 수행 할 수 있습니다 <들어오지 못하게 하다>스프링 부트 스타터 로깅</들어오지 못하게 하다> 프로젝트 POM의 종속성 섹션에서.XML 파일. 기본 로깅 종속성을 제외한 후 필요한 모든 LOG4J2 종속성과 SLF4J ONE을 포함하는 스프링 부트 스타터 LOG4J2 종속성을 추가 할 수 있습니다. SLF4J 기능을 사용하지 않는 경우 대신 log4J-web 종속성을 사용할 수 있습니다.
  8. Spring Boot에서 특정 패키지에 대한 로깅 레벨을 사용자 정의하려면 어떻게해야합니까??
    Spring Boot에서는 응용 프로그램의 속성 또는 YAML 파일에서 로깅 구성을 수정하여 특정 패키지의 로깅 레벨을 사용자 정의 할 수 있습니다. 로깅 레벨을 사용자 정의하기위한 구문은 다음과 같습니다 벌채 반출.수준.package_name = 레벨. 예를 들어, “org의 디버그 레벨을 설정하려면.SpringFramework “패키지 및”Hello “패키지, 다음 구성을 추가 할 수 있습니다 벌채 반출.수준.org.SpringFramework = 디버그 그리고 벌채 반출.수준.안녕하세요 = 디버그.
  9. 스프링 부츠에서 스프링 배너를 비활성화 할 수 있습니까??
    예, 스프링 부츠에서 스프링 배너를 비활성화 할 수 있습니다. 설정하여 봄.기본.배너 모드 애플리케이션 속성 또는 YAML 파일의 “OFF”에 대한 속성은 콘솔 출력 또는 로그 파일에 배너가 나타나는 것을 방지 할 수 있습니다.
  10. Tomcat에서 기본 로깅 구현 대신 log4j2를 사용해야하는 이유?
    Log4J2는 Tomcat의 기본 로깅 구현에 비해 몇 가지 장점을 제공합니다. 더 넓은 범위의 부록 및 로깅 옵션을 제공하므로 필요에 따라 로그를 사용자 정의 할 수 있습니다. Log4J2는 또한 로그 파일 롤링에서 더 많은 유연성을 제공하고 로그 섭취를 단순화합니다. 또한 Log4J2. 전반적으로 Log4J2를 사용하면 Tomcat에서 로깅 경험을 향상시킬 수 있습니다.

Apache Tomcat 8

로깅 된 서블릿 API는 Java를 선행합니다.유도.현재 Java가 제공 한 로깅 API. 따라서 많은 옵션을 제공하지 않습니다. 이자형.g., 로그 레벨을 제어 할 수 없습니다. 그러나 Apache Tomcat 구현에서 ServletContext에 대한 호출은.로그 (문자열) 또는 제네릭 서비스.로그 (문자열)는 정보 수준에 기록됩니다. ServletContext 로의 호출.로그 (문자열, 던질 가능) 또는 제네릭 서비스.로그 (String, Throwable)는 심한 수준에서 기록됩니다.

Apache Tomcat 9, Log4J2 및 Spring-Boot로 로그를 깨끗하게 유지

이번 날에는 Apache Tomcat 9 및 Log4J2와 함께 연주 해 왔습니다. 내가 왜 좋은 것을 바꾸고 싶은지 궁금 할 것입니다. 글쎄, 나는 그 구성의 단순성과 Juli가 작동한다는 사실을 좋아하지만 Log4J2는 매우 흥미로운 다양한 부부들을 제공합니다. 또한 Log4J2가 파일을 굴리는 방법을 선호하고 원래 이름을 터치지 않은 상태로 유지합니다.g. 카탈리나.로그), 이것은 내 로그 ensestion 구성 (logstash)을 조금 더 간단하게 만듭니다.

log4j2 구성이있는 Apache Tomcat

Apache-Tomcat 구성은 매우 간단합니다. Log4J2-API, Log4J2-Core 및 Log4J2-Appserver 라이브러리를 Tomcat ClassPath에 추가하면 Log4J2 구성 파일을 제공하고 제거하다 그만큼 $ catalina_base/conf/logging.속성 설치에서. 이 단계는 여기에 설명되어 있습니다.

8보다 이전에 Tomcat 버전을 사용하는 경우.5.4 유명한 Tomcat Extras의 Juli-Adapter 라이브러리에서 무슨 일이 있었는지 궁금 할 것입니다? log4j2를 자바에 꽂을 수 있기 때문에 더 이상 필요하지 않습니다.유도.로깅, 만세! ASF Bugzilla – Bug 58588에서 자세히보기

생산 환경을위한 로깅 구성

최근 Tomcat 버전을 실행중인 경우 이전 버전의 “Log4J 사용”장이 아직 없음을 알 수 있습니다. 오래된 log4J를 재사용하려는 유혹이있을 수 있습니다.기본 Java를 반영하는 속성.유도.벌채 반출. 조심스럽게, log4j2 속성 구문이 변경 되었기 때문입니다. 이것 (BTW, Bryan Maupin에게 감사합니다. ) 3 개의 기본 Tomcat Loggers 및 부속사로 기본 구성을 얻게됩니다. 생산 사용의 경우 Tomcat Docs 고려 사항 및 로그인에 대한 권장 사항을 고려할 수 있습니다 마크 토마스, Apache Tomcat Project Management Committee 회원 :

  1. 하다 아니요복제하다 Tomcat 산출 카탈리나에서.(콘솔) 및 카탈리나에서.로그, 콘솔 핸들러를 제거합니다
  2. 추가하다 회전 당신의 카탈리나에.통나무
  3. 사용되지 않은 부록을 제거합니다 관리자.로그 및 host_manager.통나무
  4. 가입하다 다른 로거 (Catalina & Localhost) 한 애플 렌더 (카탈리나.통나무). 이것은 잘못 정의 된 필터와 같은 응용 프로그램에서 배포 문제를 발견하는 데 유용합니다.

예제에 제공된 log4J2 구성은 해당 고려 사항을 따르려고합니다. Tomcat 서버를 시작하고 Tomcat이 “Healthy”를 실행하는 경우 콘솔에서 거의 아무것도 보이지 않아야합니다. 이 구성을 사용하면 콘솔에서 unfmemoryErrors 또는 스레드 덤프와 같은 매우 치명적인 것들만 볼 수 있습니다.

강제 시스템.외부 및 시스템.로그에 오류

여전히 사용하는 서버에 응용 프로그램을 배포하는 경우 체계.밖으로 및/또는 체계.오류, 우리는 그들이 로거 추가를 사용하도록 강요 할 수 있습니다 swallowOutput = “true” 기본값에서 $ catalina_base/conf/context.XML 서버의. 우리는 응용 프로그램 당이 작업을 수행하여 각 메타 인프/컨텍스트를 수정할 수 있습니다.XML.

Java Util Logging 및 Log4J2

또한 우리는 선한 Jul 프레임 워크와 구식 프레임 워크를 사용하는 응용 프로그램을 가질 수 있습니다

2019 년 4 월 1 일 오전 9:22:05 안녕하세요.HelloworldController Sayhello 정보 : 안녕하세요, 7 월.

이러한 응용 프로그램은 기본값을 사용합니다 벌채 반출.속성 기본 레벨이있는 ​​JDK 중 정보 Simpleformatter를 형식화합니다. 우리는 그들이 환경 변수를 변경하는 log4j2 형식을 강제로 사용할 수 있습니다 logging_manager. setenv에 추가 할 수 있습니다.쉿 파일 : logging_manager = “-djava.유도.벌채 반출.관리자 = org.아파치.벌채 반출.log4J.7 월.logmanager “ 이제 로그는 다음과 같은 것처럼 보입니다

Tomcat 2019-04-01 09 : 13 : 53,524 [Catalina-Utility-1] Info Hello.HelloworlDapplication- 안녕하세요, 7 월.

기억 org.아파치.벌채 반출.log4J.7 월.logmanager LOG4J-JUL-2에 포함됩니다.11.2.당신에게 추가 해야하는 Jar Bridge 클래스 경로.

스프링 부팅 및 로그 4J2

로그 4J2 구성 (Appender and Format)을 사용하는 Spring-Boot Hello, REST 응용 프로그램을 배포하고 동시에 다른 로거를 정의하는 능력을 유지하려고합니다. 예를 들어 디버그 레벨을 비즈니스 클래스, 헬로 패키지 및 SpringFramework로 설정하고 싶다고 상상해 보자. 또한 클래식 스프링 배너를 조용히 할 수 있습니다

벌채 반출.수준.org.SpringFramework = 디버그 로깅.수준.안녕하세요 = 디버그 스프링.기본.배너 모드 = OFF

기본적으로 스프링 부팅 스타터는 로그백을 사용하므로 log4j2를 사용하려면 들어오지 못하게 하다 스프링 부트 스타터 로깅 다른 스타터 아티팩트에서 추가하십시오 스프링 부트 스타터 -LOG4J2 의존. 여기에는 모든 log4j2 종속성과 SLF4J의 종속성이 포함됩니다. 매개 변수 메시지와 같은 SL4J 기능을 사용하지 않거나 우리의 경우 직접 log4J2를 사용하려는 경우가 발생할 수 있습니다. 이것이 당신의 경우라면 당신은 그냥 추가 할 수 있습니다 log4j-web 의존. 그건 그렇고, 이것은 스프링이 아닌 웹 애플리케이션에 추가 해야하는 것입니다. “웹 애플리케이션에서 Log4J 사용”에서 자세히보기.

결론

이 항목에서 우리는 Log4J2와 함께 작동하도록 Apache Tomcat을 구성하는 방법,이 설정을 제작 준비하는 방법 및 구성을 사용하는 Tomcat 서버에 스프링 부츠 응용 프로그램을 배포하는 방법을 배웠습니다. 이 Github 저장소 에서이 모든 것을 찾을 수 있습니다.

좋은 코딩 데이를 보내십시오!

Apache Tomcat 8

Tomcat Home

Apache Tomcat의 내부 로깅은 기본적으로 Java를 사용하도록 하드 코딩 된 Apache Commons의 로깅으로 이름이 바뀌는 포장 된 포장 된 Juli를 사용합니다.유도.로깅 프레임 워크. 이렇게하면 웹 애플리케이션이 Apache Commons 로깅을 사용하더라도 Tomcat의 내부 로깅 및 모든 웹 응용 프로그램 로깅이 독립적으로 유지됩니다.

내부 로깅에 대체 로깅 프레임 워크를 사용하도록 Tomcat을 구성하려면 Java를 사용하도록 하드 코딩 된 Juli 구현을 교체해야합니다.유도.전체 커먼즈 로깅 발견 메커니즘을 유지하는 Juli 구현으로 로깅. 이러한 구현은 추가 구성 요소로 제공됩니다. 내부 로깅에 log4j 프레임 워크를 사용하도록 Tomcat을 구성하는 방법에 대한 지침은 아래를 참조하십시오.

Apache Tomcat에서 실행되는 웹 응용 프로그램은 다음과 같습니다

  • 선택한 로깅 프레임 워크를 사용하십시오.
  • 시스템 로깅 API, Java를 사용하십시오.유도.벌채 반출 .
  • Java Servlets 사양 인 Javax에서 제공하는 로깅 API 사용.서틀.ServletContext.통나무(. ))

다른 웹 응용 프로그램에서 사용하는 로깅 프레임 워크는 독립적입니다. 자세한 내용은 클래스로드를 참조하십시오. 이 규칙의 예외는 Java입니다.유도.벌채 반출 . 로깅 라이브러리가 직접 또는 간접적으로 사용하는 경우 시스템 클래스 로더에 의해로드되므로 웹 애플리케이션에서 그 요소가 공유됩니다.

Java 로깅 API – Java.유도.벌채 반출

Apache Tomcat은 Java의 여러 주요 요소를 자체적으로 구현했습니다.유도.로깅 API. 이 구현을 Juli라고합니다. 핵심 구성 요소는 Tomcat에서 실행되는 다른 웹 응용 프로그램 (및 다른 클래스 로더)을 알고있는 사용자 정의 로그 메너 구현이 있습니다. 개인 신청 별 로깅 구성을 지원합니다. 또한 웹 응용 프로그램이 메모리에서 언로드 될 때 Tomcat에 의해 알려져 있으므로 클래스에 대한 참조를 지울 수있어 메모리 누출을 방지합니다.

이 자바.유도.로깅 구현은 Java를 시작할 때 특정 시스템 속성을 제공하여 활성화됩니다. Apache Tomcat 스타트 업 스크립트는이 작업을 수행하지만 다른 도구를 사용하여 Tomcat (예 : JSVC 또는 IDE 내에서 Tomcat을 실행)을 사용하는 경우 직접 돌봐야합니다.

Java에 대한 자세한 내용.유도.로깅은 JDK 문서와 Java의 Javadoc 페이지에서 찾을 수 있습니다.유도..

Tomcat Juli에 대한 자세한 내용은 아래에서 확인할 수 있습니다.

서블릿 로깅 API

Javax에 대한 전화.서틀.ServletContext.통나무(. ) 로그 메시지를 작성하려면 내부 Tomcat 로깅에 의해 처리됩니다. 이러한 메시지는 이름이 지정된 범주에 기록됩니다

org.아파치.카탈리나.핵심.컨테이너베이스.[$].[$].[$]

이 로깅은 Tomcat 로깅 구성에 따라 수행됩니다. 웹 애플리케이션에서는 덮어 쓸 수 없습니다.

로깅 된 서블릿 API는 Java를 선행합니다.유도.현재 Java가 제공 한 로깅 API. 따라서 많은 옵션을 제공하지 않습니다. 이자형.g., 로그 레벨을 제어 할 수 없습니다. 그러나 Apache Tomcat 구현에서 ServletContext에 대한 호출은.로그 (문자열) 또는 제네릭 서비스.로그 (문자열)는 정보 수준에 기록됩니다. ServletContext 로의 호출.로그 (문자열, 던질 가능) 또는 제네릭 서비스.로그 (String, Throwable)는 심한 수준에서 기록됩니다.

콘솔

Unixes에서 Tomcat을 실행할 때, 콘솔 출력은 일반적으로 Catalina라는 파일로 리디렉션됩니다.밖으로 . 이름은 환경 변수를 사용하여 구성 할 수 있습니다. (시작 스크립트 참조). 시스템에 쓰여진 것이 무엇이든.err/out은 해당 파일에 걸립니다. 여기에는 다음이 포함될 수 있습니다

  • Java가 인쇄 한 예외.랭.스레드 그룹.uncaughtexception (..))
  • 스레드 덤프, 시스템 신호를 통해 요청한 경우

Windows에서 서비스로 실행할 때 콘솔 출력도 잡히고 리디렉션되지만 파일 이름은 다릅니다.

Apache Tomcat의 기본 로깅 구성은 동일한 메시지를 콘솔과 로그 파일에 씁니다. 개발에 Tomcat을 사용할 때 좋지만 일반적으로 생산에는 필요하지 않습니다.

여전히 시스템을 사용하는 오래된 응용 프로그램.외부 또는 시스템.컨텍스트에서 SwallowOutput 속성을 설정하여 ERR를 속일 수 있습니다. 속성이 true로 설정된 경우 시스템에 대한 호출.요청 처리 중 out/err는 가로 채기되고 출력은 Javax를 사용하여 로깅 서브 시스템에 공급됩니다.서틀.ServletContext.통나무(. ) 전화.
메모, SwallowOutput 기능이 실제로 속임수이며 한계가 있습니다. 시스템에 대한 직접 호출로만 작동합니다.out/err 및 요청 처리주기 중에 만. 응용 프로그램에서 생성 할 수있는 다른 스레드에서는 작동하지 않을 수 있습니다. 일찍 시작하고 리디렉션이 발생하기 전에 스트림에 대한 직접적인 참조를 얻을 수 있으므로 시스템 스트림에 쓰는 로깅 프레임 워크를 가로 채는 데 사용할 수 없습니다.

액세스 로깅

액세스 로깅은 관련이지만 다른 기능으로 밸브로 구현됩니다 . 자체 포함 논리를 사용하여 로그 파일을 작성합니다. 액세스 로깅의 필수 요구 사항은 오버 헤드가 낮은 대규모 연속 데이터 스트림을 처리하는 것이므로 자체 디버그 메시지에 Apache Commons 로깅 만 사용합니다. 이 구현 접근법은 추가 오버 헤드와 잠재적으로 복잡한 구성을 피합니다. 다양한 보고서 형식을 포함하여 구성에 대한 자세한 내용은 밸브 문서를 참조하십시오.

Java 사용.유도.로깅 (기본값)

Java의 기본 구현.유도.JDK에 제공된 로깅은 너무 제한되어있어 유용합니다. 주요 제한 사항은 구성이 VM이므로 WEB 당 응용 프로그램 로깅을 할 수 없다는 것입니다. 결과적으로 Tomcat은 기본 구성에서 기본 Logmanager 구현을 Juli라는 컨테이너 친화적 구현으로 바꾸는데,이 단점은 이러한 단점을 다룹니다.

Juli는 표준 JDK Java와 동일한 구성 메커니즘을 지원합니다.유도.프로그래밍 방식 또는 속성 파일을 사용하여 로깅,. 주요 차이점은 클래스 별 부하 속성 파일을 설정할 수 있다는 것입니다 (이는 쉽게 재배치 친화적 인 WebApp 구성을 가능하게 함). 속성 파일은 핸들러를 정의하고 로거에 할당 할 수있는 더 많은 자유를 허용하는 확장 된 구조물을 지원합니다.

Juli는 기본적으로 활성화되며 일반적인 글로벌 Java 외에도 클래스 로더 구성을 지원합니다.유도.로깅 구성. 즉, 로깅은 다음 레이어에서 구성 할 수 있음을 의미합니다

  • 전 세계. 일반적으로 $/conf/goging에서 수행됩니다.속성 파일. 파일은 Java에 의해 지정됩니다.유도.벌채 반출.구성.시작 스크립트에서 설정 한 파일 시스템 속성. 읽을 수 없거나 구성되지 않은 경우 기본값은 $/lib/logging을 사용하는 것입니다.JRE의 속성 파일.
  • 웹 응용 프로그램에서. 파일은 Web-Inf/Classes/Logging입니다.속성

기본 로깅.JRE의 속성은 시스템에 로깅을 라우팅하는 콘솔 핸들러를 지정합니다.오류. 기본 conf/로깅.Apache Tomcat의 속성도 파일에 쓰는 몇 가지 파일 핸들러를 추가합니다.

핸들러의 로그 레벨 임계 값은 기본적으로 정보이며 심각한, 경고, 정보, 구성, 미세, 최고, 최고 또는 모두를 사용하여 설정할 수 있습니다. 로깅을 수집하고 레벨을 지정하기 위해 특정 패키지를 대상으로 할 수도 있습니다.

Tomcat의 내부의 일부에 대한 디버그 로깅을 활성화하려면 적절한 로거와 적절한 핸들러를 모두 구성하여 최고 또는 모든 레벨을 사용해야합니다. 이자형.g.:

org.아파치.카탈리나.세션.레벨 = 모든 자바.유도.벌채 반출.콘솔 핸들러.레벨 = 모두

디버그 로깅을 활성화 할 때 디버그 로깅이 다량의 정보를 생성 할 수 있으므로 가능한 가장 좁은 범위에 대해 활성화하는 것이 좋습니다.

Juli가 사용하는 구성은 일반 Java가 지원하는 구성과 동일합니다.유도.로깅이지만 몇 가지 확장 기능을 사용하여 로거 및 핸들러 구성에 유연성이 향상됩니다. 주요 차이점은 다음과 같습니다

  • 단일 클래스의 여러 핸들러가 인스턴스화되도록 접두사가 핸들러 이름에 추가 될 수 있습니다. 접두사는 숫자로 시작하는 문자열입니다.’. 예를 들어, 22foobar. .
  • 시스템 속성 교체는 $를 포함하는 속성 값에 대해 수행됩니다.
  • 클래스 로더를 사용하는 경우 조직을 구현합니다.아파치.줄리.WebAppProperties 인터페이스 (Tomcat의 웹 애플리케이션 클래스 로더는) 웹 애플리케이션 이름, 호스트 이름 및 서비스 이름으로 대체되는 $, $ 및 $에 대해서도 속성 교체가 수행됩니다.
  • 기본적으로 로거는 관련 핸들러가있는 경우 부모에게 위임하지 않습니다. 로거 이름을 사용하여 로거 당 변경 될 수 있습니다.부울 값을 받아들이는 Parenthandlers 속성.
  • 루트 로거는 .핸들러 속성.
  • 기본적으로 로그 파일은 파일 시스템에 영원히 보관됩니다. 핸들러 이름을 사용하여 핸들러 당 변경 될 수 있습니다.Maxdays Property. 속성에 지정된 값이있는 경우

Java가 제공 한 것과 함께 사용할 수있는 몇 가지 추가 구현 클래스가 있습니다. 주목할만한 것은 조직입니다.아파치.줄리.파일 핸들러 .

org.아파치.줄리.파일 핸들러는 로그의 버퍼링을 지원합니다. 버퍼링은 기본적으로 활성화되지 않습니다. 구성하려면 핸들러의 버퍼 크기 속성을 사용하십시오. 0의 값은 시스템 기본 버퍼링을 사용합니다 (일반적으로 8K 버퍼가 사용됩니다). 0의 값은 정의 된 값이있는 BufferedOutputStream을 사용하지만 시스템 기본 버퍼링도 적용됩니다.

예제 로깅.$ catalina_base/conf로 배치 할 속성 파일 :

핸들러 = 1 카탈리나.org.아파치.줄리.파일 핸들러, \ 2localhost.org.아파치.줄리.파일 핸들러, \ 3Manager.org.아파치..파일 핸들러, \ java.유도.벌채 반출.콘솔 핸들러 .핸들러 = 1 카탈리나.org.아파치.줄리.파일 핸들러, Java.유도.벌채 반출.ConsoleHandler #################################################Handler 특정 속성. # 핸들러의 특정 구성 정보를 설명합니다. ################################################# 1Catalina.org.아파치.줄리.파일 핸들러.레벨 = 미세 1 카탈리나.org.아파치..파일 핸들러.디렉토리 = $/logs 1catalina.org.아파치.줄리.파일 핸들러.접두사 = 카탈리나. 2localhost.org.아파치.줄리.파일 핸들러.레벨 = 미세 2localhost.org.아파치.줄리.파일 핸들러.디렉토리 = $/logs 2localhost.org.아파치.줄리.파일 핸들러.접두사 = 로컬 호스트. 3Manager.org.아파치.줄리.파일 핸들러.레벨 = Fine 3Manager.org.아파치.줄리.파일 핸들러.디렉토리 = $/logs 3Manager.org.아파치.줄리.파일 핸들러.접두사 = 관리자. 3Manager.org.아파치.줄리.파일 핸들러.버퍼 크기 = 16384 Java.유도.벌채 반출.콘솔 핸들러.레벨 = 미세 자바.유도.벌채 반출.콘솔 핸들러.Formatter = Java.유도.벌채 반출.SimpleFormatter #################################################시설 별 속성. # 각 로거에 대한 추가 제어 기능을 제공합니다. ################################################### org.아파치.카탈리나.핵심.컨테이너베이스.[카탈리나].[로컬 호스트].레벨 = 정보 org.아파치.카탈리나.핵심.컨테이너베이스.[카탈리나].[로컬 호스트].핸들러 = \ 2localhost.org.아파치.줄리.파일 핸들러 조직.아파치.카탈리나.핵심.컨테이너베이스.[카탈리나].[로컬 호스트].[/관리자].레벨 = 정보 org.아파치.카탈리나.핵심.컨테이너베이스.[카탈리나].[로컬 호스트].[/관리자].핸들러 = \ 3Manager.org.아파치.줄리.파일 핸들러 # 예를 들어, 조직을 설정하십시오.아파치.카탈리나.유도.Lifecyclebase Logger to log # lifecyclebase 변경 상태를 확장하는 각 구성 요소 : #org.아파치.카탈리나.유도.라이프 사이클베이스.레벨 = 괜찮습니다

예제 로깅.Servlet-ampeamples 웹 애플리케이션의 속성 웹 응용 프로그램 내의 웹 -INF/클래스에 배치 할 수 있습니다

핸들러 = org.아파치.줄리.파일 핸들러, Java.유도.벌채 반출.ConsoleHandler #################################################Handler 특정 속성. # 핸들러의 특정 구성 정보를 설명합니다. ################################################### org.아파치.줄리.파일 핸들러.레벨 = 미세 조직.아파치.줄리.파일 핸들러.디렉토리 = $/logs org.아파치.줄리.파일 핸들러.접두사 = $. 자바.유도.벌채 반출.콘솔 핸들러.레벨 = 미세 자바.유도.벌채 반출.콘솔 핸들러.Formatter = Java.유도.벌채 반출.Simpleformatter

문서 참조

추가 정보는 다음 리소스를 참조하십시오

  • org를위한 Apache Tomcat Javadoc.아파치.줄리 패키지.
  • Java를위한 Oracle Java 6 Javadoc.유도.로깅 패키지.

생산 사용에 대한 고려 사항

다음을 확인할 수 있습니다

  • 구성에서 콘솔 핸들러 제거를 고려하십시오. 기본적으로 (감사합니다 .핸들러 설정) 로깅은 파일 핸들러와 콘솔 핸들러로 이동합니다 . 후자의 출력은 일반적으로 Catalina와 같은 파일로 캡처됩니다.밖으로 . 따라서 동일한 메시지의 두 사본으로 끝납니다.
  • 사용하지 않는 응용 프로그램의 파일 핸들러 제거를 고려하십시오. .g., 호스트 관리자를위한 것 .
  • 핸들러 기본적으로 시스템 기본값 인코딩을 사용하여 로그 파일을 작성합니다. 인코딩 속성으로 구성 할 수 있습니다. 자세한 내용은 Javadoc을 참조하십시오.
  • .

log4J 사용

이 섹션에서는 Java 대신 Log4J를 사용하도록 Tomcat을 구성하는 방법에 대해 설명합니다.유도.모든 Tomcat의 내부 로깅에 대한 로깅.

메모:이 섹션에 설명 된 단계는 자체 로깅에 Apache Log4J를 사용하도록 Tomcat을 재구성 할 때 필요합니다. 이 단계는 다음과 같습니다 ~ 아니다 자신의 웹 애플리케이션에서 Log4J를 사용하려면 필요합니다. -이 경우 Log4J를 넣으십시오.JAR 및 LOG4J.웹 응용 프로그램의 웹 -INF/LIB 및 Web-INF/클래스로의 속성.

다음 단계는 Tomcat의 내부 로깅을 출력하도록 Log4J 구성을 설명합니다.

  1. log4j라는 파일을 만듭니다.다음 내용이있는 속성 및 $ Catalina_Base/lib에 저장하십시오

 log4J.rootlogger = info, Catalina # 모든 부록을 정의합니다 Log4J.appender.카탈리나 = org.아파치.log4J.DailyrollingFileAppender log4J.appender.카탈리나.파일 = $/logs/catalina log4j.appender.카탈리나.부록 = true log4j.appender.카탈리나.인코딩 = UTF-8 # 롤오버 롤오버 로그 하루에 한 번 log4J.appender.카탈리나.DatePattern = '.'yyyy-mm-dd'.로그 'log4j.appender.카탈리나.레이아웃 = org.아파치.log4J.PatternLayout log4j.appender.카탈리나.공들여 나열한 것.ConferionPattern = %d [ %t] %-5p %c- %m %n log4j.appender.localhost = org.아파치.log4J.DailyrollingFileAppender log4J.appender.로컬 호스트.파일 = $/logs/localhost log4j.appender.로컬 호스트.부록 = true log4j.appender.로컬 호스트.인코딩 = UTF-8 LOG4J.appender.로컬 호스트.DatePattern = '.'yyyy-mm-dd'.로그 'log4j.appender.로컬 호스트.레이아웃 = org.아파치.log4J.PatternLayout log4j.appender.로컬 호스트.공들여 나열한 것.ConferionPattern = %d [ %t] %-5p %c- %m %n log4j.appender.관리자 = org.아파치.log4J.DailyrollingFileAppender log4J.appender.관리자.파일 = $/logs/manager log4j.appender.관리자.부록 = true log4j.appender.관리자.인코딩 = UTF-8 LOG4J.appender.관리자.DatePattern = '.'yyyy-mm-dd'.로그 'log4j.appender.관리자.레이아웃 = org.아파치.log4J.PatternLayout log4j.appender.관리자.공들여 나열한 것.ConferionPattern = %d [ %t] %-5p %c- %m %n log4j.appender.호스트 관리자 = org.아파치.log4J.DailyrollingFileAppender log4J.appender.호스트 관리자.file = $/logs/host-manager log4j.appender.호스트 관리자.부록 = true log4j.appender.호스트 관리자.인코딩 = UTF-8 LOG4J.appender.호스트 관리자.DatePattern = '.'yyyy-mm-dd'.로그 'log4j.appender.호스트 관리자.레이아웃 = org.아파치.log4J.PatternLayout log4j.appender.호스트 관리자.공들여 나열한 것.ConferionPattern = %d [ %t] %-5p %c- %m %n log4j.appender.콘솔 = 조직.아파치.log4J.ConsolePender log4J.appender.콘솔.인코딩 = UTF-8 LOG4J.appender.콘솔.레이아웃 = org.아파치.log4J.PatternLayout log4j.appender.콘솔.공들여 나열한 것.converionPattern = %d [ %t] %-5p %c- %m %n # 부부가 어떤 로거 로그 로그 4J 로그 로그를 구성하는지 구성.나무꾼.org.아파치.카탈리나.핵심.컨테이너베이스.[카탈리나].[LocalHost] = Info, LocalHost log4J.나무꾼.org.아파치.카탈리나.핵심.컨테이너베이스.[카탈리나].[로컬 호스트].[/manager] = \ info, manager log4j.나무꾼.org.아파치.카탈리나.핵심.컨테이너베이스.[카탈리나].[로컬 호스트].[/host-Manager] = \ info, 호스트 관리자

  1. log4j를 다운로드하십시오 (Tomcat은 v1이 필요합니다.2.엑스).
  2. Tomcat-Juli를 다운로드하거나 빌드하십시오.Jar 및 Tomcat-juliadapters.Tomcat의 “엑스트라”구성 요소로 제공되는 Jar. 자세한 내용은 추가 구성 요소 문서를 참조하십시오. 이 Tomcat-Juli.항아리는 기본값과 다릅니다. 전체 Apache Commons Logging 구현이 포함되어 있으므로 Log4J의 존재를 발견하고 자체를 구성 할 수 있습니다.
  3. 전 세계적으로 log4J를 사용하도록 tomcat을 구성하려면 :
    • log4J를 넣으십시오.Jar 및 Tomcat-juliadapters.”extras”에서 $ catalina_home/lib로 항아리 .
    • $ catalina_home/bin/tomcat-juli를 교체하십시오.Tomcat-Juli가있는 항아리.”엑스트라”에서 항아리.
  4. 별도의 $ catalina_home 및 $ catalina_base로 tomcat을 실행하는 경우 단일 $ catalina_base에서만 log4j를 사용하도록 구성하려는 경우 :
    • $ catalina_base/bin 및 $ catalina_base/lib 디렉토리가 존재하지 않는 경우.
    • log4J를 넣으십시오.Jar 및 Tomcat-juliadapters.”extras”에서 $ catalina_base/lib로 항아리
    • Tomcat-Juli를 넣으십시오.$ catalina_base/bin/tomcat-juli as “extras”에서 항아리.항아리
    • 보안 관리자와 함께 실행중인 경우 $ Catalina_Base/Conf/Catalina를 편집해야합니다.Tomcat-Juli의 다른 사본 사용에 맞게 조정하는 정책 파일.항아리.

참고 : 라이브러리는 $ catalina_base에 존재하는 경우 $ catalina_home의 동일한 라이브러리보다 우선적으로로드되기 때문에 작동합니다 .

참고 : Tomcat-Juli.Jar는 $ catalina_base /bin에서로드되어 $ catalina_base /lib가 부트 스트랩 프로세스의 일부로로드되어 모든 부트 스트랩 클래스가 빈에서로드됩니다.

이 log4J 구성은 기본 Java를 반영합니다.유도.Tomcat과 함께 제공되는 로깅 설정 : 관리자 및 호스트 관리자 앱 모두 개별 로그 파일을 얻고 다른 모든 것은 “Catalina로 이동합니다.로그 “로그 파일. 각 파일은 하루에 한 번 롤오버됩니다.

로깅에 포함 할 패키지에 대해 더 까다로울 수 있습니다. Tomcat은 엔진 및 호스트 이름별로 로거를 정의합니다. 예를 들어,보다 자세한 Catalina LocalHost 로그의 경우 Log4J의 끝에 추가하십시오.위의 속성. Log4J XML 기반 구성 파일 에서이 명명 규칙 (제곱 괄호 포함)을 사용하는 데 알려진 문제가 있으므로 향후 버전의 Log4J 가이 컨벤션을 허용 할 때까지 설명대로 속성 파일을 사용하는 것이 좋습니다.

log4J.나무꾼.org.아파치.카탈리나.핵심.컨테이너베이스.[카탈리나].[LocalHost] = Debug log4J.나무꾼.org.아파치.카탈리나.Core = Debug Log4J.나무꾼.org.아파치.카탈리나.세션 = 디버그

경고 : 디버그 수준은 메가 바이트의 로깅과 Tomcat의 느린 시작을 생성합니다. 이 수준은 내부 Tomcat 작업의 디버깅이 필요할 때 드물게 사용해야합니다.

웹 애플리케이션은 확실히 자체 LOG4J 구성을 사용해야합니다. 이것은 유효합니다 ~와 함께 위 구성. 당신은 비슷한 log4J를 배치 할 것입니다.웹 애플리케이션의 Web-Inf/Classes Directory의 속성 파일 및 log4jx.와이.지.Web-Inf/lib에 항아리. 그런 다음 패키지 레벨 로깅을 지정하십시오. 이것은 Commons-Logging이 필요하지 않은 * Log4J의 기본 설정이며, 더 많은 옵션을 위해 Log4J 문서를 참조해야합니다. 이 페이지는 부트 스트래핑 안내서로 만 사용됩니다.

  • 이것은 공통 클래스 로더를 통해 Log4J 라이브러리를 웹 응용 프로그램에 노출시킵니다. 자세한 내용은 클래스로드 문서를 참조하십시오. 이로 인해 Apache Commons Logging Library를 사용하는 웹 응용 프로그램 및 라이브러리는 기본 로깅 구현으로 Log4J를 자동으로 선택할 가능성이 높습니다.
  • 자바.유도.로깅 API는 여전히 웹 애플리케이션에서 직접 사용할 수 있습니다. $/conf/logging.속성 파일은 여전히 ​​Tomcat 스타트 업 스크립트에서 참조됩니다. 자세한 내용은이 페이지 소개 하위 섹션을 참조하십시오. $/conf/logging 제거.위의 단계 중 하나로 언급 된 속성 파일은 Java를 유발합니다.유도.ConsoleHandler를 사용하여 표준 로그 파일을 생성하지 않는 JRE의 기본 구성으로의 폴백 로그인. 모든 로그 파일이 Log4J에 의해 생성되고 있는지 확인해야합니다 ~ 전에 표준 메커니즘을 비활성화합니다.
  • 그만큼 로그 밸브에 액세스하십시오 그리고 ExtendedAccessLogValve 자체 포함 된 로깅 구현을 사용하여 사용하십시오 log4J를 사용하도록 구성 할 수 없습니다. 특정 구성 세부 정보는 밸브를 참조하십시오.

코멘트

알아채다: 이 의견 섹션은 Apache Tomcat의 문서 개선에 대한 제안을 수집합니다.

문제가 있고 도움이 필요한 경우 도움말 찾기 페이지를 읽고 Tomcat-Users 메일 링리스트에서 질문하십시오. 여기서 그런 질문을하지 마십시오. 이것은 Q & A 섹션이 아닙니다.

Apache 주석 시스템은 여기에 설명되어 있습니다. 주석이 구현되거나 유효하지 않은/오프 토피로 간주되면 중재자가 주석을 제거 할 수 있습니다.

Tomcat log4j 구성 단계별 구성

Apache Tomcat J2EE 서버

Juli Logging Library 및 구성은 Tomcat Installer와 함께 기본적으로 사용할 수 있습니다. 대신 Tomcat 내부 로깅에 log4J를 사용하려면 기존 Juli 라이브러리를 Log4J-Juli 통합으로 바꿔야합니다.

1. 기존 Juli 라이브러리 삭제 (Catalina_home/bin/Tomcat-Juli.JAR 파일) 및 기존 Tomcat Java 로깅 구성 파일 (Catalina_home/Conf/Logging.속성).

2. Juli Log4J Tomcat Library (Tomcat-Juli.Tomcat 다운로드에서 Jar)’ 엑스트라 섹션 (http : // tomcat.아파치.조직/다운로드 -70.CGI). 다운로드 된 파일을 Catalina_home/bin 디렉토리에 배치하십시오.

삼. Tomcat Juli 어댑터 라이브러리 (Tomcat-Juli-Adapters.Tomcat 다운로드에서 Jar)’ 엑스트라 섹션. 이 파일을 Catalina_home/Lib 디렉토리에 배치하십시오.

4. log4J (버전 1.2 이상), 다운로드 된 라이브러리 파일을 Catalina_home/Lib 디렉토리에 배치합니다.

5. 다음 위치에서 Log4J 구성 파일 작성 : Catalina_Home/Lib/Log4J.속성. 아래에서 LOG4J 구성을 확인하여 기본 Java 로깅 구성과 일치합니다.

6. Tomcat을 다시 시작하십시오.

LOG4J 구성 파일 기본 TomCat 로깅 설정과 일치합니다

log4J.rootlogger = info, Catalina # 모든 부록을 정의합니다 Log4J.appender.카탈리나 = org.아파치.log4J.DailyrollingFileAppender log4J.appender.카탈리나.파일 = $/logs/catalina. log4J.appender.카탈리나.부록 = true log4j.appender.카탈리나.인코딩 = UTF-8 # 롤오버 롤오버 로그 하루에 한 번 log4J.appender.카탈리나.DatePattern = '.'yyyy-mm-dd'.로그 'log4j.appender.카탈리나.레이아웃 = org.아파치.log4J.PatternLayout log4j.appender.카탈리나.공들여 나열한 것.ConferionPattern = %d [ %t] %-5p %c- %m %n log4j.appender.localhost = org.아파치.log4J.DailyrollingFileAppender log4J.appender.로컬 호스트.파일 = $/logs/localhost. log4J.appender.로컬 호스트.부록 = true log4j.appender.로컬 호스트.인코딩 = UTF-8 LOG4J.appender.로컬 호스트.DatePattern = '.'yyyy-mm-dd'.로그 'log4j.appender.로컬 호스트.레이아웃 = org.아파치.log4J.PatternLayout log4j.appender.로컬 호스트.공들여 나열한 것.ConferionPattern = %d [ %t] %-5p %c- %m %n log4j.appender.관리자 = org.아파치.log4J.DailyrollingFileAppender log4J.appender.관리자.파일 = $/logs/manager. log4J.appender.관리자.부록 = true log4j.appender.관리자.인코딩 = UTF-8 LOG4J.appender.관리자.DatePattern = '.'yyyy-mm-dd'.로그 'log4j.appender.관리자.레이아웃 = org.아파치.log4J.PatternLayout log4j.appender.관리자.공들여 나열한 것.ConferionPattern = %d [ %t] %-5p %c- %m %n log4j.appender.호스트 관리자 = org.아파치.log4J.DailyrollingFileAppender log4J.appender.호스트 관리자.file = $/logs/host-manager. log4J.appender.호스트 관리자.부록 = true log4j.appender.호스트 관리자.인코딩 = UTF-8 LOG4J.appender.호스트 관리자.DatePattern = '.'yyyy-mm-dd'.로그 'log4j.appender.호스트 관리자.레이아웃 = org.아파치.log4J.PatternLayout log4j.appender.호스트 관리자.공들여 나열한 것.ConferionPattern = %d [ %t] %-5p %c- %m %n log4j.appender.콘솔 = 조직.아파치.log4J.ConsolePender log4J.appender.콘솔.인코딩 = UTF-8 LOG4J.appender.콘솔.레이아웃 = org.아파치.log4J.PatternLayout log4j.appender.콘솔.공들여 나열한 것.converionPattern = %d [ %t] %-5p %c- %m %n # 부부가 어떤 로거 로그 로그 4J 로그 로그를 구성하는지 구성.나무꾼.org.아파치.카탈리나.핵심..[카탈리나].[LocalHost] = Info, LocalHost log4J.나무꾼.org.아파치.카탈리나.핵심.컨테이너베이스.[카탈리나].[로컬 호스트].[/manager] = Info, Manager Log4J.나무꾼.org.아파치.카탈리나.핵심.컨테이너베이스.[카탈리나].[로컬 호스트].[/host-Manager] = info, 호스트 관리자

Tomcat은 이제 모든 내부 로깅에 log4j를 사용합니다.

위의 구성을 이해하려면 아래 세부 정보를 확인하여 명확한보기를 얻으십시오

LOG4J의 구성 요소’S PatternLayout

%d 로깅 날짜. 곱슬 괄호로 날짜 패턴을 지정할 수 있습니다 ( %d) %c 완전히 자격을 갖춘 클래스 이름 (단순 클래스 이름 만 인쇄하기 위해 %c 사용) %t 로깅이 발생한 스레드의 이름 %f 로깅 이벤트의 프레임 이름 %p 로깅 레벨 %l 줄 번호 %m 실제 로깅 메시지 %n 라인 분리기 (새로운 라인을 강제로 추가)

다음은 패턴 예제와 그들이 생성 한 로그 항목 중 일부입니다

%d [ %t] %-5p %c- %m %n 2011-09-07 14 : 07 : 41,509 [메인] 정보 myntclass-실행.

%5p [%t] (%f :%l) -%m%n 정보 [main] (myntclass.Java : 12) - 실행.

아래 링크 : Log4J 체크 아웃에 대한 자세한 내용은 다음과 같습니다

http : // 로깅.아파치.org/log4j/index.HTML

© Copyright 또는 누락 된 크레딧 문제의 경우 저작권 페이지를 확인하십시오.

기사처럼. 공유하십시오.

  • 인쇄하려면 클릭하십시오 (새 창에서 열림)
  • 친구에 대한 링크를 이메일로 보내려면 클릭하십시오 (새 창에서 열린)
  • Reddit에서 공유하려면 클릭하십시오 (새 창에서 열림)
  • Pinterest에서 공유하려면 클릭하십시오 (새 창에서 열린)
  • LinkedIn에서 공유하려면 클릭하십시오 (새 창에서 열림)
  • WhatsApp에서 공유하려면 클릭하십시오 (새 창에서 열림)
  • 트위터에서 공유하려면 클릭하십시오 (새 창에서 열리십시오)
  • Facebook에서 공유하려면 클릭하십시오 (새 창에서 오픈)
  • Tumblr에서 공유하려면 클릭하십시오 (새 창에서 열림)
  • 주머니에 공유하려면 클릭하십시오 (새 창에서 열림)
  • Telegram에서 공유하려면 클릭하십시오 (새 창에서 열림)
  • Skype에서 공유하려면 클릭하십시오 (새 창에서 열린)

방법 : log4J2를 통해 Tomcat 9를 로그로 구성하십시오

Tomcat 9의 내부 로깅 (Catalina 및 Localhost)을 Log4J2로 어떻게 리디렉션 할 수 있습니까?? 이전 버전의 Tomcat 및 Log4J에 사용할 수있는 가이드가 많이 있지만 Tomcat 9 및 Log4J2와 관련하여 “완전한”것을 찾을 수 없었습니다. Apache Tomcat 9 문서는 “대체 로깅 프레임 워크에서 제공 한 지침”과 Apache Log4J 문서 상태 (2 인의 JAR 이름. 수정) :

  1. Catalina Home에서 log4j2/lib 및 log4j2/conf라는 디렉토리 세트 만들기.
  2. LOG4J-API-2 배치.12.0.JAR, LOG4J-CORE-2.12.0.JAR 및 LOG4J-APPSERVER-2.12.0.log4j2/lib 디렉토리의 Jar.
  3. log4j2-tomcat이라는 파일 생성.XML, LOG4J2-TOMCAT.JSON, LOG4J2-TOMCAT.YAML, LOG4J2-TOMCAT.YML 또는 LOG4J2-TOMCAT.log4j2/conf 디렉토리의 속성.
  4. setenv를 만들거나 수정하십시오.sh classpath = $ catalina_home/log4j2/lib/*를 포함하도록 Tomcat bin 디렉토리에서 sh

그러나 그 log4j2-tomcat에 넣을 것.* 구성 파일?

2019 년 7 월 5 일 12:33에 물었다

682 1 1 골드 배지 6 6은 배지 17 17 청동 배지

2 답변 2

Apache Tomcat 7 문서에서 샘플 속성 파일을 찾았지만 Log4J 1과 함께 사용하기위한 것이기 때문입니다.x, 나는 그것을 log4j2 속성 파일 구문에 조정해야했다. 결과는 다음과 같습니다

# '상태'는 log4j2 자체에서 로그 메시지를 표시합니다. monitierninterval = 30 status = warn 속성.로그 레벨.카탈리나 = 정보 속성.로그 레벨.LocalHost = 정보 속성.Layoutpattern.카탈리나 = %d %-5p [ %t] %-22.22C %M %N 속성.Layoutpattern.Localhost = %d %-5p [ %t] %-30.30c %m %n # crontriggerpolicy를 사용하여 한 달에 한 번 로그 롤오버. 재산.FiledatePattern.카탈리나 = %D 속성.FiledatePattern.localhost = %d 속성.Crontriggerschedule.카탈리나 = 0 0 1 * ? 재산.Crontriggerschedule. ? ## 부록 # n.비.: - '부록 = Catalina, LocalHost, Console' #이 식별자가 포함되어 있지 않기 때문에 '지정할 필요가 없습니다.'캐릭터. # - 하위 구성 요소 식별자 '정책'및 'Cron'은 임의로 # 선택됩니다. 실제 유형은 'type'속성을 통해 지정됩니다. # - 'filename'이 지정되지 않으므로 'DirectWriterollOverStrategy'는 자동으로 사용됩니다. appender.카탈리나.타입 = RollingFile Appender.카탈리나.이름 = Rollingfile-Catalina Appender.카탈리나.FilePattern = $/logs/catalina.$.로그 appender.카탈리나.공들여 나열한 것.type = PatternLayout Appender.카탈리나.공들여 나열한 것.패턴 = $ appender.카탈리나.정책.유형 = 정책 appender.카탈리나.정책.크론.타입 = crontriggeringpolicy appender.카탈리나.정책.크론.일정 = $ appender.카탈리나.정책.크론.EvaluateOnStartup = True Appender.카탈리나.FilePermissions = RW-R ----- Appender.카탈리나.파일 소유자 = Tomcat Appender.카탈리나.FileGroup = Adm Appender.로컬 호스트.타입 = RollingFile Appender.로컬 호스트.이름 = Rollingfile-localhost appender.로컬 호스트.FilePattern = $/logs/localhost.$..로컬 호스트.공들여 나열한 것.type = PatternLayout Appender.로컬 호스트.공들여 나열한 것.패턴 = $ appender.로컬 호스트.정책.유형 = 정책 appender.로컬 호스트.정책.크론.타입 = crontriggeringpolicy appender.로컬 호스트.정책.크론.일정 = $ appender.로컬 호스트.정책.크론.EvaluateOnStartup = True Appender.로컬 호스트.FilePermissions = RW-R ----- Appender.로컬 호스트.파일 소유자 = Tomcat Appender.로컬 호스트.Catalina에 계속 기록하고 싶다면 FileGroup = ADM # Uncomment.Log4J2가 인수 된 후에. #appender.콘솔.타입 = 콘솔 #appender.콘솔.이름 = stdout #appender.콘솔.공들여 나열한 것.type = PatternLayout ## 어떤 로거 로그를 부르는지 뿌리 글로거를 구성합니다.레벨 = $ rootlogger.AppenderRef.카탈리나.ref = rollingfile-catalina #RootLogger.AppenderRef.stdout.ref = stdout # 여기, 식별자에는 '.'캐릭터, 따라서 목록을 지정해야합니다. loggers = org.아파치.카탈리나.핵심.컨테이너베이스.[카탈리나].[로컬 호스트] 로거.org.아파치.카탈리나.핵심.컨테이너베이스.[카탈리나].[로컬 호스트].이름 = LocalHost Logger.org.아파치.카탈리나.핵심.컨테이너베이스.[카탈리나].[로컬 호스트].레벨 = $ 로거.org.아파치.카탈리나.핵심.컨테이너베이스.[카탈리나].[로컬 호스트].AppenderRef.로컬 호스트.ref = rollingfile-localhost 

Log4J2를 사용하는 주된 이유는 월간 로그 회전을 얻을 수 있었지만 Tomcat을 다시 시작하지 않고도 원하는 방식으로 쉽게 조정할 수 있습니다.