我知道我的头衔不是很严格,我在这里尝试更具体。 我正在使用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>
答案 0 :(得分:1)
在您的示例中,我看到两种情况下日志的相对路径都相同,因此,如果您始终希望拥有该结构,则可以将路径定义为:
<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">
请记住,尽管除了用户自己使用的项目外,我不建议将其用于任何用途,因为如果用户从更深的文件夹级别运行应用程序,则可能会产生意想不到的结果。
答案 1 :(得分:0)
对于log4j2,可以使用
# May change log file path as per the need
property.filename = ${sys:user.dir}/logs/debug.log