将 Jersey JUL 日志记录重定向到 Log4j2

2024-01-02

我需要将 Jersey 请求/响应日志重定向到我的 log4j2。

我通过在我的设备上使用此代码启用了 Jersey 日志记录ApplicationJAXRS extends Application:

@Override
public Set<Class<?>> getClasses() {
    return new HashSet<Class<?>>() {{
        add(LoggingFilter.class);
    }};
    }

Jersey 似乎在内部使用 JUL(Java Logging),默认输出是 STDOUT。此时我可以在 Eclipse Console 上看到 STDOUT。

Log4j2 文档有一节关于JDK 日志适配器 http://logging.apache.org/log4j/2.0/log4j-jul/index.html。 它说

要使用 JDK Logging Adapter,您必须设置系统属性java.util.logging.manager to org.apache.logging.log4j.jul.LogManager

这必须通过命令行(即使用 -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager 参数)或使用系统.setProperty()在对 LogManager 或 Logger 进行任何调用之前。

要致电System.setProperty(*)在任何 Logger 调用之前,我尝试将其放在@PostConstruct in my Aplication class.

@PostConstruct
    public void init() {
        System.setProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager");
    }

我可以让它登录我的日志文件。

这是我的 log4j2.xml:

    <Appenders>
        <RollingFile name="RollingFile" fileName="${log-path}/${name}.log" 
            filePattern="${log-path}/${date:yyyy-MM}/${name}-%d{yyyy-MM-dd}-%i.log">
            <PatternLayout>
                <Pattern>%d{dd-MM-yy HH:mm:ss,SSS} %-5p [%t] (%F:%L) - %m%n</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
            <DefaultRolloverStrategy max="10" />
        </RollingFile>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Root level="debug">
            <AppenderRef ref="Console" level="debug"/>
            <AppenderRef ref="RollingFile" level="debug"/>
        </Root>
    </Loggers>
</Configuration>

我想你必须设置启动时的系统属性 https://stackoverflow.com/questions/48303667/jul-adapter-not-working-for-jersey。将代码添加到您的 init 方法中以查看设置系统属性是否有效。

