Log4J – 运行时变量替换

2024-02-16

Log4J http://logging.apache.org/log4j/1.2/index.html似乎有一个恼人的限制——在运行时,变量替换似乎不起作用。

在这个例子中

文件:Log4j.properties

file_pattern=%d{ISO8601} %-5p %m%n

log4j.rootLogger=调试,FileAppender

log4j.appender.FileAppender=org.apache.log4j.FileAppender log4j.appender.FileAppender.layout=org.apache.log4j.PatternLayout log4j.appender.FileAppender.layout.ConversionPattern=${file_pattern} log4j.appender.FileAppender.File=log4jtest1.log

log4j.appender.FileAppender.Threshold=错误

log4j.properties 文件中配置的 FileAppender 会生成正确的输出:

文件:log4jtest1.log

错误 错误消息示例 FATAL 致命消息示例

如果我尝试在运行时创建 FileAppender

import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;

public class Main {
    static final Logger logger = Logger.getLogger(Main.class);

    public static void main(String[] args) throws Exception {

        FileAppender appender = new FileAppender();
        appender.setFile("log4test2.log");

        PatternLayout pl = new PatternLayout("${file_pattern}");

        appender.setLayout(pl);
        appender.setName("log4jtest2");
        appender.setThreshold(Level.ERROR);
        appender.activateOptions(); 
        logger.addAppender(appender);

        logger.trace("Sample trace message");
        logger.debug("Sample debug message");
        logger.info("Sample info message");
        logger.warn("Sample warn message");
        logger.error("Sample error message");
        logger.fatal("Sample fatal message");
    }
}

Te 输出为

文件:log4jtest2.log

${文件模式}${文件模式}

谁能解释一下问题是什么以及如何解决?

相关问题:应用程序可以访问 ResourceBundle 以读取要替换的变量吗?


变量替换的特点是属性配置器 http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PropertyConfigurator.html不是 PatternLayout 的。如果你查看你的代码,你永远不会定义 file_pattern 应该是什么。但为什么需要在代码中进行变量替换呢?只需这样做:

 PatternLayout pl = new PatternLayout("%d{ISO8601} %-5p %m%n");

如果您想在其他地方引用该字符串,只需将其设为常量即可。

编辑:您必须读取属性对象,但 PropertyConfigurator 可以采用属性对象而不是文件,因此您可以加载该对象,执行您需要执行的操作并将其传递给 PropertiesConfigurator,因此您只有一个配置路径。

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

