我正在尝试使用SL4J 2.5根据操作系统类型更改文件的位置。查看其他Stack溢出问题here和here。我想出了以下内容:
的log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" name="JCal">
<Appenders>
<File name="MyFile" fileName="${sys:JCalEnv}">
<PatternLayout>
<Pattern>%d %p [%t] %c{2} - %m%n</Pattern>
</PatternLayout>
<!--<HTMLLayout>-->
<!--<title>JStreamer-log</title>-->
<!--</HTMLLayout>-->
</File>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%highlight{%d{HH:mm:ss.SSS} %-5level %logger{36}.%M() @%L - %msg%n}{FATAL=red blink, ERROR=red, WARN=yellow bold, INFO=black, DEBUG=green bold, TRACE=blue}"/>
</Console>
<Async name="Async">
<AppenderRef ref="MyFile"/>
</Async>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console"/>
<AppenderRef ref="Async"/>
</Root>
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="Async"/>
</Root>
</Loggers>
</Configuration>
Test.java
public class Test extends Application {
static {System.setProperty("JCalEnv", getUserAppDirectory());}
public static final Logger logger = LogManager.getLogger();
public static double JAVA_VERSION = getVersion();
public static void main(String[] args) {
launch(args);
}
static String getUserAppDirectory() {
General g = new General();
if (g.isMacOS()) {
return System.getProperty("user.home") + "/.JCal/logs/JCal-log.log";
}
else {
return System.getProperty("user.home") + "/JCal/logs/JCal-log.log";
}
}
}
当我运行该文件时,LOG4J会创建包含日志的${sys/JCalEnv}
文件。谁能告诉我怎么能根据操作系统类型给出它的位置和名称?
注意:有。 OS X文件的文件夹。
答案 0 :(得分:1)
我创建了一个与你的测试程序基本类似的测试程序,并且在我的Mac上没有问题。
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
/**
*
*/
public class FileSubstitution {
static {
System.setProperty("JCalEnv", getUserAppDirectory());
System.setProperty("log4j.configurationFile", "log4j-fileName.xml");
}
public static final Logger logger = LogManager.getLogger();
public static void main(String[] args) {
logger.info("Hello, World");
}
static String getUserAppDirectory() {
String osName = System.getProperty("os.name");
System.out.println("os = " + osName);
if (osName.contains("Mac")) {
return "target/.JCal/logs/JCal-log.log";
}
else {
return "target/JCal/logs/JCal-log.log";
}
}
}
log4j-fileName.xml与您在上面发布的配置具有相同的内容。