2014-12-30 1 views
7

로깅을 위해 Log4j2를 사용하도록 Tomcat 8을 구성하려고합니다.Log4j.properties 파일을 Log4j2와 작동하도록 변환

Logging in Tomcat using Log4j에 대한 참조를 찾았습니다. Tomcat의 내부 로깅과 일치하도록 Log4j를 구성하는 샘플 log4j.properties 파일을 제공합니다. 이것의 대부분은 Log4j2에 대한 변환 매우 간단 보이지만, 펜더에 로거를 매핑 끝에 섹션 나를 난처한 상황에 빠진 :

# 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 

사람이 Log4j2 작업이 구성을 전환 했습니까? Log4j2 설정 문서에서 작업 중이며 Log4j2 Architecture page을 읽었지만 Log4j2에서 컨테이너 매핑의 이런 종류의 작업을 수행하는 방법에 대한 많은 자료를 찾지 못했습니다.

각 컨테이너에 대해 별도의 구성을 할 수 있다고 가정하지만 예제 Log4j 구성과 같이 한 곳에 보관하는 것이 좋습니다.

+0

tomcat-users 메일 링리스트에서 묻는 질문을 했습니까? http://tomcat.apache.org/lists.html 전문가가있는 곳에서 정확한 답변을 얻을 수 있습니다. –

+0

아마도 Tomcat에서 log4j2를 사용할 수있는 유일한 기회는 log4j 1.x 브리지를 사용하는 것입니다. http://logging.apache.org/log4j/2.0/manual/migration.html –

+0

@Brett Okken 더 이상 8.5.11 이상에서는 true가 아닙니다. 7 월 7 일에 대한 엑스트라가 8.5.11 이후 종료되었습니다. log4j2를 사용해야하는 것은 log4j2 (코어, api, 7 월) (plus configfile)의 David Kellerman 스크립트와 3 개의 jar를 사용하는 것입니다. – jareeq

답변

1

Logging in Tomcat using Log4j에 대한 참조를 따라 tomcat-juli.jar을 bin 디렉토리에 추가했으며 tomcat-juli-adapters.jar도 lib 디렉토리에 추가했습니다. 나중에 log4j-api-2.1.jar, log4j-core-2.1.jar 및 log4j-1.2-api-2.1.jar를 lib 디렉토리에 추가했습니다.

그런 다음 log4j2.xml을 lib 디렉토리에 추가했습니다. 당신이 얻을 것이다

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="warn" name="catalina" packages=""> 

    <Appenders> 
     <RollingRandomAccessFile name="catalina" 
      fileName="${sys:catalina.base}/logs/catalina.log" 
      filePattern="${sys:catalina.base}/logs/catalina/$${date:yyyy-MM}/catalina-%d{yyyy-MM-dd}-%i.log.zip"> 
      <PatternLayout> 
       <Pattern>%d{MMM d, yyyy HH:mm:ss}: %5p (%F:%L) - %m%n</Pattern> 
      </PatternLayout> 
      <Policies> 
       <TimeBasedTriggeringPolicy /> 
       <SizeBasedTriggeringPolicy size="250 MB" /> 
      </Policies> 
      <DefaultRolloverStrategy max="100" /> 
     </RollingRandomAccessFile> 
    </Appenders> 
    <Loggers> 
     <!-- default loglevel for emaxx code --> 
     <logger name="org.apache.catalina" level="info"> 
      <appender-ref ref="catalina" /> 
     </logger> 
     <Root level="info"> 
      <appender-ref ref="catalina" /> 
     </Root> 
    </Loggers> 
</Configuration> 

이 방법은 모든 catalina.log 로그인 : 나는 아카이브 로그를 참아 시간과 크기를 기반으로 압연 구성을 사용하여 구성 매우 간단 유지했다. 나는 여전히 동일한 일을하기 위해 accessLog를 얻는 중입니다.
편집 : this 사이트를 찾았습니다. 이 방법으로 catalina.log에 액세스 로깅을 지정할 수 있습니다. (나는 자신의 appender에 로그인 할 수 없었다.)

