gpt4 book ai didi

java - SL4J2 - 使用 SL4J2 2.5 在运行时附加文件名和位置

转载 作者:行者123 更新时间:2023-11-30 07:42:19 25 4
gpt4 key购买 nike

我正在尝试使用 SL4J 2.5 根据操作系统类型更改文件的位置。查看其他堆栈溢出问题 herehere 。我想出了以下内容:

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>

测试.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} 文件。谁能告诉我如何根据操作系统类型给出它的位置和名称?

Note: There is . folder for OS X file.

最佳答案

我创建了一个与您的程序基本相似的测试程序,并且在我的 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 的内容与您上面发布的配置相同。

关于java - SL4J2 - 使用 SL4J2 2.5 在运行时附加文件名和位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34476884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com