按照習慣性思維,log4j2中xml中取系統屬性應該和log4j一樣,但是結果卻並不是我們想的這樣,存在一定的差別,log4j中的配置可參考 log4j配置文件動態指定日志文件名稱 。
現在就來看看到底有什么區別,java代碼這塊沒什么變化:
1 if (args.length >= 0) { 2 System.setProperty("log4fFile", args[0]); 3 } else { 4 System.setProperty("log4fFile", "runtimeTest.log"); 5 }
xml 配置文件:
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <configuration status="error"> 4 <appenders> 5 <Console name="Console" target="SYSTEM_OUT"> 6 <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/> 7 <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> 8 </Console> 9 <RollingFile name="RollingFile" fileName="log/${sys:log4fFile}" 10 filePattern="log/$${date:yyyy-MM-dd}/%d{yyyyMMddHHmmss}-${sys:log4fFile}.log"> 11 <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss/} %-5p] [%t] (%c:%L) - %m%n" /> 12 <Policies> 13 <TimeBasedTriggeringPolicy /> 14 <SizeBasedTriggeringPolicy size="50 MB"/> 15 </Policies> 16 <DefaultRolloverStrategy max="100" /> 17 </RollingFile> 18 </appenders> 19 <loggers> 20 <root level="debug"> 21 <appender-ref ref="RollingFile"/> 22 <appender-ref ref="Console"/> 23 </root> 24 25 </loggers> 26 </configuration>
哪個地方有區別 ,發現了么?
如果仔細觀察,可能會發現取值方式有一點變化 log4j中取值是${log4fFile}, log4j2中取值是${sys:log4fFile} ,log4j2中再按照log4j的方式去取值,是取不到的。