관리자 및 호스트 관리자에 대한 로깅에 대해서는 신경 쓰지 않았습니다. 프로덕션 환경에서는 없기 때문에 로깅 할 수도 있습니다. catalina.log 너무. 나는 그것을 시험하지 않았다.

이것은 tomcat-7.0.42에서 테스트되었으며 tomcat8에서도 작동합니다.

13

이 질문을 한 후에 log4j2를 설정하는 데 더 시간을 할애했습니다.이 파일은 log4j2.xml입니다. Logging in Tomcat using Log4j에 설명 된 구성 을 모방 한 것입니다. 여러 개의 로거를 사용하여 메시지를 별도의 로그 파일로 라우팅합니다.

<?xml version="1.0" encoding="utf-8"?> 
<Configuration status="info"> 
    <Properties> 
    <Property name="logdir">${sys:catalina.base}/logs</Property> 
    <Property name="layout">%d [%t] %-5p %c- %m%n</Property> 
    </Properties> 
    <Appenders> 
    <Console name="CONSOLE" target="SYSTEM_OUT"> 
     <PatternLayout pattern="${layout}"/> 
    </Console> 
    <RollingFile name="CATALINA" 
     fileName="${logdir}/catalina.log" 
     filePattern="${logdir}/catalina.%d{yyyy-MM-dd}-%i.log"> 
     <PatternLayout pattern="${layout}"/> 
     <Policies> 
     <TimeBasedTriggeringPolicy /> 
     <SizeBasedTriggeringPolicy size="1 MB"/> 
     </Policies> 
     <DefaultRolloverStrategy max="10"/> 
    </RollingFile> 
    <RollingFile name="LOCALHOST" 
     fileName="${logdir}/localhost.log" 
     filePattern="${logdir}/localhost.%d{yyyy-MM-dd}-%i.log"> 
     <PatternLayout pattern="${layout}"/> 
     <Policies> 
     <TimeBasedTriggeringPolicy /> 
     <SizeBasedTriggeringPolicy size="1 MB"/> 
     </Policies> 
     <DefaultRolloverStrategy max="10"/> 
    </RollingFile> 
    <RollingFile name="MANAGER" 
     fileName="${logdir}/manager.log" 
     filePattern="${logdir}/manager.%d{yyyy-MM-dd}-%i.log"> 
     <PatternLayout pattern="${layout}"/> 
     <Policies> 
     <TimeBasedTriggeringPolicy /> 
     <SizeBasedTriggeringPolicy size="1 MB"/> 
     </Policies> 
     <DefaultRolloverStrategy max="10"/> 
    </RollingFile> 
    <RollingFile name="HOST-MANAGER" 
     fileName="${logdir}/host-manager.log" 
     filePattern="${logdir}/host-manager.%d{yyyy-MM-dd}-%i.log"> 
     <PatternLayout pattern="${layout}"/> 
     <Policies> 
     <TimeBasedTriggeringPolicy /> 
     <SizeBasedTriggeringPolicy size="1 MB"/> 
     </Policies> 
     <DefaultRolloverStrategy max="10"/> 
    </RollingFile> 
    </Appenders> 
    <Loggers> 
    <Root level="info"> 
     <AppenderRef ref="CATALINA"/> 
    </Root> 
    <Logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost]" 
     level="info" additivity="false"> 
     <AppenderRef ref="LOCALHOST"/> 
    </Logger> 
    <Logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]" 
     level="info" additivity="false"> 
     <AppenderRef ref="MANAGER"/> 
    </Logger> 
    <Logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager]" 
     level="info" additivity="false"> 
     <AppenderRef ref="HOST-MANAGER"/> 
    </Logger> 
    </Loggers> 
</Configuration> 

그러나, 제대로 작동이 점점 올바르게 구성 다른 파일 의 무리 을 받고 필요합니다. Paramita Banerjee에서 게시 한 tomcat 7 internal logging with log4j2.xml 이 도움이되었습니다.

