Log4J은 성가신 제한이있는 것처럼 보입니다 - 런타임에는 변수 대체가 작동하지 않는 것 같습니다. 이 예에서Log4J - 런타임 변수 대체
에게
파일 : Log4j.properties
FILE_PATTERN = % d의 ISO8601 {} % -5p %의 m %의 N
log4j.rootLogger = DEBUG, FileAppender
log4j.appender.FileAppender = org.apache.log4j.FileAppender log4j.appender.FileAppender.layout = org.apache.log4j.PatternLayout log4j.appender.FileAppender.layout .ConversionPattern = $ {} FILE_PATTERN 가 log4j.appender.FileAppender.File = log4jtest1.log
가 log4j.appender.FileAppender.Threshold = ERROR가
log4j.properties 파일 구성된 FileAppender 올바른 생산
출력 :파일 : log4jtest1.log
ERROR 샘플 오류 메시지 FATAL 샘플 치명적인 메시지
내가 런타임에 FileAppender를 만들려고하면 17,451,515,
import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
public class Main {
static final Logger logger = Logger.getLogger(Main.class);
public static void main(String[] args) throws Exception {
FileAppender appender = new FileAppender();
appender.setFile("log4test2.log");
PatternLayout pl = new PatternLayout("${file_pattern}");
appender.setLayout(pl);
appender.setName("log4jtest2");
appender.setThreshold(Level.ERROR);
appender.activateOptions();
logger.addAppender(appender);
logger.trace("Sample trace message");
logger.debug("Sample debug message");
logger.info("Sample info message");
logger.warn("Sample warn message");
logger.error("Sample error message");
logger.fatal("Sample fatal message");
}
}
테 출력은
파일입니다 log4jtest2.log
$ {FILE_PATTERN} $ {FILE_PATTERN}
누구나 문제를 설명하고 어떻게 할 수 있습니까? 고정 되니?
관련 질문 : 대체 할 변수를 읽으려면 응용 프로그램에서 ResourceBundle에 액세스 할 수 있습니까?
글쎄, 그래이 쉽게 해결 될하지만 불행히도이 허용되지 않습니다. 그것은 내가 log4j를 읽어야 만하는 것처럼 보입니다.(예 : Properties 클래스 사용) 런타임시 file_pattern 변수의 값을 직접 적용하십시오. – Adrian
변수 file_pattern이 Log4j.properties 파일에 정의되었습니다. – Adrian
$ {file_pattern}을 사용하여 특성 파일의 값을 참조 할 수 없습니다 특성 파일 외부. 코드에서 자바 변수를 사용해야합니다. Log4j가 해당 속성을 노출하는지 확인하고 파일을 읽지 않아도됩니다. 그렇지 않다면 당신은 올바른 것입니다 : Properties 클래스. –