转换 Tomcat 的 log4j.properties 文件以与 Log4j2 一起使用

2024-01-21

我正在尝试将 Tomcat 8 配置为使用 Log4j2 进行日志记录。

我找到了这个参考使用Log4j登录Tomcat http://tomcat.apache.org/tomcat-8.0-doc/logging.html#Using_Log4j。它提供了一个示例 log4j.properties 文件,用于配置 Log4j 以匹配 Tomcat 的内部日志记录。其中大部分看起来很容易转换为 Log4j2,但最后将记录器映射到附加程序的部分让我难住了:

# Configure which loggers log to which appenders
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost] = INFO, LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager] =\
  INFO, MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager] =\
  INFO, HOST-MANAGER

有人转换此配置以与 Log4j2 一起使用吗?我一直在研究 Log4j2 配置文档并阅读了Log4j2 架构页面 http://logging.apache.org/log4j/2.0/manual/architecture.html,但我还没有找到太多关于如何在 Log4j2 中进行此类容器映射的材料。

我想我可以为每个容器进行单独的配置,但我更愿意将其保留在一个位置,如示例 Log4j 配置中所示。


问完这个问题后,我又花了一些时间来设置 log4j2,这就是log4j2.xml我想出的文件。它模仿配置 描述于使用Log4j登录Tomcat http://tomcat.apache.org/tomcat-8.0-doc/logging.html#Using_Log4j。它使用多个记录器来路由消息 分隔日志文件。

<?xml version="1.0" encoding="utf-8"?>
<Configuration status="info">
  <Properties>
    <Property name="logdir">${sys:catalina.base}/logs</Property>
    <Property name="layout">%d [%t] %-5p %c- %m%n</Property>
  </Properties>
  <Appenders>
    <Console name="CONSOLE" target="SYSTEM_OUT">
      <PatternLayout pattern="${layout}"/>
    </Console>
    <RollingFile name="CATALINA"
        fileName="${logdir}/catalina.log"
        filePattern="${logdir}/catalina.%d{yyyy-MM-dd}-%i.log">
      <PatternLayout pattern="${layout}"/>
      <Policies>
        <TimeBasedTriggeringPolicy />
        <SizeBasedTriggeringPolicy size="1 MB"/>
      </Policies>
      <DefaultRolloverStrategy max="10"/>
    </RollingFile>
    <RollingFile name="LOCALHOST"
        fileName="${logdir}/localhost.log"
        filePattern="${logdir}/localhost.%d{yyyy-MM-dd}-%i.log">
      <PatternLayout pattern="${layout}"/>
      <Policies>
        <TimeBasedTriggeringPolicy />
        <SizeBasedTriggeringPolicy size="1 MB"/>
      </Policies>
      <DefaultRolloverStrategy max="10"/>
    </RollingFile>
    <RollingFile name="MANAGER"
        fileName="${logdir}/manager.log"
        filePattern="${logdir}/manager.%d{yyyy-MM-dd}-%i.log">
      <PatternLayout pattern="${layout}"/>
      <Policies>
        <TimeBasedTriggeringPolicy />
        <SizeBasedTriggeringPolicy size="1 MB"/>
      </Policies>
      <DefaultRolloverStrategy max="10"/>
    </RollingFile>
    <RollingFile name="HOST-MANAGER"
        fileName="${logdir}/host-manager.log"
        filePattern="${logdir}/host-manager.%d{yyyy-MM-dd}-%i.log">
      <PatternLayout pattern="${layout}"/>
      <Policies>
        <TimeBasedTriggeringPolicy />
        <SizeBasedTriggeringPolicy size="1 MB"/>
      </Policies>
      <DefaultRolloverStrategy max="10"/>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="CATALINA"/>
    </Root>
    <Logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost]"
        level="info" additivity="false">
      <AppenderRef ref="LOCALHOST"/>
    </Logger>
    <Logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]"
        level="info" additivity="false">
      <AppenderRef ref="MANAGER"/>
    </Logger>
    <Logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager]"
        level="info" additivity="false">
      <AppenderRef ref="HOST-MANAGER"/>
    </Logger>
  </Loggers>
</Configuration>

然而,要让它正常工作需要得到 一堆其他文件 配置正确。这tomcat 7 使用 log4j2.xml 进行内部日志记录 https://stackoverflow.com/questions/28446085/tomcat-7-internal-logging-with-log4j2-xmlParamita Banerjee 的发帖对此很有帮助。

这个文件进入CATALINA_HOME/bin/:

  • tomcat-juli.jar

如果您从 Maven 存储库中提取此文件,您将获得一个文件 命名为类似的东西tomcat-extras-juli-8.0.15.jar(当前的 我写这篇文章时的版本)。但是,需要将其重命名为tomcat-juli.jar– Tomcat 安装脚本在中使用该名称 设置 CLASSPATH。