이 파일은 CATALINA_HOME/bin/ 간다 :

    당신은 메이븐 저장소에서이 당기는 경우
  • tomcat-juli.jar

, 당신은 tomcat-extras-juli-8.0.15.jar (현재 버전과 같은 파일 이름이 뭔가를 얻을 수 있습니다 내가 이것을 썼을 때).그러나 tomcat-juli.jar –으로 이름을 바꿔야합니다. Tomcat 설정 스크립트는 에 CLASSPATH 설정에서 해당 이름을 사용합니다.

이 파일은 CATALINA_HOME/lib/로 이동합니다

  • commons-logging-1.2.jar
  • log4j-1.2-api-2.1.jar
  • log4j-api-2.1.jar
  • log4j-core-2.1.jar
  • log4j-jcl-2.1.jar
  • log4j-jul-2.1.jar
  • ,536,913 tomcat-juli-adapters-8.0.15.jar

log4j-web-2.1.jar 63,210

  • log4j-web-2.1.jar
  • 은 (는 웹 응용 프로그램을 배포 할 필요가 단지 수) –의 사용이 Using Log4j 2 in Web Applications에 설명되어 여기에 필요하지 않을 수 있습니다. log4j-1.2-api-2.1.jar은 이전 log4j 1.2 인터페이스를 사용하는 응용 프로그램이있는 경우에만 필요합니다.

    CATALINA_BASE/conf에서 나는 logging.properties을 비활성화했습니다.

    내가 톰캣에 대해 올바르게 CLASSPATHLOGGING_MANAGER 환경 변수를 정의하려면 다음 setenv.sh 스크립트를 사용했다. CATALINA_BASE/bin 또는 CATALINA_HOME/bin이됩니다. ( CATALINA_HOME/bin에 넣습니다.) 이 있으면 Tomcat의 시작 스크립트에 의해 실행됩니다. 좀 더 간단한 것을 선호 할 수도 있지만 이는 시작 스크립트의 스타일 인 을 유지하는 것입니다.

    LOG4J_JARS="log4j-core-2.1.jar log4j-api-2.1.jar log4j-jul-2.1.jar" 
    
    # make log4j2.xml available 
    if [ ! -z "$CLASSPATH" ] ; then CLASSPATH="$CLASSPATH": ; fi 
    CLASSPATH="$CLASSPATH""$CATALINA_BASE"/lib 
    
    # Add log4j2 jar files to CLASSPATH 
    for jar in $LOG4J_JARS ; do 
        if [ -r "$CATALINA_HOME"/lib/"$jar" ] ; then 
        CLASSPATH="$CLASSPATH":"$CATALINA_HOME"/lib/"$jar" 
        else 
        echo "Cannot find $CATALINA_HOME/lib/$jar" 
        echo "This file is needed to properly configure log4j2 for this program" 
        exit 1 
        fi 
    done 
    
    # use the logging manager from log4j-jul 
    LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager" 
    

    닉은 자신의 응답에서 언급 한 바와 같이, 또한 액세스 로그에 출력이있다. 나는 그걸로 아무 것도하려고하지 않았다.

    다른 사람들이 유용하다고 생각하길 바랍니다. 돌이켜 보면, 그것은 꽤 똑바로 것 같습니다. 그러나 많은 부품들이 “이어야하고, 작동하려면 정확히 ”이어야하며, 그것은 도전적이었습니다 (최소한 초보자의 경우).

  • +1

    log4j2.xml 파일이 있었지만 많은 구성이 불필요합니다. 여기에 단계를 대신 사용 : http://stackoverflow.com/a/35618384/399105 – bmaupin

    +0

    난 내 자신의 필요에 대한 몇 가지 조정을 기반으로 시간 기반 압연 (및 크기 기반이 아닌) 및 압축 로그 기본적으로 같은 : https : //gist.github.com/bmaupin/475a0cd6e8b374d876f5085846761fb6 – bmaupin

    +0

    매우 잘 문서화 된 대답, 나를 위해 일했습니다 –