首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SL4J2 -使用SL4J2 2.5在运行时追加文件名和位置

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

Stack Overflow用户
提问于 2015-12-27 01:40:06
回答 1查看 585关注 0票数 1

我试图使用SL4J 2.5根据操作系统类型更改文件的位置。查找其他堆栈溢出问题herehere。我想出了以下几点:

log4j.xml

代码语言:javascript
运行
复制
<?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

代码语言:javascript
运行
复制
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文件的文件夹。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-27 07:45:16

我创建了一个与你的程序非常相似的测试程序,在我的Mac上没有问题。

代码语言:javascript
运行
复制
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的内容与上面发布的配置相同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34476884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档