这些文件进入CATALINA_HOME/lib/:

  • commons-logging-1.2.jar
  • log4j-1.2-api-2.1.jar
  • log4j-api-2.1.jar
  • log4j-core-2.1.jar
  • log4j-jcl-2.1.jar
  • log4j-jul-2.1.jar
  • log4j-web-2.1.jar
  • tomcat-juli-adapters-8.0.15.jar

log4j-web-2.1.jar这里可能不需要(它可能只需要与您的 Web 应用程序一起部署)——它的使用描述于在 Web 应用程序中使用 Log4j 2 http://logging.apache.org/log4j/2.x/manual/webapp.html. log4j-1.2-api-2.1.jar仅当您有使用的应用程序时才需要 较旧的 log4j 1.2 接口。

In CATALINA_BASE/conf,我禁用了logging.properties.

我用了以下setenv.sh脚本来定义CLASSPATH and LOGGING_MANAGERTomcat 的环境变量正确。它可以进入CATALINA_BASE/bin或进入CATALINA_HOME/bin。 (我把它放入CATALINA_HOME/bin。)如果是,则由 Tomcat 的启动脚本执行 展示。您可能更喜欢简单的东西,但这符合 启动脚本的样式。

LOG4J_JARS="log4j-core-2.1.jar log4j-api-2.1.jar log4j-jul-2.1.jar"

# make log4j2.xml available
if [ ! -z "$CLASSPATH" ] ; then CLASSPATH="$CLASSPATH": ; fi
CLASSPATH="$CLASSPATH""$CATALINA_BASE"/lib

# Add log4j2 jar files to CLASSPATH
for jar in $LOG4J_JARS ; do
  if [ -r "$CATALINA_HOME"/lib/"$jar" ] ; then
    CLASSPATH="$CLASSPATH":"$CATALINA_HOME"/lib/"$jar"
  else
    echo "Cannot find $CATALINA_HOME/lib/$jar"
    echo "This file is needed to properly configure log4j2 for this program"
    exit 1
  fi
done

# use the logging manager from log4j-jul
LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager"

正如尼克在他的回复中提到的,还有输出到 访问日志。我也没有尝试对此做任何事情。

我希望其他人觉得这很有用。回想起来,似乎很漂亮 直截了当。然而,有很多部分必须 “恰到好处”才能发挥作用,这是一个挑战(至少对于 新手)。

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

