2017-03-31 5 views
0

Log4j2가 내 RollingFile Appender의 filePattern에서 날짜를 읽는 데 문제가 있습니다. TimeBasedTriggeringPolicy를 추가하고 구성 파일을 다시 구성하면이 오류가 발생합니다.Log4j2-TimeBasedTriggeringPolicy가 활성화 된 경우 롤링 파일 작성 안 함

"ERROR 플러그인 유형 클래스 org.apache.logging.log4j.core.appender.RollingFileAppender 요소의 빌더 클래스에 필드를 삽입 할 수 없습니다. 롤링 파일 java.lang.IllegalStateException : 패턴에 날짜가 없습니다. "

log4j2 코드에 중단 점을 넣었습니다. 그 이유는 PatternProcessor 개체의 일부인 빈도 변수가 null이라는 것을 알았습니다. 왜 이것이 null인지 또는 null 이외의 값으로 설정하는 방법을 모르겠습니다.

TimeBasedTriggeringPolicy를 주석 처리하면 appender가 작업을 시작하고 로그를 내 파일에 씁니다.

: 여기
<?xml version="1.0" encoding="UTF-8"?> 
<Configuration monitorInterval="30" status="DEBUG"> 
    <Properties> 
     <Property name="baseDir">/logs/oracle/domains/cim</Property> 
    </Properties> 
    <Appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%highlight{%d{DEFAULT} [%t] %-5p %c -%m%n}"/> 
     </Console> 
     <RollingFile name="RollingFile" fileName="${baseDir}/cim.log" 
      filePattern="${baseDir}/cim-%d{yyyy-MM-dd}.log" append="true"> 
      <PatternLayout pattern="%d{DEFAULT} %-5p %c - %m%n"/> 
      <Policies> 
       <TimeBasedTriggeringPolicy interval="1" modulate="true"/> 
       <SizeBasedTriggeringPolicy size="10 MB" /> 
      </Policies> 
      <DefaultRolloverStrategy max="31"/> 
     </RollingFile> 
    </Appenders> 
    <Loggers> 
    <Logger name="com.cim" level="debug" additivity="true"> 
     <Appender-Ref ref="RollingFile"/> 
    </Logger> 
    <Root level="debug" additivity="false"> 
     <Appender-Ref ref="Console"/> 
    </Root> 
    </Loggers> 
</Configuration> 

위의 오류 메시지 후 초기 스택 추적입니다 : 여기
<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-api</artifactId> 
    <version>2.7</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-core</artifactId> 
    <version>2.7</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-slf4j-impl</artifactId> 
    <version>2.7</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-web</artifactId> 
    <version>2.6.2</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jcl-over-slf4j</artifactId> 
    <version>1.7.7</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.7.7</version> 
</dependency> 

내 log4j2.xml 파일입니다 : 여기

내 POM에서 log4j에 의존하다

at org.apache.logging.log4j.core.appender.rolling.PatternProcessor.getNextTime(PatternProcessor.java:119) 
    at org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy.initialize(TimeBasedTriggeringPolicy.java:59) 
    at org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy.initialize(CompositeTriggeringPolicy.java:52) 
    at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.setTriggeringPolicy(RollingFileManager.java:216) 
    at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.updateData(RollingFileManager.java:439) 
    at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:119) 
    at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:114) 
    at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:128) 
    at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:135) 
    at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:58) 
    at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:122) 
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:942) 
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:882) 
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:874) 
    at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:498) 
    at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:227) 
    at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:239) 
    at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:530) 
    at org.apache.logging.log4j.core.LoggerContext.onChange(LoggerContext.java:653) 
    at org.apache.logging.log4j.core.config.ConfiguratonFileWatcher$ReconfigurationRunnable.run(ConfiguratonFileWatcher.java:65) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

답변

1

패턴이이므로 "패턴에 날짜가 없습니다"라는 오류 메시지가 분명히 틀립니다., 에 날짜가 포함되어 있습니다.

그러나 패턴에 문제가 있습니다. 날짜 기반 정책과 크기 기반 정책이라는 두 가지 트리거 정책을 지정했습니다. 이 정책 트리거, 그것은 뭔가에 파일의 이름을 변경해야하는 경우 때문에

SizeBasedTriggeringPolicy는 또한 filePattern, 특히 %i에 무언가를 필요로한다. filePattern가 필요

app-1.log 
app-2.log 
app-3.log 
... 

가하는 %i 변환 패턴을 포함 할 경우 카운터를 넣어하는 방법 Log4j2에게 : 당신이 보통이 같은 로그를 통해 압연 파일의 무리로 끝날 크기 기반 정책으로

, 또는 파일의 이름을 바꿀 수 없습니다.

+0

도움 주셔서 감사합니다. 원래 log4j2.xml에서 % i을 (를) 갖고 있었지만 여전히 작동하지 않았습니다. 나는 내가 게시했을 때 그것을 놓기를 잊어 버린 문제를 해결하기 위해 여러 번 재구성했다. 나는 여전히 문제가 무엇인지 모르지만, 언젠가는 DB에 인터넷 연결을 끊어서 재부팅해야만했다. 물론 모든 것이 제대로 작동하기 시작했다. 다시 한번 감사드립니다. – iBeatzPrograms