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

log4j2-更改默认根文件夹

滑令
2023-03-14

例如:如果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);
}
<?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>

共有1个答案

齐坚成
2023-03-14

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

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

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

 System.setProperty("myapp.data.dir", driveLetter);

您应该重新配置记录器:

org.apache.logging.log4j.core.LoggerContext ctx =
    (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
ctx.reconfigure();
<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">
 类似资料:
  • 问题内容: 我正在制作一个使用Twitter凉亭的新项目。我创建了一个来维护我的所有依赖,如jquery。然后运行,将所有内容安装在名为的文件夹中。但是我需要将组件安装在其他文件夹中,例如。 我尝试将我的components.json编辑为: 要么: 如https://github.com/twitter/bower/pull/94所示,但它不起作用。 问题答案: 在项目根目录(与您的主目录相对)

  • Visual Studio代码中是否有方法更改用于新文件的默认语言? 默认情况下,如果您打开一个新文件,它将设置为“纯文本”,我希望它改为“HTML”。 我经常将HTML复制粘贴到VSC中,进行一些编辑,然后将其复制回我正在使用的CMS(CMS编辑器很糟糕)。我根本不想将代码保存在我的计算机上,只需使用 HTML 语法突出显示对其进行一些编辑,但我希望这是默认设置。

  • 我正在做一个新项目,使用twitter上的bower。我创建了一个来维护我的所有依赖项,比如jquery。然后我运行,它将所有内容安装在名为的文件夹中。但是我需要将组件安装在不同的文件夹中,例如。 我尝试将我的components.json编辑成: 或: 如中所示https://github.com/twitter/bower/pull/94但它不起作用。

  • 问题内容: 如何在Jenkins作为Windows服务运行的Windows上更改Jenkins默认文件夹。由于分区上空间不足,我想将文件夹更改为(每个版本占用〜10MB的可用空间)。我不想重新安装为Windows服务。我只想更改现有实例的文件夹。在缺乏全局解决方案的情况下,我只能专注于重定位文件夹。 在此先感谢您的帮助。 问题答案: 停止詹金斯服务 将文件夹移到 使用regedit,更改为 启动服

  • 如何更改Jenkins作为Windows服务运行的Windows上的Jenkins默认文件夹。由于分区上的空间不足(每个构建占用10MB左右的可用空间),我想将文件夹更改为。我不想将重新安装为Windows服务。我只想更改现有实例的文件夹。在缺乏全局解决方案的情况下,我只能专注于重新定位文件夹。 事先谢谢你的帮助。