使用 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 的多个线程的不同日志文件 的相关文章

  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • Spring应用中Eureka健康检查的问题

    我正在开发一个基于 Spring 的应用程序 其中包含多个微服务 我的一个微服务充当尤里卡服务器 到目前为止一切正常 在我所有其他微服务中 用 EnableEurekaClient 我想启用这样的健康检查 应用程序 yml eureka c
  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • SQL Server 连接尝试记录在哪里?

    SQL Server 是否有用于尝试连接的外部日志文件或内部表 或者此类信息是否放置在 Windows 事件日志中的某个位置 您可以启用连接日志记录 对于 SQL Server 2008 您可以启用登录审核 在 SQL Server Man
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供

随机推荐

  • 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