当前位置: 首页 > 知识库问答 >
问题:

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

蒋何平
2023-03-14

我正在尝试使用SL4J2.5根据OS类型更改文件的位置。抬头看看这里和这里的其他堆栈溢出问题。我想出了以下几点:

<?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>
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";
        }
    }

}

注:有。OS X文件的文件夹。

共有1个答案

乐正浩宕
2023-03-14

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

 类似资料:
  • 我在类路径中有一个log4j2.xml配置文件。其中一个附加器是一个文件附加器,我想在Java应用程序的运行时设置目标文件名。 根据文档,我应该能够在log4j2.xml文件中使用双“$”和上下文前缀: 其中“sys”前缀表示配置器将在系统属性中查找属性“logfilename”。所以在应用程序中,我调用(相当早的时候): 我还在xml文件中为log4j2打开了自动重新配置: 不幸的是,这没有任何

  • 我的grails应用程序中有一个配置错误,导致我的附加程序将输出发送到错误的地方,或者根本不发送。似乎有许多关于重复日志记录的问题,但我无法对我的情况应用任何答案。 下面是我的日志配置片段: 当我的程序运行时,输出将出现在、和中。直接发送到stdout的输出(绕过log4j)出现在catalina.out中 如果我设置 那么任何文件appender都不会被记录,但是stdout仍然会进入catal

  • 我在运行此应用程序时遇到以下错误: 自动连线依赖项的注入失败;嵌套异常为java.lang.IllegalArgumentException:无法解析值“${SERVER_PORT}”中的占位符“SERVER_PORT”,原因为:java.lang.IllegalArgumentException:无法解析值“${SERVER_PORT}”中的占位符“SERVER_PORT”

  • 我想为一个特定的方法调用MyMethod()创建并启用一个appender,该方法的日志输出应该放在“logFilePath”中的一个文件中。 我对log4j不是很熟悉,所以请随时建议一个替代的方法。下面是示例代码来解释我正在尝试的内容。 我按以下方式调用上述方法:

  • 我有两个jar文件。第一个只包含接口 在请求的基础上,我试图从中加载我的实现类。jar文件存在于某个文件夹中,在运行时使用URLClassLoader。 课程正在加载 我确信这是由于我使用不同的类加载器来加载类,但是我如何克服类之间的兼容性问题。 同样的代码可以在正常的J2SE环境中工作,但不能在JBoss环境中工作。 如果我的查询不清楚,请让我知道我也可以粘贴源代码。

  • 问题内容: 我被要求构建一个Java系统,该系统在运行时能够加载新代码(扩展)。我的代码运行时如何重新加载jar文件?或如何加载新的jar? 显然,由于持续的正常运行时间很重要,因此,我想增加在此过程中重新加载现有类的功能(如果这样做不会使事情复杂化)。 我应该注意什么?(将其视为两个不同的问题-一个关于在运行时重新加载类,另一个关于添加新类)。 问题答案: 用现有数据重新加载现有类可能会破坏事情