使用 log4j2 的多个线程的不同日志文件

2023-12-02

我正在运行一个 Java 应用程序,其中调用多个线程,每个线程都有一些唯一的名称。现在我想为每个日志文件创建多个日志文件,日志文件的名称应该与线程名称相同。使用 log4j2 可以吗?请帮我写log4j2配置文件。

先感谢您。


我同意 RoutingAppender 是正确的选择。我最初将路由附加程序与 ${ctx:threadName} 查找结合使用,其中“ctx”使用 ThreadContext。我发现我必须在代码中添加这样一行:

ThreadContext.put("threadName", Thread.currentThread().getName());

虽然该代码可以工作,但它在代码设计中不可扩展。如果我要添加一个新的java.lang.Runnable对于代码库,我还必须包含该行。

相反,解决方案似乎是实现“org.apache.logging.log4j.core.lookup.StrLookup”并注册@PluginPluginManager像这样:

Class: ThreadLookup

package my.logging.package    
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.lookup.StrLookup;

@Plugin(name = "thread", category = StrLookup.CATEGORY)
public class ThreadLookup implements StrLookup {

@Override
public String lookup(String key) {
    return Thread.currentThread().getName();
}

@Override
public String lookup(LogEvent event, String key) {
    return event.getThreadName() == null ? Thread.currentThread().getName()
            : event.getThreadName();
}

}    

配置:log4j2.xml(packages的属性Configuration注册@PluginPluginManager)

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" packages="my.logging.package">
    <Appenders>
        <Routing name="Routing">
            <Routes pattern="$${thread:threadName}">
                <Route>
                    <RollingFile name="logFile-${thread:threadName}"
                    fileName="logs/concurrent-${thread:threadName}.log" filePattern="logs/concurrent-${thread:threadName}-%d{MM-dd-yyyy}-%i.log">
                    <PatternLayout pattern="%d %-5p [%t] %C{2} - %m%n" />
                    <Policies>
                        <SizeBasedTriggeringPolicy size="50 MB" />
                    </Policies>
                    <DefaultRolloverStrategy max="100" />
                </RollingFile>
            </Route>
        </Routes>
    </Routing>
    <Async name="async" bufferSize="1000" includeLocation="true">
        <AppenderRef ref="Routing" />
    </Async>
</Appenders>
<Loggers>
    <Root level="info">
        <AppenderRef ref="async" />
    </Root>
</Loggers>

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

