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

如何在log4j版本2中动态设置FileAppender的文件名?

沈博达
2023-03-14

在log4j 1.x中,我们可以直接使用FileAppender类的setFile方法

在 log4j 2.x 中,没有 setFile 方法可以存储 FileAppender 类。

我想在log4j2.properties中静态初始化appender的文件名,然后在运行时动态更改该appender的文件名。

如何实现这一点?

共有2个答案

山翼
2023-03-14

这是我的 log4j2 文件。当日志文件符合策略时,将创建新的日志文件。并且文件名在 appender.rolling.filePattern 中指定,由于 %d{yyyy-MM-dd}appender.rolling.policies.time.interval=1 ,系统每天都会创建一个新文件。您可以在 %d{yyyy-MM-dd-HH} 上添加更多内容,日志文件将每小时生成一次。

name=PropertiesConfig
property.filename= ./logs
appenders= rolling

appender.rolling.type=RollingFile
appender.rolling.name=RollingFile
appender.rolling.fileName=${filename}/here-are-my-log-propertieslogs.log
appender.rolling.layout.type=PatternLayout
appender.rolling.filePattern=${filename}/feedback-propertieslogs-%d{yyyy-MM-dd}-%i.log
appender.rolling.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1}:%L - %msg%n

# Rotate log file each day and keep 30 days worth
appender.rolling.policies.type=Policies
appender.rolling.policies.time.type=TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval=1
appender.rolling.policies.time.modulate=true
appender.rolling.policies.size.type=SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=5MB
appender.rolling.strategy.type=DefaultRolloverStrategy
appender.rolling.strategy.max=31

appender.rolling.strategy.delete.type=Delete
appender.rolling.strategy.delete.basePath=${filename}
appender.rolling.strategy.delete.maxDepth=1

appender.rolling.strategy.delete.ifLastModified.type=IfLastModified
appender.rolling.strategy.delete.ifLastModified.age=30d

appender.rolling.strategy.delete.ifAccumulatedFileCount.type=IfAccumulatedFileCount
appender.rolling.strategy.delete.ifAccumulatedFileCount.exceeds=30

appender.rolling.strategy.delete.ifAccumulatedFileSize.type=IfAccumulatedFileSize
appender.rolling.strategy.delete.ifAccumulatedFileSize.exceeds=100MB
黄兴业
2023-03-14

您应该添加一个新的FileAppender并停止旧的FileAppander。

看看log4j留档中的“初始化后以编程方式修改当前配置”

 类似资料:
  • 主要内容:FileAppender 参数,FileAppender 例子,把日志写入到多个文件Log4j 提供 org.apache.log4j.FileAppender 类将您的日志信息写入文件。 FileAppender 参数 FileAppender 具有以下可配置参数: 参数 描述 immediateFlush 此标志的默认值为 true,这意味着每次追加操作都会刷新文件的输出流。 encoding 我们可以使用任何字符编码。默认情况下,编码是特定于平台的编码方案。 thresho

  • 问题内容: 在log4j中,当使用具有BufferedIO = true和BufferSize = xxx属性(即启用了缓冲)的FileAppender时,我希望能够在正常关闭过程中刷新日志。有关如何执行此操作的任何想法? 问题答案:

  • 问题内容: 文件名根据月份而变化。每个月都有一个新文件。 如何设置将与可变文件路径一起使用的连接管理器? 问题答案: 您需要为 或 属性设置表达式,以 使用SSIS包变量动态修改Excel连接管理器。

  • 问题内容: 是否可以覆盖已经在中配置的附加程序的“文件”属性,而无需创建新的附加程序?如果是的话-怎么样? 这是这种情况:我有两个apender,A1是ConsoleAppender,而A2是FileAppender。A2的“文件”指出了一个一般性error.log: 此附加程序仅记录错误级别的事件,或更糟糕的是 。 现在,我希望根据导致错误的类将这些错误写入不同的文件中,因为正在创建实例的类有多

  • 我想使用KARATE框架的数据驱动特性动态地为JSON中的一些元素(从文件中读取)设置值。以下是更多的细节: 特性:从文件中读取json输入并迭代数据表值 背景: 附注:我尝试使用表方法调用其他特性文件。然而,我希望每个API保留一个特性文件,因此我想知道是否有任何可能的方式来实现上述方法

  • 但在Wire shark软件中,我们看到客户端只在TLSV1中与服务器进行对话。 参考链接:https://superuser.com/questions/747377/enable-tls-1-1-and-1-2-for-clients-on-java-7 在和中。但仍然在Wire shark软件中,我们看到客户端只在TLSV1中与服务器进行对话。 谁能告诉我们如何在客户端和服务器上执行TLS1

  • 问题内容: 我想要一个log4j配置,这样日志文件名应该像$ {System-name} log.log。也就是说,如果该应用程序在任何系统上启动,则无需更改配置文件或代码。它应该生成提到的日志文件名。谢谢。 问题答案: 我这样做: 1)通过以下方式初始化记录器: 2)在log4j.xml中我使用变量:

  • 我使用的是Spark1.4.0-RC2,这样我就可以将Python3与spark一起使用了。如果我将添加到我的.bashrc文件中,我就可以与Python3交互地运行spark。但是,如果我想在本地模式下运行一个独立程序,我会得到一个错误: 如何为驱动程序指定python的版本?设置不工作。