gpt4 book ai didi

java - log4j2 - 更改默认根文件夹

转载 作者:行者123 更新时间:2023-12-02 01:57:08 25 4
gpt4 key购买 nike

我知道我的标题不是很勉强,我尝试在这里更具体。我正在使用 log4j2,到目前为止我的日志文件夹是:“C:\log”

我想将根驱动器(“C:”)更改为应用程序的安装位置。

例如:如果 jar 文件位于“d:\apps\jar.jar”,则日志路径将为“d:\log”如果 jar 文件位于“c:\apps\jar.jar”,则日志路径将为“c:\log”

我尝试将 log4j2.xml 中的行(如下)更改为:

fileName="${myapp.data.dir}/log/log_${date:dd-MM-yyyy_HH-mm-ss}.csv">

并在初始化记录器之前调用此函数:

private static void initialLog() {
Path dllPath = Paths.get(System.getProperty("user.dir"));
String driveLetter = dllPath.getRoot().toString().replace("\\", "");
System.setProperty("myapp.data.dir", driveLetter);
}

但是它不起作用。有什么想法吗?

我的旧 log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>

<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{dd/MM/yyyy HH:mm:ss:SSS} %p %c{1.} %m%n"/>
</Console>
<File name="log"
fileName="C:/log/log_${date:dd-MM-yyyy_HH-mm-ss}.csv">
<PatternLayout pattern="%d{dd/MM/yyyy,HH:mm:ss},%p,%m%n"
header="Date,Time,Type,Message%n" />
<Filters>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="NEUTRAL" />
<ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL" />
<ThresholdFilter level="debug" onMatch="DENY" onMismatch="NEUTRAL" />
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL" />
<ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL" />
</Filters>
</File>

</Appenders>
<Loggers>
<Root level="all">
<AppenderRef ref="log" />
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>

最佳答案

在您的示例中,我看到日志的相对路径在两种情况下都是相同的,因此如果您总是想要具有该结构,您可以将路径定义为:

<File name="log" 
fileName="../log/log_${date:dd-MM-yyyy_HH-mm-ss}.csv">

如果您想在运行时(重新)配置文件路径,请检查此 answer 。简而言之,在使用

设置系统属性后
 System.setProperty("myapp.data.dir", driveLetter);

您应该重新配置记录器:

org.apache.logging.log4j.core.LoggerContext ctx =
(org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
ctx.reconfigure();

请记住,在这种情况下,您应该编辑配置 xml 文件以使用系统属性,如下所示:

<File name="log" 
fileName="${sys:myapp.data.dir}/log/log_${date:dd-MM-yyyy_HH-mm-ss}.csv">
<小时/>

有趣的事实:有一种棘手的方法来使用根驱动器和构建路径:

<Properties>
<Property name="rootDrive">../../../../../../../../../../../../../../</Property>
</Properties>
<File name="log"
fileName="${rootDrive}/your/folder/structure/log/log_${date:dd-MM-yyyy_HH-mm-ss}.csv">

请记住,除了您自己使用的项目之外,我不建议将此用于任何用途,因为如果用户从更深的文件夹级别运行应用程序,可能会产生意外的结果。

关于java - log4j2 - 更改默认根文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52160123/

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