Log4J – 运行时变量替换 的相关文章

  • 如何以编程方式找出我的 PermGen 空间使用情况?

    我正在尝试诊断java lang OutOfMemoryError PermGen Space在 Sun 的 Hotspot JVM 上运行时出现错误 并且想知道我的程序在不同时刻使用了多少 PermGen 空间 有没有办法以编程方式找出这
  • 如何用Java写入OS系统日志?

    Mac OS 有一个名为 Console 的应用程序 其中包含记录的消息 错误和故障 我相信 Windows 中的等效项是事件查看器 我想 Linux 上也有一个 但我不知道它是什么 也不知道它在哪里 是否可以像这样从 Java 输出获取消
  • 如何在java中压缩/解压tar.gz文件

    谁能告诉我在java中压缩和解压缩tar gzip文件的正确方法我一直在搜索 但我能找到的最多的是zip或gzip 单独 我写了一个包装器公共压缩 http commons apache org compress called jarchi
  • Java - 从配置文件加密/解密用户名和密码

    我们正忙于为客户开发 Java Web 服务 有两种可能的选择 将加密的用户名 密码存储在Web服务客户端上 从配置中读取 文件在客户端 解密并发送 将加密的用户名 密码存储在 Web 服务器上 从配置中读取 Web 服务器上的文件 解密并
  • 重构——套接字中的良好实践——简单的服务器-客户端 Swing 应用程序

    我使用单例和观察者模式编写了一个带有 Swing 接口的简单服务器 客户端程序 每个客户端都连接到服务器并可以发送消息 服务器将其收到的消息转发给其余的客户端 客户端使用 GUI 允许它们随时连接和断开与服务器的连接 该程序运行得很好 因为
  • Java中定义类型后同时初始化多个变量?

    这里需要一些语法方面的帮助 我正在尝试在定义类型后重新初始化多个变量 例如 int bonus sales x y 50 这工作正常 但是我想稍后在程序中将不同的值放入其中一些变量中 但我收到语法错误 bonus 25 x 38 sales
  • JBoss AS 5 中的共享库应该放在哪里?

    我是 Jboss 新手 但我有多个 Web 应用程序 每个应用程序都使用 spring hibernate 和其他开源库和 portlet 所以基本上现在每个 war 文件都包含这些 jar 文件 如何将这些 jar 移动到一个公共位置 以
  • Codility 钉板

    尝试了解 Codility NailingPlanks 的解决方案 问题链接 https app codility com programmers lessons 14 binary search algorithm nailing pla
  • 如何使用 BufferedReader 对象从 Java 中的一行读取多个整数值?

    我正在使用 BufferedReader 类读取 Java 程序中的输入 我想读取用户的输入 该用户可以在带空格的单行中输入多个整数数据 我想读取整数数组中的所有这些数据 输入格式 用户首先输入他 她想要输入的数字数量 然后在下一行中使用多
  • 中间件 API 的最佳实践是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们正在开发一个中间件 SDK 采用 C 和 Java 语言 供游戏开发人员 动画软件开发人员 阿凡达开
  • MessageDigest MD5 算法未返回我期望的结果

    我脑后的某个东西告诉我 我在这里遗漏了一些明显的东西 我正在将现有的 java 项目与第三方 api 集成 该第三方 api 使用 api 密钥的 md5 哈希进行身份验证 它对我不起作用 在调试过程中我意识到我生成的哈希值与他们提供的示例
  • 如何获取 Android 中临时文件的文件大小?

    如果我使用 openFileOutput 创建并写入临时文件 写入完成后如何获取文件大小 我希望这可以帮助你 File file new File selectedPath int file size Integer parseInt St
  • Java 类:匿名类、嵌套类、私有类

    有人能解释一下Java中匿名类 嵌套类和私有类之间的区别吗 我想知道与每个相关的运行时成本以及每个编译器的方法 这样我就可以掌握哪个最适合用于例如性能 编译器优化的潜力 内存使用以及其他 Java 编码人员的普遍可接受性 我所说的匿名类是指
  • 如何列出所有可用的 LookAndFeel 主题?

    如何列出所有可用的 LookAndFeel 主题 我想在 JComboBox 中显示以供用户选择 这真的很简单 public static UIManager LookAndFeelInfo getInstalledLookAndFeels
  • 在方法内声明类 - Final 关键字 [重复]

    这个问题在这里已经有答案了 给定方法中的以下内部类 IsSomething public class InnerMethod private int x public class Something private int y public
  • java中wav文件转换为字节数组

    我的项目是 阿塞拜疆语音的语音识别 我必须编写一个程序来转换wav文件到字节数组 如何将音频文件转换为byte 基本上如第一个答案中的片段所描述 但不是BufferedInputStream use AudioSystem getAudio
  • 如何使用 SAX Java 解析器读取注释文本

    我只想使用 Java 中的 SAX 解析器读取 XML 文件中对象标记的注释 这是我的文件的摘要
  • 无法在 BlackBerry Playbook 上设置音量

    我在更改黑莓游戏书的音量时遇到问题 首先 我将 Android 应用程序重新打包到 Palybook 应用程序 我需要使用搜索栏更改黑莓剧本的音量 并在搜索监听器中设置音频管理器音量 这是代码 audioManager AudioManag
  • JPA - 非主键字段上的 @OneToOne 关系不起作用

    我有一个 Spring Data JPA 后端 使用 Hibernate 作为 ORM 实现 这是模型 Person MailConfig id PK uid PK FK Person uid uid Entity
  • java数据结构模拟数据树

    我需要帮助定义使用什么方法 我有一个 SOAP 响应 给我一个 xml 文件 我需要在屏幕上显示 3 个相关列表 当您在第一个列表中选择一个项目时 相应的选择将出现在第二个列表中 依此类推 我只对从 xml 流中提取数据后如何有效地组织数据

