log4j2와 롤링 파일 appender를 사용하여 크기와 시간에 따라 파일을 롤백합니다.Log4j2 : RollingFile Appender에서 동적으로 파일명 변경
log4j2.xml
<RollingFile name="RollingFile" filename="log/${date:dd-MM-yyyy-HH}/currentRoll.log" filePattern="log/%d{dd-MM-yyyy-HH}/Roll-%i.log">
<PatternLayout>
<Pattern>%d{ISO8601}{GMT} %p %c{1.c} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="3KB"/>
</Policies>
</RollingFile>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout>
<Pattern>%d{ISO8601}{GMT} [%t] %-5p %c{1}: %m%n</Pattern>
</PatternLayout>
</Console>
</Appenders>
<loggers>
<Root level="info">
<AppenderRef ref="Async"/>
</Root>
</loggers>
</Configuration>
내 더미 로깅 클래스 : 여기 내 설정 파일 및 더미 예입니다
public class Helloworld extends TimerTask {
private static final Logger logger=LogManager.getLogger("HelloWorld");
@Override
public void run(){
logger.info("fake info message");
logger.info("another fake info message");
}
}
내 문제는 내 전류를 로그 (currentRoll.log) 파일은 일 때 처음 생성 된 폴더에 있습니다. 프로그램이 시작되었습니다. 나는 그것이 마지막에있을 필요가있다. 따라서 예를 들어 2014 년 11 월 25 일 오후 1시에 프로그램을 실행하기 시작한 경우 오후 3시에 나는 25-11-2014-15 폴더에는 없지만 25-11-2014에있는 현재 로그를보고 싶습니다. -13 폴더.
내 생각에 ${date:dd-MM-yyyy-HH}
은 동적으로 확인되지 않습니다.
<Configuration status="info" name="MyApp" packages="" monitorInterval="5">
과에서와 같이 "$$"사용 : 저는 모니터의 간격을 사용하여 자동 recofniguration 폴링을 시도 $${date:dd-MM-yyyy-HH}
을하지만이 나에게 다음과 같은 오류 제공 :
"2014-11-26 17:22:27,143 ERROR Unable to create file log/${date:dd-MM-yyyy-HH-mm}/currentRoll.log java.io.IOException: The filename, directory name, or volume label syntax is incorrect
내가 log4net가 datePattern을 가지고 알고를 이 문제를 해결할 수있는 매개 변수가 있지만 log4j2에 해당하는 항목을 찾을 수 없습니다.
어떻게해야할까요?
답장을 보내 주셔서 감사합니다. 로거를 구현한다고 말하는 것이지만 Appender를 구현하는 것으로 충분하지 않습니까? –
맞습니다. 저는 Appender에 대해 이야기하고 있습니다. 하지만, 내가 발견 한 것은 appender에서 출력 파일의 이름을 바꾸는 것이 까다로운 일이라는 것입니다. $$ {sys : somePropName}을 사용하고 로거가 호출되기 전에 코드에서 somePropName을 설정할 수 있습니다.귀하의 경우에는 $$을 통해 나중에 {date}를 대체 할 수 있는지 확신 할 수 없으며 (모든 속성이 지원되는 것은 아니며) 그렇다고하더라도 "일치"가 발생할 때 변수가 평가됩니다. 이것은 당신이 원하는 것일 수도 아닐 수도 있습니다. 기존의 로거 컨텍스트를 구성하는 대신 Java 코드로 전체 Logger를 프로그래밍 방식으로 구현하는 것이 더 쉽습니다. – jdv
질문에 대답하기 위해 appender 만 프로그래밍 방식으로 구현할 수 있는지, 기본 제공되는 기본 루트 Logger를 사용하는지는 알 수 없습니다. 나는 그렇지 않다고 추측 하겠지만, 나는 아직 그 길을 걷지 않았다. – jdv