使用 log4j2 的多个线程的不同日志文件 的相关文章

  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • 如何在 JPQL 或 HQL 中进行限制查询?

    在 Hibernate 3 中 有没有办法在 HQL 中执行相当于以下 MySQL 限制的操作 select from a table order by a table column desc limit 0 20 如果可能的话 我不想使用
  • 如何在 Java 中向时间戳添加/减去时区偏移量?

    我正在使用 JDK 8 并且玩过ZonedDateTime and Timestamp很多 但我仍然无法解决我面临的问题 假设我得到了格式化的Timestamp在格林威治标准时间 UTC 我的服务器位于某处 假设它设置为Asia Calcu
  • Android中如何使用JNI获取设备ID?

    我想从 c 获取 IMEIJNI 我使用下面的代码 但是遇到了未能获取的错误cls 它总是返回NULL 我检查了环境和上下文 它们都没有问题 为什么我不能得到Context班级 我在网上搜索了一下 有人说我们应该使用java lang Ob
  • Mockito 使用 @Mock 时将 Null 值注入到 Spring bean 中?

    由于我是 Spring Test MVC 的新手 我不明白这个问题 我从以下代码中获取了http markchensblog blogspot in search label Spring http markchensblog blogsp
  • 在 Java 中如何找出哪个对象打开了文件?

    我需要找出答案哪个对象在我的 Java 应用程序中打开了一个文件 这是为了调试 因此欢迎使用工具或实用程序 如果发现哪个对象太具体了 这class也会很有帮助 这可能很棘手 您可以从使用分析器开始 例如VisualVM http visua
  • 如何在字段值无效的情况下更改 Struts2 验证错误消息?

    我在 Web 表单上使用 Struts2 验证 如果字段假设为整数或日期 则
  • 使用数据库进行日志记录

    大多数日志似乎都是纯文本形式 而不是放入 MySQL 其他类型的数据库中 这是否有原因 在我看来 将它们放入数据库将使分析变得非常非常容易 但这会以牺牲速度还是其他什么为代价 我不太关心可移植性 显然你会有数据库连接的文本日志 我能想到两大
  • 从jar中获取资源

    我有包含文件的 jar myJar res endingRule txt myJar wordcalculator merger Marge class 在 Marge java 中我有代码 private static final Str
  • Akka 与现有 java 项目集成的示例

    如果我已经有现有的javaWeb 应用程序使用spring and servlet容器 将 Akka 集成到其中的正确方法是什么 就像我将会有Actor1 and Actor2互相沟通的 开始使用这些演员的切入点是什么 例如 1 把它放在那
  • 如何使用 JMagick 转换色彩空间?

    如何使用 JMagick API 转换色彩空间 例如 CMYK gt RGB 和 RGB gt CMYK None
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • 在 Java 中获取并存储子进程的输出

    我正在做一些需要我开始子处理 命令提示符 并在其上执行一些命令的事情 我需要从子进程获取输出并将其存储在文件或字符串中 这是我到目前为止所做的 但它不起作用 public static void main String args try R
  • 将 JavaFX FXML 对象分组在一起

    非常具有描述性和信息性的答案将从我这里获得价值 50 声望的赏金 我正在 JavaFX 中开发一个应用程序 对于视图 我使用 FXML
  • 列表过滤器内的 Java 8 lambda 列表

    示例 JSON id 1 products id 333 status Active id 222 status Inactive id 111 status Active id 2 products id 6 status Active
  • 在java中以原子方式获取多个锁

    我有以下代码 注意 为了可读性 我尽可能简化了代码 如果我忘记了任何关键部分 请告诉我 public class User private Relations relations public User relations new Rela
  • 为 Logstash 中的新字段设置 Elasticsearch Analyzer

    通过使用GROK filter 我们可以向Logstash添加新字段 但是 我想知道如何为该特定字段设置分析器 例如 我有一个新的 id 字段 其中有一个字段 例如a b 但是 Elasticsearch 附带的普通分析器会将其分解为a a
  • Java RMI - 客户端超时

    我正在使用 Java RMI 构建分布式系统 它必须支持服务器丢失 如果我的客户端使用 RMI 连接到服务器 如果该服务器出现故障 例如电缆问题 我的客户端应该会收到异常 以便它可以连接到其他服务器 但是当服务器出现故障时 我的客户端什么也
  • java'assert'和'if(){}else exit;'之间的区别

    java和java有什么区别assert and if else exit 我可以用吗if else exit代替assert 也许有点谷歌 您应该记住的主要事情是 if else 语句应该用于程序流程控制 而assert 关键字应该仅用于
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • HTML 字段集内容在 100% 高度溢出 (Chrome)

    我的 HTML 有问题fieldsetChrome 中的元素 我想要一个固定高度fieldset 其中有一个可滚动的div 一切看起来都很好 直到我把legend 当我这样做时 div从底部溢出fieldset 我还在 Firefox 中进
  • Python 3 包和脚本中导入的最佳实践

    考虑这个简单的文件夹结构 root Package1 x py y py Package2 z py Examples main py 现在我们的要求是 x py需要导入y py z py需要导入y py main py需要导入y py和z
  • “main”通常是一个非静态函数错误

    显示两个错误 main c 80 警告 main 通常是一个非静态函数 main c 88 错误 输入末尾处的预期声明或语句 我似乎找不到问题 花括号的数量是相等的 似乎是什么问题 include
  • SQL - 从一组结果中选择唯一的行

    我为这个问题绞尽脑汁已经有一段时间了 我还审查了其他问题 但没有成功 我遇到的问题是 我有一个结果 表列表 其中包含多行和列 注册 ID 日期 单位类型 005DTHGP 172 172 2007 09 11 生物酶 005DTHGP 19
  • 最小化 Java 函数调用开销

    I have 一段代码在我运行的每个测试中 函数调用都会产生大量开销 该代码是一个紧密循环 对数组 包含 4 800 万个元素 的每个元素执行一个非常简单的函数ints 运行代码 主要包括 for int y 1 y lt h y for
  • 使用 meshgrid 将 X,Y,Z 三元组转换为三个二维数组,用于 matplotlib 中的曲面图

    我是 Python 新手 所以请耐心等待 我很感激任何帮助 我拥有的 三个一维列表 xr yr zr 一个包含 x 值 另外两个包含 y 和 z 值 我想做的事 在 matplotlib 中创建 3D 等高线图 我意识到我需要使用以下方法将
  • 使用 ClickOnce 应用程序部署 COM 组件

    我们正在开发一个需要屏幕 录制 的 C WPF Net 4 0 应用程序 我们评估了 ByteScout屏幕截图SDK 提供免费试用 它完全满足我们的需要 然而 问题是我们的应用程序设计为由 ClickOnce 部署到我们客户的计算机 不在
  • 将 JSON 日期发送到 WCF 服务

    我想将 json 对象发布到我的 WCF 服务 我唯一的问题是他的日期属性 我从 jquery datepicker 获取日期 我想将其作为 c datetime 获取到我的服务中 我的服务 namespace Employee Servi
  • 如何向 TextChoices 添加额外数据?

    我如何添加额外的数据django db models TextChoices class Fruit models TextChoices APPLE myvalue True mylabel 这样 gt gt gt Fruit APPLE
  • YouTube 数据 API v3、Web 应用程序、403 使用限制访问未配置

    我在尝试访问 YouTube Data API v3 时遇到问题 这是每当我发送有效请求时收到的 json 响应 error errors domain usageLimits reason accessNotConfigured mess
  • 在列表中添加奇数

    我试图找到给定范围内所有奇数的总和 但我不知道如何指定哪些数字是奇数 我的教授说使用 for num in Numbers 来访问范围内的元素 这是我到目前为止所拥有的 numbers range 0 10 def addOddNumber
  • Mozilla WebApp Manifest 要求提供 HTTP 标头

    我已经搜索了几个小时 但找不到解决方案 目前我想将第一个 Web 应用程序上传到 Mozillas 新平台 第二步是添加清单文件 我从以下位置获取信息here并尝试使用名称manifest webapp构建清单但结果是以下消息 Your m
  • Flutter IOS FCM 推送通知未进入通知栏

    我是 Flutter 和 IOS 的新手 我正在为 Android 和 IOS 配置 FCM 推送通知 对于 android 它工作正常 我已经通过引用此链接完成了https medium com jun chenying flutter
  • 为什么缺少/未声明 MonitorFromWindow? (C++/WINAPI)

    我正在尝试 Windows API 但遇到了很多问题 最近的是这样的 我包含了 Windows h 并暂时包含了 Winuser h 但缺少 MonitorFromWindow 以及相关字段 如 MONITOR DEFAULTTONEARE
  • 将二进制数据转换为可打印的十六进制数据

    In this有人评论说以下代码只能在 玩具 项目中使用 不幸的是 他没有回来说明为什么它不符合生产质量 所以我希望社区中的某个人能够向我保证代码没问题 因为我非常喜欢它 或找出问题所在 template lt class T1 class
  • meshgrid 和 ndgrid 之间的实际区别?

    这个讨论越来越激烈here关于 pageIdx 与ndgrid 我现在能明白了meshgrid但不是ndgrid 请用实际例子详细说明可以使用的地方 它实际上不一样meshgrid 值中有一些奇怪的反转 那么它应该用在哪里 假设您想知道数组
  • 在 Chrome Devtools 中看不到本地存储键值对

    我有一个 json 文件 用于存储使用 javascript 在我的页面上显示的数据 此 json 文件及其键值对在 Chrome 的开发工具中不可见或不可访问 该组件管理 json 文件 Takes a filename and a JS
  • 使用 Jquery Mobile 进行 XML 解析

    我有以下格式的 XML 我想提取 标题 和 子菜单 标签 并从中创建一个菜单栏结构 如下图所示
  • 如何处理龙卷风中的帕尔斯指令?

    我是龙卷风框架的新手 当我打开网址时torchado web RequestHandler 需要处理 parms 的字典 请看下面的代码 class MainHandler tornado web RequestHandler def ge
  • 使用 log4j2 的多个线程的不同日志文件

    我正在运行一个 Java 应用程序 其中调用多个线程 每个线程都有一些唯一的名称 现在我想为每个日志文件创建多个日志文件 日志文件的名称应该与线程名称相同 使用 log4j2 可以吗 请帮我写log4j2配置文件 先感谢您 我同意 Rout