转换 Tomcat 的 log4j.properties 文件以与 Log4j2 一起使用 的相关文章

  • .NET Web API - 添加日志记录

    我正在寻找有关处理 API 日志记录的最佳方法的帮助 我想将所有请求和响应记录到 sql 或文本文件 如果这是最好的方法 目前我已经在 SQL Server 的日志表中插入一行 我使用名为 LogAction 的静态方法来执行此操作 并在
  • Tomcat 8 上的 PHP

    我找到了很多如何让 PHP 在 Tomcat 上运行的指南 但都是以前的版本 我尝试了所有这些 但我所能显示的只是一个空白页面 并且代码仍然没有被触发 我知道 Tomcat 是为 Java 应用程序而不是 PHP 构建的 但我需要找到一种使
  • 是否值得清理 Filter 中的 ThreadLocals 来解决线程池相关问题?

    简而言之 tomcat 使用线程池 因此线程被重用 一些图书馆使用ThreadLocal变量 但不要清理它们 使用 remove 所以实际上它们将 脏 线程返回到池中 Tomcat 具有在关闭时检测这些事情并清理线程局部变量的新功能 但这意
  • Spark 执行器 STDOUT 到 Kubernetes STDOUT

    我在 Spark Worker 中运行的 Spark 应用程序将执行程序日志输出到特定文件路径 worker home directory app xxxxxxxx 0 stdout I used log4j properties将日志从
  • UTF-8 在 Python 日志记录中,如何?

    我正在尝试使用 Python 的日志记录包将 UTF 8 编码的字符串记录到文件中 作为一个玩具示例 import logging def logging test handler logging FileHandler home ted
  • 从 pandas udf 记录

    我正在尝试从 python 转换中调用的 pandas udf 进行日志记录 因为在执行器上调用的代码不会显示在驱动程序的日志中 我一直在寻找一些选项 但到目前为止最接近的选项是这个one https stackoverflow com q
  • 日志记录在 Android 设备上实际上有什么作用?

    我一直在 Android 示例中看到这样的代码 try catch Exception e Log e Error e getMessage 什么是Log e实际上在物理设备上做什么 它进入系统日志 开发人员可以通过 SDK 工具访问该日志
  • Tomcat 托管具有多个 SSL 证书的多个虚拟主机

    例如 我有一台使用 Tomcat 7 托管多个网站的服务器 a abc com b abc com c def com d def com 使用tomcat的虚拟主机功能 因此它们各自可能属于不同的webapps文件夹 我们现在正在尝试为每
  • Codeigniter - 检查用户是否已登录并存在(它是真实用户)

    我正在尝试在用户登录我的网站时为他们设置会话数据 因此 如果用户存在于数据库中 我将设置一个会话数据 例如 this gt session gt set userdata user exists 1 现在 每次我想检查用户是否存在并已登录时
  • 如何在 Logstash 中将一个事件的字段引用到另一个事件?

    我目前正在处理日志 其中一些内容如下所示 00 19 59 771 07120 evtThread TRC gt Cem lt Core1 CALL STATE 00 20 00 199 05768 BCMApplicationThread
  • 如何使用 Serilog ForContext

    我是 Serilog 新手 很难弄清楚如何使用上下文功能 当我运行下面的代码时 输 出文件不包含报告 ID 我缺少什么想法吗 var logger new LoggerConfiguration WriteTo File C Log txt
  • 嵌入式 tomcat 7 servlet 3.0 注释不起作用

    我有一个精简的测试项目 其中包含 Servlet 版本 3 0 用注释声明 如下所示 WebServlet test public class TestServlet extends HttpServlet private static f
  • Tomcat:具有强密码的 TLSv1.2 不起作用

    我安装了Tomcat 7 配置了对 TLSv1 2 的支持在端口 8443 上 我的连接器配置 协议 org apache coyote http11 Http11NioProtocol SSLEnabled true 方案 https 安
  • 当我们第一次部署 WAR 文件时,某些代码可以运行吗?

    是否有任何方法或 API 可以使用 以便每当我部署新的 WAR 文件时 部分代码都应该执行 或者当 Tomcat 启动时 相应的 servlet 应该连续启动或运行一些代码 恢复一个老问题 因为唯一的答案没有显示任何例子 为了在部署 取消部
  • 为什么我们在同一台服务器上使用多个应用程序服务器实例

    我想这是有充分理由的 但我不明白为什么有时我们会在同一物理服务器上放置例如 5 个具有相同 Web 应用程序的实例 这与多处理器架构的优化有关吗 JVM 或其他允许的最大内存限制 嗯 过了很长一段时间我又看到这个问题了 一台机器上的多个 J
  • 如何用Java写入OS系统日志?

    Mac OS 有一个名为 Console 的应用程序 其中包含记录的消息 错误和故障 我相信 Windows 中的等效项是事件查看器 我想 Linux 上也有一个 但我不知道它是什么 也不知道它在哪里 是否可以像这样从 Java 输出获取消
  • LogRecord 没有预期的字段

    在使用 logging 模块的Python中 文档承诺LogRecord实例将具有许多属性 这些属性在文档中明确列出 然而 情况似乎并不总是如此 当我不使用日志记录模块的 basicConfig 方法时 下面的程序显示属性 asctime
  • java.lang.ClassNotFoundException:javax.mail.MessagingException

    我想使用 eclipse 将电子邮件从我的 gmail 帐户发送到另一个邮件帐户 我使用 apache tomcat 7 0 34 作为我的 Web 服务器 并使用端口 8080 作为 apache 服务器 HTTP 1 1 并使用 JRE
  • 使用 Elastic Beanstalk 进行 Logback

    我在使用 Elastic Beanstalk 记录应用程序日志时遇到问题 我正在 AWS Elastic Beanstalk 上的 Tomcat 8 5 with Corretto 11 running on 64bit Amazon Li
  • 为什么无法从 WEB-INF 文件夹内加载 POSModel 文件?

    我在我的 Web 项目中使用 Spring MVC 我将模型文件放在 WEB INF 目录中 String taggerModelPath WEB INF lib en pos maxent bin String chunkerModelP

