如何在log4j2.02中以编程方式配置Logger?

2024-01-14

我想使用 log4jwithout任何配置文件。 我想做的是:

logger = (Logger) LogManager.getLogger(this.getClass());
String pattern = "[%level] %m%n";
//do something to make this logger output to an local file "/xxx/yyy/zzz.log"

我找到了这个答案:以编程方式配置 Log4j 记录器 https://stackoverflow.com/questions/8965946/configuring-log4j-loggers-programmatically.

但是文档Logger#addAppender says: 这个方法是not通过公共 API 公开,主要用于单元测试。

我不确定在我的代码中使用此方法是否是正确的方法,或者是否有其他更好的解决方案来解决我的问题。


官方文档 http://logging.apache.org/log4j/2.x/manual/customconfig.html#Programatically_Adding_to_the_Current_Configuration显示一个示例:以编程方式添加到当前配置

final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();

Layout layout = PatternLayout.createLayout(PatternLayout.SIMPLE_CONVERSION_PATTERN, config, null, null,null, null);
Appender appender = FileAppender.createAppender("target/test.log", "false", "false", "File", "true", "false", "false", "4000", layout, null, "false", null, config);
appender.start();
config.addAppender(appender);

AppenderRef ref = AppenderRef.createAppenderRef("File", null, null);
AppenderRef[] refs = new AppenderRef[] {ref};
LoggerConfig loggerConfig = LoggerConfig.createLogger("false", "info", "org.apache.logging.log4j", "true", refs, null, config, null );
loggerConfig.addAppender(appender, null, null);
config.addLogger("org.apache.logging.log4j", loggerConfig);
ctx.updateLoggers();

由于这些限制:

  1. 如果配置文件发生更改,配置将重新加载,并且手动更改将丢失。
  2. 修改运行配置需要同步所有被调用的方法(addAppender 和 addLogger)。

该解决方案避免使用核心实现中的方法org.apache.logging.log4j.core.Logger,并且它避免了这样的脏转换:

import org.apache.logging.log4j.Logger;

Logger logger = (Logger) LogManager.getLogger(this.getClass());
((org.apache.logging.log4j.core.Logger) logger).addAppender(...); // Bypassing the public API 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在log4j2.02中以编程方式配置Logger? 的相关文章

  • java.lang.NoClassDefFoundError:org.apache.batik.dom.svg.SVGDOMImplementation

    我在链接到我的 Android LibGDX 项目的 Apache Batik 库时遇到了奇怪的问题 但让我们从头开始 在 IntelliJ Idea 中我有一个项目 其中包含三个模块 Main Android 和 Desktop 我强调的
  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List

