2017-11-24 2 views
2

내 애플리케이션을 log4j 1.2에서 log4j2-2.8.1 버전으로 마이그레이션하는 중입니다. 다음은 log4j.properties 파일의 기존 1.x 구성입니다. log4j 1.2에서 log4j2로 마이그레이션

log4j.appender.JSERRORFILE=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.JSERRORFILE.File=${log4j.loglocation}/jserror.log 
log4j.appender.JSERRORFILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.JSERRORFILE.layout.ConversionPattern=%d %-5p %c - %m%n 

log4j.logger.com.app.JavascriptLogger=ERROR,JSERRORFILE 
log4j.additivity.com.app.JavascriptLogger=false 

는 해당 XML 구성 log4j2.xml이를 변환 :

<RollingFile name="JSERRORFILE" fileName="${log-path}/jserror.log"> 
<PatternLayout pattern="%d %-5p %c - %m%n" /> 
</RollingFile> 

<Logger name="com.app.JavascriptLogger" level="ERROR" additivity="false"> 
<AppenderRef ref="JSERRORFILE"/> 
</Logger> 

변환 후, 나는 다음과 같은 오류가 계속 :

org.apache.logging.log4j.core.config.ConfigurationException: Arguments given for element RollingFile are invalid 

어떤 도움

주시면 감사하겠습니다.

답변

0

RollingFile appender에게 롤오버 (트리거 정책) 및 롤오버 결과가 어떻게 나타나는지 알려줄 필요가 있습니다.

일정한 간격 (TimeBasedTriggeringPolicy 또는 CronTriggeringPolicy)으로 롤오버하려면 SimpleDateFormat과 같은 문자열이 포함 된 filePattern을 지정해야합니다. 큰 파일 (SizeBasedTriggeringPolicy)을 방지하기 위해 롤오버하려면 %i을 포함하는 filePattern을 지정해야합니다.

filePattern은 이전 (롤오버 된) 파일을 이동할 위치의 상대 경로 또는 절대 경로입니다.

예 :

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="warn" name="MyApp" packages=""> 
    <Appenders> 
    <RollingFile name="RollingFile" fileName="logs/app.log" 
       filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> 
     <PatternLayout> 
     <Pattern>%d %p %c{1.} [%t] %m%n</Pattern> 
     </PatternLayout> 
     <Policies> 
     <CronTriggeringPolicy schedule="0 0 0 * * ?"/> 
     <SizeBasedTriggeringPolicy size="250 MB"/> 
     </Policies> 
    </RollingFile> 
    </Appenders> 
    <Loggers> 
    <Root level="error"> 
     <AppenderRef ref="RollingFile"/> 
    </Root> 
    </Loggers> 
</Configuration> 

한 번 화재 일 위의 cron expression.

자세한 내용 및 더 많은 예제는 사용자 설명서 RollingFile appender section을 참조하십시오.

+0

저는 거의 항상 CronTriggeringPolicy를 TimeBasedTriggeringPolicy 대신 DailyRollingFileAppender의 대체품으로 사용하는 것이 좋습니다. – rgoers

+0

예제를 업데이트했습니다. 이 변화를 만들면서 나는 몇 가지 것을 알아 챘다. Log4j2 매뉴얼에는 구체적인 CronTriggeringPolicy 구체적인 예가 필요합니다. cron 표현식은 직관적이지 않습니다. 또한 TimeBased 트리거의 경우 트리거는 filePattern에만 의존합니다. cron 표현식을 사용하면 filePattern을 cron 주파수와 동기화 (유지 관리 중에 동기화 유지)하는 것은 사용자의 책임입니다. 이것은 Log4j2 매뉴얼에서 명시 적으로 언급해야합니다. –

+0

https://issues.apache.org/jira/browse/LOG4J2-2128 –

관련 문제