Log4J2 - 在运行时分配文件附加器文件名

2023-12-14

我的类路径中有一个 log4j2.xml 配置文件。其中一个附加程序是文件附加程序,我想在 Java 应用程序运行时设置目标文件名。

根据docs我应该能够在 log4j2.xml 文件中使用双“$”和上下文前缀:

<appenders>
    <File name="MyFile" fileName="$${sys:logFilename}">
        <PatternLayout pattern="%-4r %d{${datestamp}} [%t] %-5level %logger{36} - %msg%n"/>
    </File>
</appenders>

其中“sys”前缀表示配置器将在系统属性中查找属性“logFilename”。因此,在应用程序中,我调用(相当早):

System.setProperty("logFilename", filename);

我还在 xml 文件中打开了 log4j2 的自动重新配置:

<configuration status="debug" monitorInterval="5">>

不幸的是,这没有任何效果,并且日志文件永远不会创建。一些 log4j2 状态输出如下:

2013-02-13 15:36:37,574 调试在 org.apache.logging.log4j.core.appender.FileAppender 类上为元素文件调用 createAppender 参数(fileName="${sys:logFilename}",append="null" 、锁定=“null”、名称=“MyFile”、immediateFlush=“null”、suppressExceptions=“null”、bufferedIO=“null”、PatternLayout(%-4r %d{yyyy-MM-dd/HH:mm:ss .SSS/zzz} [%t] %-5level %logger{36} - %msg%n), null)

2013-02-13 15:36:37,576 调试启动 FileManager ${sys:logFilename}

如何在运行时设置文件附加器中“fileName”的值?或者,如何在运行时简单地将新的文件附加器添加到根记录器?在 Log4j 2.0 中,大多数更改配置的 API 都是隐藏的。


罗杰斯FileAppender 不支持文件名上有两个美元符号,因为文件是在追加程序启动时打开的。您用两个美元符号表示您可能希望为每个事件使用不同的文件名。

用一个 $ (如${sys:logFilename}),系统将在系统属性中查找属性“logFilename”。

因此,log4j2.xml 应该具有:

<appenders>
    <File name="MyFile" fileName="${sys:logFilename}">
        <PatternLayout pattern="%-4r %d{${datestamp}} [%t] %-5level %logger{36} - %msg%n"/>
    </File>
</appenders>

Java 应用程序应设置系统属性:

System.setProperty("logFilename", filename);

and 重新配置记录器:

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

这会产生所需的行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Log4J2 - 在运行时分配文件附加器文件名 的相关文章

