Log4J似乎有一個惱人的限制 - 在運行時,變量替換似乎不起作用。Log4J - 運行時變量替換
在這個例子中
文件:Log4j.properties
FILE_PATTERN =%d {ISO8601}%-5p%米%正
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
差錯採樣錯誤信息 FATAL樣品致命的消息
如果我試圖在運行時創建一個FileAppender
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}從屬性文件中引用值在屬性文件之外。在代碼中你需要使用java變量。檢查Log4j是否公開其屬性,如果它確實存在,則不需要自己讀取該文件。如果沒有,那麼你是正確的:屬性類。 –