@PostConstruct
public void init() {
    String cn = "org.apache.logging.log4j.jul.LogManager";
    System.setProperty("java.util.logging.manager", cn);
    LogManager lm = LogManager.getLogManager();
    if (!cn.equals(lm.getClass().getName())) {
       try {
           ClassLoader.getSystemClassLoader().loadClass(cn);
       } catch (ClassNotFoundException cnfe) {
          throw new IllegalStateException("Jars not in system class path.", cnfe);
       }
       throw new IllegalStateException("Found " + lm.getClass().getName() + " set as launch param instead.");
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Jersey JUL 日志记录重定向到 Log4j2 的相关文章

  • Java Logger 未记录到 Netbeans 中的输出

    我正在 Netbeans 中使用 Maven 启动一个 Java 项目 我编写了一些代码来使用 Logger 类进行日志记录 但是 日志记录似乎不起作用 在程序开始时 我运行 Logger getLogger ProjectMainClas
  • 两个整数乘积的模

    我必须找到c c a b mod m a b c m 是 32 位整数 但 a b 可以超过 32 位 我正在尝试找出一种计算 c 的方法 而不使用 long 或任何 gt 32 位的数据类型 有任何想法吗 如果m是质数 事情可以简化吗 注
  • 垃圾收集器如何在幕后工作来收集死对象?

    我正在阅读有关垃圾收集的内容 众所周知 垃圾收集会收集死亡对象并回收内存 我的问题是 Collector 如何知道任何对象已死亡 它使用什么数据结构来跟踪活动对象 我正在研究这个问题 我发现GC实际上会跟踪活动对象 并标记它们 每个未标记的
  • 将巨大的模式编译成Java

    有两个主要工具提供了将 XSD 模式编译为 Java 的方法 xmlbeans 和 JAXB 问题是 XSD 模式确实很大 30MB 的 XML 文件 大部分模式在我的项目中没有使用 所以我可以注释掉大部分代码 但这不是一个好的解决方案 目
  • 在 Java 中如何找出哪个对象打开了文件?

    我需要找出答案哪个对象在我的 Java 应用程序中打开了一个文件 这是为了调试 因此欢迎使用工具或实用程序 如果发现哪个对象太具体了 这class也会很有帮助 这可能很棘手 您可以从使用分析器开始 例如VisualVM http visua
  • Android 无法解析日期异常

    当尝试解析发送到我的 Android 客户端的日期字符串时 我得到一个无法解析的日期 这是例外 java text ParseException 无法解析的日期 2018 09 18T00 00 00Z 位于 偏移量 19 在 java t
  • 如何在 ant 中为 junit 测试设置 file.encoding?

    我还没有完全完成file encoding 和 ant https stackoverflow com questions 1339352 how do i set dfile encoding within ants build xml
  • 提高 PostgreSQL 1 亿数据左连接查询性能

    我在用Postgresql 9 2 version Windows 7 64 bit RAM 6GB 这是一个Java企业项目 我必须在我的页面中显示订单相关信息 有三个表通过左连接连接在一起 Tables TV HD 389772 行 T
  • JDBC 时间戳和日期 GMT 问题

    我有一个 JDBC 日期列 如果我使用 getDate 则会得到 date 仅部分2009 年 10 月 2 日但如果我使用 getTimestamp 我会得到完整的 date 2009 年 10 月 2 日 13 56 78 890 这正
  • 不可变的最终变量应该始终是静态的吗? [复制]

    这个问题在这里已经有答案了 在java中 如果一个变量是不可变的并且是final的 那么它应该是一个静态类变量吗 我问这个问题是因为每次类的实例使用它时创建一个新对象似乎很浪费 因为无论如何它总是相同的 Example 每次调用方法时都会创
  • 轻松的反应

    我有一个与这里描述的类似的案例 动态更改RESTEasy服务返回类型 https stackoverflow com questions 3786781 dynamically change resteasy service return
  • hibernate 6.0.2.Final 和 spring boot 2.7.0 的entityManagerFactory bean 未配置问题

    所以最近我想升级我的 Spring Boot 项目项目的一些依赖项 特别是这些组件 雅加达 EE 9 弹簧靴2 7 休眠 6 0 2 Final 完成此操作后 所有更新和代码折射 更新将 javax 导入到 jakarta 以及一些 hib
  • Java Swing - 如何禁用 JPanel?

    我有一些JComponents on a JPanel我想在按下 开始 按钮时禁用所有这些组件 目前 我通过以下方式显式禁用所有组件 component1 setEnabled false 但是有什么办法可以一次性禁用所有组件吗 我尝试禁用
  • 部署 .war 时出现 Glassfish 服务器错误:部署期间发生错误:准备应用程序时出现异常:资源无效

    我正在使用以下内容 NetBeans IDE 7 3 内部版本 201306052037 爪哇 1 7 0 17 Java HotSpot TM 64 位服务器虚拟机 23 7 b01 NetBeans 集成 GlassFish Serve
  • 将 JScrollPane 添加到 JFrame

    我有一个关于向 Java 框架添加组件的问题 我有一个带有两个按钮的 JPanel 和一个添加了 JTable 的 JScrollPane 我想将这两个添加到 JFrame 中 我可以将 JPanel 添加到 JFrame 或将 JScro
  • Android S8+ 警告消息“不支持当前的显示尺寸设置,可能会出现意外行为”

    我在 Samsung S8 Android 7 中收到此警告消息 APP NAME 不支持当前的显示尺寸设置 可能会 行为出乎意料 它意味着什么以及如何删除它 谢谢 通过添加解决supports screens 机器人 xlargeScre
  • java XMLSerializer 避免复杂的空元素

    我有这个代码 DocumentBuilderFactory factory DocumentBuilderFactory newInstance DocumentBuilder builder factory newDocumentBuil
  • Log4j2 ThreadContext 映射不适用于parallelStream()

    我有以下示例代码 public class Test static System setProperty isThreadContextMapInheritable true private static final Logger LOGG
  • Java RMI - 客户端超时

    我正在使用 Java RMI 构建分布式系统 它必须支持服务器丢失 如果我的客户端使用 RMI 连接到服务器 如果该服务器出现故障 例如电缆问题 我的客户端应该会收到异常 以便它可以连接到其他服务器 但是当服务器出现故障时 我的客户端什么也
  • Java 11 - 将 Spring @PostConstruct 替换为 afterPropertiesSet 或使用 initMethod

    我正在使用 spring 应用程序 有时会使用 PostConstruct用于代码和测试中的设置 看来注释将被排除在外Java 11 https www baeldung com spring postconstruct predestro

随机推荐

  • 我可以使用 EL 从 JSP 访问枚举类的值吗?

    我有一个枚举类USState 我想遍历 JSP 中的状态 是否可以访问列表USState不首先将这样的列表设置为属性 似乎像枚举这样的静态东西应该始终可用 但我不知道如何做到这一点 这就是我正在寻找的 工作除外
  • 读取内存中的整个文件 VS 读取块

    我对 C 和编程还比较陌生 所以请耐心等待 我正在开发一个应用程序 需要读取一些文件并按块处理这些文件 例如 以 48 字节的块处理数据 我想知道什么是更好的 性能方面 在内存中一次读取整个文件然后处理它 或者以块的形式读取文件并直接处理它
  • 实体框架 - 联合导致“无法创建类型的常量值..”

    选择全部Schedulings 是活跃的 我有以下代码 var allSchedulesOnALine CurrentUser Lines SelectMany o gt o Scheduling Where o gt o Active v
  • 根据平均值对 R 数据框中的列重新排序

    我想根据每列的算术平均值对数据框的列重新排序 For S1 S2 S3 1 1 1 2 1 1 3 3 1 预期输出是 S3 S2 S1 1 1 1 1 1 2 1 3 3 在上述情况下 平均值为 S1 2 S2 1 6666 and S3
  • Java DecimalFormat 科学记数法问题

    我正在使用Java的十进制格式 https stackoverflow com questions 168802 where can i find a tutorial to get started learning jquery类以科学记
  • 使用动态规划查找三项式系数

    我正在尝试使用动态编程在Java中实现一个计算三项式系数的函数 我正在使用以下公式 T n k 1 if n 0 and k 0 T n k 0 if k lt n or k gt n T n k T n 1 k 1 T n 1 k T n
  • 是否可以在虾文件中渲染斑点图像?

    我愿意使用Gruff https github com topfunky gruff在虾文件中渲染一些图形 我想避免将图像写入磁盘的延迟 仅让 Prawn 读取它们 格鲁夫提供to blob方法 http www rubydoc info
  • 如何在 PySimple GUI 中根据按钮点击显示不同的布局? (持续窗口循环)

    我想知道是否有一种方法可以根据 PySimple GUI 中的按钮单击来管理不同的布局 我刚刚开始使用这个框架 我想找到导航菜单的最佳方式 不一定要使用不同的布局 但这让我想到了最直观的方法 我在想 当选择某个子菜单按钮时 可能会有一个布局
  • 如何计算质心

    我正在处理地理空间形状并在这里查看质心算法 http en wikipedia org wiki Centroid Centroid of polygon http en wikipedia org wiki Centroid Centro
  • 在 C++ 中格式化整数

    我有一个 8 位整数 我想按如下格式打印 XXX XX XXX 我想使用一个接受 int 并返回字符串的函数 有什么好的方法可以做到这一点 就我个人而言 我就是这样做的 可能不是解决问题的最快方法 也绝对不像egrunin 的函数那样可重用
  • scss模块(css module):从其他scss文件导入

    我目前正在转换我的 sass 样式以使用CSS 模块 https github com css modules css modules以避免风格冲突 我的理解是 它会生成唯一的类名 这使得如果我想定位在不同文件中定义的另一个组件 例如子组件
  • Chrome 无法连接到 websocket 服务器(操作码 -1)“握手已取消”

    我有一个使用自签名证书的安全 websocket 服务器 我无法从 chrome v44 0 2403 107 客户端连接到该服务器 它是我的测试服务器 它使用与我的应用程序服务器几乎相同的代码创建 我的应用程序服务器can连接到 我试过重
  • Android 8.1.0 中移动屏幕关闭时 BLE 扫描停止

    我将此权限放入清单文件中
  • Delphi XE3 及更高版本在退出时不保存打开的 IDE 选项卡

    我正在运行 win 7 64Bit Delphi XE3 当我在旧的 Delphi XE 中打开一个项目时 它会打开我上次保存该项目时打开的所有表单 如何让XE3有同样的动作 显然是一个简单的问题 但我找不到XE3中保存布局的设置 你必须将
  • .NET API 的 PayPal 异常:流不可读

    正在尝试处理付款 但我的客户遇到了例外情况 当我逐步执行付款流程时 当我尝试使用 OAuthTokenCredential 方法获取访问令牌时 我看到此异常 HttpConnection 执行中出现异常 流不可读 这在几天前才起作用 我确实
  • 警告:格式“%d”需要“int”类型的参数,但参数 2 的类型为“long int”[-Wformat=]

    这段代码是关于 比赛条件 调度和编译器行为在进程或线程同步中起着重要作用 演示同步需求的最简单场景来自尝试修改共享变量值的两个线程 进程之间创建的竞争条件 这通常会导致数据不一致和错误结果 下面的例子演示了这种情况 我是 C 语言新手 对这
  • 为什么读取镶木地板数据集需要比数据集大小更多的内存?

    我正在尝试使用 pyarrow 从 Python 中的 S3 读取镶木地板数据集 S3 UI 显示该路径的大小为 14 3 GB 总共 836 个对象 我在具有 64GB RAM 的 c4 8xlarge EC2 实例上运行代码 尽管 RA
  • Windows UI 自动化无法识别按钮控件

    我在尝试通过以下方式识别时遇到问题Windows 用户界面自动化里面的按钮控件通知区窗口 类名 工具栏Window32 我通过验证Windows 用户界面自动化部署在的工具视窗软件开发工具包这些 图标 是类型控件ControlType Bu
  • Cocoa Pods 错误 ld:找不到 -lPods 的库

    我从可可豆荚中收到了以前从未见过的错误 我已经让它与几个依赖项一起工作得很好 我最近通过 pod 添加了 TestFlightSDK 作为依赖项 但无法存档该项目 它可以很好地适应设备 但拒绝存档 还有其他人遇到过这个问题吗 ld libr
  • 将 Jersey JUL 日志记录重定向到 Log4j2

    我需要将 Jersey 请求 响应日志重定向到我的 log4j2 我通过在我的设备上使用此代码启用了 Jersey 日志记录ApplicationJAXRS extends Application Override public Set