随机推荐

  • 方法签名中的Java“参数”?

    在C 中 如果希望方法具有不确定数量的参数 可以将方法签名中的最后一个参数设为params这样方法参数看起来像一个数组 但允许使用该方法的每个人根据调用者的需要传递任意数量的该类型的参数 我相当确定 Java 支持类似的行为 但我不知道如何
  • 查找子字符串,带有一些附加条件

    我得到了一个如下所示的字符串 1011010100 我的任务是找到一个子字符串的长度 其中空值的数量始终 10110101 gt 8 我知道复杂度应该是 O n 或 O n log n 因为长度最多可达 10 6 有任何想法吗 The O
  • 在 Android 上,我可以注册一个回调来告诉我蓝牙是否打开或关闭吗?

    我需要知道我的应用程序内部蓝牙是否打开或关闭 或者蓝牙是否打开或关闭 例如从操作系统设置下拉菜单 我想我可以在活动中做到这一点onResume 但事实证明 当 Android 操作系统的设置 下拉菜单 通过用手指从屏幕顶部边缘下拉来访问的菜
  • 用于计算类数的部分语法

    我需要计算正确的 C 源文件中的类数量 我写了以下语法 grammar CSharpClassGrammar options language CSharp2 parser namespace CSharpClassGrammar Gene
  • H2 表列在双引号中不区分大小写

    我正在开发一个工具 它将数据导入到动态生成的模式中 因此 我几乎无法控制表或列名称的外观 我最近遇到了在表中创建两列名称相同但大小写不同的问题 这个问题可以通过这个最简单的 DDL 操作来演示 CREATE TABLE a c1 integ
  • 尝试使用 BayesSearchCV 调整 MLPClassifier hide_layer_sizes 时出错

    当尝试调整 sklearn 时MLP分类器hidden layer sizes超参数 使用贝叶斯搜索CV 我收到错误 ValueError can only convert an array of size 1 to a Python sc
  • Android在哪里存储SQLite的数据库版本?

    我无法找到 Android 在 SQLite 数据库文件中存储数据库版本的位置 数据库版本到底存储在哪里 您可以使用以下方式阅读版本android database sqlite SQLiteDatabase getVersion 在内部
  • appcompat 库样式如何工作

    我对 appcompat 库中的样式如何工作感到非常困惑 根据here https chris banes me 2014 10 17 appcompat v21 我们现在使用 Toolbar ActionBar 的支持实现 平台意味着我们
  • 检查二叉树是否是二叉搜索树的伪代码 - 不确定递归

    我的作业是编写伪代码来检查有效的二叉树是否是搜索二叉树 我创建了一个数组来保存树的有序值 如果有序值按降序排列 则意味着它确实是 BST 但是 我在方法 InOverArr 中的递归方面遇到了一些问题 我需要更新数组的索引 以便按照值在树中
  • 使用 React Portal 时将 css 注入到 window.document

    我正在使用反应门户来呈现我的反应视图的可打印版本 这就是我所做的 import Component from react import ReactDOM from react dom export default class PortalW
  • 内容宽度未知的 jCarousel

    我正在尝试使用 jQuery 的 jCarousel 插件 以便为我的网站用户提供可滚动 水平 内容 我提到的内容基本上都是用户定义的 li 元素的样式使其具有选项卡的感觉和外观 所以基本上我试图实现与 pageflakes com 中的选
  • 为什么我的 Windows 10 PC 在调用 SetWaitableTimer() 后没有唤醒?

    我有两台 Windows 10 电脑 都运行 Fall Creators Update 并安装了所有最新补丁 一个在通过 CreateWaitableTimer SetWaitableTimer 设置计时器后从睡眠中唤醒 另一个则不会 这是
  • 设置 HTTP 标头

    我正在尝试在我的 Go Web 服务器中设置标头 我在用着gorilla mux and net http包 我想设置Access Control Allow Origin 允许跨域AJAX 这是我的 Go 代码 func saveHand
  • PHP Curl+连接被拒绝

    我在 PHP Curl 中收到此错误 Hostname in DNS cache was stale zapped Trying xxx xx x xx connect to xxx xx x xx port 4005 failed Con
  • 为什么 backgroundColor=rgb(a,b,c) 不起作用?

    为什么背景颜色不根据RGB值改变 我做错了什
  • Java中关于集合、枚举和迭代器的困惑

    我的教科书几乎没有讲到Java中的枚举 我看过的视频也没有解释太多 所以根据我的理解 枚举就像一个完全不同的类 你可以在其中存储常量 有人可以向我详细介绍一下常量吗 也许 给我看看更好的例子 就像我在看到示例后明白了什么是常量一样 例如颜色
  • sklearn 中关于空数组的弃用错误,在我的代码中没有任何空数组

    我只是在玩编码和解码 但我从 sklearn 收到此错误 警告 来自警告模块 文件 C Python36 lib site packages sklearn preprocessing label py 第 151 行 如果差异 Depre
  • matplotlib navtoolbar 在 wx 2.9 (Mac OS X) 中未实现

    以下代码在 wxPython 2 8 x Python 2 5 4 2 6 Matplotlib 0 99 x 上运行时 按预期在框架顶部生成 matplotlib NavToolbar2 然而 我最近转向了 Python 2 7 和 wx
  • 在设计时将换行符添加到标签的文本

    如何添加换行符Label s Text在设计时 Stack Overflow 上有一些关于如何在代码隐藏中执行此操作的帖子 但似乎还没有关于设计时的帖子 When you click on the label Text property i
  • 转换 Tomcat 的 log4j.properties 文件以与 Log4j2 一起使用

    我正在尝试将 Tomcat 8 配置为使用 Log4j2 进行日志记录 我找到了这个参考使用Log4j登录Tomcat http tomcat apache org tomcat 8 0 doc logging html Using Log