随机推荐

  • 跨源请求被阻止

    所以我有这个 Go http 处理程序 它将一些 POST 内容存储到数据存储中 并检索一些其他信息作为响应 在后端我使用 func handleMessageQueue w http ResponseWriter r http Reque
  • Django 表单 - 附加到类元排除和小部件

    是否可以附加到继承表单的排除或小部件变量 到目前为止我已经进行了以下设置 class AddPropertyForm forms ModelForm num months forms ChoiceField choices MONTHS r
  • Eclipse 中的 ScalaTest 运行配置:找不到 Suite 类

    问题 我无法设置运行配置来为项目中的 Scalatest 运行 scalatest 重现步骤 右键单击 Scala Suite 然后单击 运行方式 gt 运行配置 在左侧 我看到了 ScalaTest 的配置模板 我单击 新建 并填写名称但
  • 如何将分层数据数据绑定到 WPF TreeView?

    该类型如下所示 class Category public string Name public string Message public ObservableCollection
  • 升级到 android sdk tools 20/platform sdk tools 12 后无法再启动应用程序

    我升级了我的 sdk 工具 现在我无法再从 Eclipse 启动应用程序 我仍然可以从命令行安装 当我启动时 我收到一个错误窗口和一个空的设备选择器 错误窗口显示 An error has occurred See error log fo
  • Google 日历 - 找不到请求的活动

    我在 Google 日历中创建了活动 然后将其发布到网站上 作为 Google 日历中的 HTML 代码 活动网址 单击 URL 后 它会将我重定向到 Google 日历 其中包含以下文本 找不到请求的事件 应该是什么问题呢 我希望人们应该
  • 在预排序的 DataFrame 上使用 pandas groupby 进行迭代顺序

    情况 我根据特定列中的值使用特定分类器对 DataFrame 中的行进行分类 我的目标是根据特定条件将结果附加到一个新列或另一列 代码看起来像这样 df pd DataFrame A list with classifier ids Onl
  • Android,ArrayAdapter的add()函数不起作用

    我有一个附加到 AutoCompleteTextView textView 组件的 ArrayAdapter myAdapter 一旦用户按下一个字符 我想用包含该字符的项目填充 AutoCompleteTextView 的下拉列表 我使用
  • 了解汇编中的 JMP 代码

    我最近刚刚触及汇编语言和调试的表面 我有以下代码 Address Hex dump Command Comments 006E3689 E8 C5F9FFFF CALL 006E3053 gt 006E368E E9 DB E9 gt 00
  • 如何更有效地通过 http 下载大文件?

    我正在尝试在 Kotlin 中下载大文件 这个问题 除了我使用 Kotlin 而不是 java 语法略有不同 val client OkHttpClient val request Request Builder url urlString
  • 什么是 JavaScript >>> 运算符以及如何使用它?

    我正在查看 Mozilla 中向 Array 添加过滤方法的代码 其中有一行代码让我感到困惑 var len this length gt gt gt 0 我以前从未见过在 JavaScript 中使用 gt gt gt 它是什么以及它有什
  • Pgadmin4 中的“加密密钥丢失”错误是什么以及如何解决?

    我正在使用 pgadmin 版本 6 1 我正在尝试使用本地计算机上的 pgadmin 连接到托管在 docker 中的 postgres 数据库 我使用以下命令来获取 docker 容器的 IP 地址 docker检查 f range N
  • iOS 中如何将地图区域限制为一个国家/地区?

    我正在使用mapkit 为iOS 制作一个应用程序 我想将地图的边界限制为特定的地区 国家 有没有办法做到这一点 无法告诉地图不要滚动到某个区域之外 我能想到的唯一方法是当您撞到栅栏之一时阻止用户滚动 下面的示例是在没有测试或编译的情况下编
  • WP7 模拟器浏览器不显示任何内容

    我使用 webbrowser 控件显示应用程序中的网页 但它只显示白屏 我尝试了 Internet Explorer 但它也没有显示任何内容 任何想法如何解决这个问题 预先非常感谢 Windows Phone 模拟器需要具有 DirectX
  • 如何使用OpenCV中的convertScaleAbs()函数?

    我试图在应用索贝尔过滤后将图像转换回灰度 我有以下代码 import numpy as np import matplotlib pyplot as plt import cv2 image cv2 imread train jpg img
  • 出于安全原因,escapeshellarg() 已被禁用

    当我想以任何形式上传任何内容时 我会看到警告 出于安全原因 escapeshellarg 已被禁用在我的网站上留言 我可以做什么来解决这个问题 我的框架是 codeigniter 最终版本 这是完整的警告 A PHP Error was e
  • 垂直可滚动组件的测量具有无限大的最大高度限制,这是不允许的

    我在 recyclerview 项目布局中使用 ComposeView 来与 jetpack compose 一起使用 当我打开屏幕时遇到奇怪的问题 Error java lang IllegalStateException Vertica
  • 选择元素上的 IE6/IE7 css 边框

    有谁有使用 CSS 来设置 Internet Explorer 中 选择 元素边框样式的解决方案吗 据我所知 这在 IE 中是不可能的 因为它使用操作系统组件 这里有一个link http v2 easy designs net artic
  • mysql错误1451

    我有 mysql 错误 代码为 1451 无法删除或更新父行 外键约束失败 online store admin osa admin logs 约束fk admins logs外键 aid 参考osa admins aid 这里sql语句
  • Log4J – 运行时变量替换

    Log4J http logging apache org log4j 1 2 index html似乎有一个恼人的限制 在运行时 变量替换似乎不起作用 在这个例子中 文件 Log4j properties file pattern d I