随机推荐

  • 如何在Python中打印一个数字n次? [复制]

    这个问题在这里已经有答案了 如何在Python中打印一个数字n次 我可以像这样打印 A 5 次 print A 5 AAAAA 但不是 10 个 像这样 print 10 5 50 我想要的答案是10 10 10 10 10 我如何逃避数学
  • 将文件附加到存档而不读取/重写整个存档

    我有很多文件想要存储在一个存档文件中 我的第一个方法是将文件存储在压缩的 tarball 中 问题是 如果添加单个文件 我必须重写整个存档 我可以摆脱 gzip 压缩 但添加文件仍然很昂贵 您建议使用哪种其他存档格式来允许快速追加操作 Th
  • Laravel 迁移 - 创建时间戳时出现问题

    我正在尝试在我的 Laravel 实例上运行迁移 它们只是默认迁移 用户和密码重置 但是当它尝试创建时间戳时 它会抛出此错误 Illuminate Database QueryException SQLSTATE 42000 Syntax
  • 正则表达式中的可选字符

    任务非常简单 但我还没有想出一个好的解决方案 字符串可以包含数字 破折号和加号 或者仅包含数字 0 9 做了我需要的大部分工作 除了当用户输入像 这样的垃圾时 我在常规前瞻方面运气不佳 因为破折号和加号可能位于字符串中的任何位置 有效字符串
  • 来自 QDataStream 的 QT QString

    我正在使用缓冲区 并试图从中获取字符串 但不起作用 Example void myFunc QDataStream in quint8 v in gt gt v Ok I caught v value successfuly QString
  • 如何通过 grunt-contrib-uglify 按顺序缩小 js 文件?

    我有一个如下所示的目录 文件夹 b js 文件夹 jQuery js 文件夹 a js 文件夹 sub c js 我想将所有这些js文件缩小到一个js文件中in order jQuery js gt a js gt b js gt c js
  • VBA 多个循环匹配条件

    如果这是重复的 我深表歉意 因为我一直在搜索但没有找到答案 我对 VBA 以及它们如何构造循环很陌生 我正在尝试进行搜索和比较 我需要比较第一行中的值 看看它们是否与第二行匹配 如果不匹配 则继续移动到下一行 请参阅下面的我的代码 它运行时
  • 集群上运行的 Dask 程序出现文件未找到错误

    我有 4 台机器 M1 M2 M3 和 M4 调度程序 客户端 工作线程都在 M1 上运行 我已将 csv 文件放入 M1 中 其余的机器都是工人 当我在 dask 中使用 read csv 文件运行程序时 它给我错误 找不到文件 当您的一
  • 如何运行新的 gradle 任务?

    我在 build gradle 中创建了一个新的 gradle 任务 task callCL type Exec println hello commandLine rerun sh 假设运行 rerun sh bin bash cucum
  • 无法在 Windows 8 Metro 风格应用程序中使用 IPAddress 或类似类型

    我发现使用有困难System Net IPAddress或 Windows 8 Metro 应用程序中的任何类似类型 我正在创建一个将在 Intranet 环境中运行的应用程序 用户将使用 IPAddress 连接到远程服务器 但不知何故我
  • 如何调试复杂的 IF Excel 公式?

    我是一名学校老师 正在开发学校的评估系统 我应该怎么做才能纠正这个公式 IF H3 SUR IF Subject C3 lt 2 7 Not on track IF Subject C3 lt 3 29 On track IF Subjec
  • 卡夫卡消费者错误:标记协调员死亡

    我有一个在 Kafka 0 10 0 1 集群中有 10 个分区的主题 我有一个生成多个消费者线程的应用程序 对于这个主题 我生成了 5 个线程 我在我的应用程序日志中多次看到此条目 INFO AbstractCoordinator 600
  • Cython cimport 找不到 .pxd 模块

    已解决 请参阅编辑 3 假设包的结构如下 Some Package some package init py core init py definition pxd helper init py helper pxd helper pyx
  • 如何发送带有 header 参数的 HTTP 请求?

    一般来说 我对 javascript 和网络编程非常陌生 我需要一些帮助 我有一个 HTTP 请求 需要通过 javascript 发送 并需要将输出存储在变量中 我尝试仅使用呼叫网址 https api fantasydata net n
  • OpenXML SpreadsheetDocument SaveAs() 给出文件使用中错误

    我正在尝试使用从 ASP Net Core Web 应用程序调用的 OpenXMLPowerTools v4 5 3 2 DocumentFormat OpenXML v2 9 1 动态生成 Excel 电子表格 我已经验证能够正常生成电子
  • std::thread,在“this”上启动线程(从类本身内部)

    我正在尝试创建一个类 该类启动其成员方法之一的线程实例 当我在 main 中执行操作时 test myinstance std thread mythread myinstance 然后事情编译 但使用以下结构 include
  • 在 Android 上创建类似 iPhone 的徽章通知

    ALL 我到处都能看到有关如何使其适用于应用程序图标的回复 我的情况有点不同 在我的程序中 我有一个显示图像的 ListView 每个图像都与下面的对象相关联 我想做的是创建一个类似于 iPhone 徽章通知的设计 但适用于视图中的所有图像
  • Objective C 委托还是 C 风格的块回调?

    我正在设计一个类 每当有事情发生时就会 触发事件 这些事件往往与 UI 无关 我想知道这样做的最佳方法是什么 我一直在探索 代表们 我将定义一个委托类 在 init 函数中接受委托 并在事件发生时调用委托类上的方法 C型块 我将定义一个函数
  • 无法在 Mac OS Monterey 上找到代码签名机构

    我在这里更新我的问题 在顶部 所以任何阅读的人都会首先遇到最新的未解决的问题 为了回应亚历克斯 纳维的建议 我匆忙地更新了我的问题 的结果 bash3 2 Users jnorris codesign dv verbose 4 opt ho
  • 如何在log4j2.02中以编程方式配置Logger?

    我想使用 log4jwithout任何配置文件 我想做的是 logger Logger LogManager getLogger this getClass String pattern level m n do something to