随机推荐

  • 如何使用 JQuery.support 检查浏览器是否为 Firefox?

    似乎 jQuery browser 在最新的 jQuery 中已被弃用 该文档建议我使用 jQuery support 我应该使用哪些支持测试来检查当前浏览器是否为 Firefox 您错过了 支持 方法的要点 您不检查用户是否使用 Fire
  • Python 名称阴影混淆[重复]

    这个问题在这里已经有答案了 所以我有一些与此类似的代码 此代码重现了我的问题 即使它没有做任何有用的事情 def fn l foo bar baz print map lambda f len f l for i f in enumerat
  • Windows Phone 8中如何解析Json数据

    我是 Windows Phone 8 开发新手 我正在开发需要解析 Json 的应用程序 所以我无法在Windows Phone 8中获取以下数据 response errorFlag 0 Score Detail 39 test date
  • 二进制转换函数

    我正在尝试使用我在下面用 C 编写的函数将十进制值转换为二进制值 我不明白为什么它打印 32 个零而不是二进制值 2 include
  • 聊天应用程序可滚动 div 或 Iframe

    使用 iframe 或可滚动 div 使聊天窗口可滚动的建议方法是什么 这两种技术的优缺点是什么 您会选择哪一个 为什么 谢谢 您可以创建一个脚本 将聊天嵌入到第三方网站中 从而创建 div or 主要有趣的差异 iframe Code 所
  • 如何在电子邮件中将 iOS 应用程序的深层链接显示为链接

    我在用着深层链接 for my react native应用程序让用户单击链接来打开我的应用程序并执行一些操作 我的问题是当我发送电子邮件时 使用 a href 标签并将正文作为 HTML 发送给具有这些深层链接的用户 例如myapp pr
  • 使用 awk 提取最大值和最小值

    如何使用下表查找最大值和最小值awk命令 20 90 60 30 55 75 80 85 10 15 99 95 55 95 70 20 9 35 85 75 我想要像 max 这样的输出value 99 and min 9 withgnu
  • sql azure 中的替代 xp_cmdshell

    XP CMDshell 的替代品是什么 它在 sql server 中工作正常 但sql azure不支持 那么 sql azure 的替代品是什么 我假设您需要命令行访问权限来访问 BCP 因为您正在尝试创建数据并将其上传 下载到平面或
  • Spark Streaming update_state_by_keys 用于数组聚合

    我有如下输入行 t1 文件1 1 1 1 t1 文件 1 1 2 3 t1 文件2 2 2 2 2 t2 文件 1 5 5 5 t2 文件2 1 1 2 2 输出如下所示 是相应数字的垂直相加 文件1 1 1 2 5 1 3 5 文件2 2
  • 如何使用 java 获取 Google 的 OAuth 请求令牌

    当我尝试访问 API 时 我很难从 google 获取请求令牌 我收到了标准 400 响应 我发送的请求几乎与他们提供的 OAuth 游乐场中生成的请求相同 我正在使用匿名秘密 密钥并构造了一个基本字符串 如下所示 GET https 3A
  • 如何将带条件的嵌套 foreach 循环转换为 LINQ

    我想问是否可以将下面的嵌套 foreach 循环转换为 LINQ 表达式 public interface IFoo bool IsCorrect IFoo foo void DoSomething IFoo foo List
  • Hibernate 问题 - “使用 @OneToMany 或 @ManyToMany 定位未映射的类”

    我正在适应 Hibernate Annotations 并且遇到了一个问题 希望有人可以帮助解决 我有 2 个实体 Section 和 ScopeTopic 该部分有一个 List 类成员 因此是一对多关系 当我运行单元测试时 我收到此异常
  • System.ArgumentException:具有相同键的条目已存在

    我的母版页 我使用手风琴菜单
  • PHP 邮件、抄送字段

    如何在此函数中包含 CC 字段 function mail attachment filename path mailto from mail from name replyto subject message file path file
  • 在 MySQL blob 中插入 python 二进制字符串对象

    我想将包含二进制数据的字符串对象插入 MySQL blob 列 但是 我不断收到 MySQL 语法错误 我制作了一个小脚本用于调试目的 import MySQLdb import array import random conn MySQL
  • 是否有适用于 Node.js 的作业调度程序库? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 是否有一些类似 cron 的库可以让我安排一些函数在特定时间运行 例如 15 30 而不是从现在开始的 x 小时等 如果没有这种库应该如何实现 我应
  • SQL Server LIKE 包含括号字符

    我在用SQL Server 2008 我有一个包含以下列的表 sampleData nvarchar max 其中一些行中此列的值是格式如下的列表 value1 value2 value3 我正在尝试编写一个简单的查询 只需检测左括号即可
  • 如何使用 Python 更改目录中的多个文件名

    我正在学习 Python 我的任务是 将 file 添加到目录中每个名称的开头 更改扩展名 目录当前包含 4 种不同类型 py TEXT rtf text 我有很多文件 每个文件都有不同的名称 每个文件有 7 个字符长 我能够更改扩展名 但
  • 正则表达式中的 ?= 是什么意思?

    我可以知道什么吗 正则表达式中的意思是 例如 这个表达式的意义是什么 d 是一种积极的前瞻 一种零宽度断言 它的意思是捕获的匹配后面必须跟有括号内的任何内容 但该部分不会被捕获 您的示例意味着匹配项后面需要跟零个或多个字符 然后是一个数字
  • Log4J2 - 在运行时分配文件附加器文件名

    我的类路径中有一个 log4j2 xml 配置文件 其中一个附加程序是文件附加程序 我想在 Java 应用程序运行时设置目标文件名 根据docs我应该能够在 log4j2 xml 文件中使用双 和上下文前缀