当前位置: 首页 > 知识库问答 >
问题:

为什么非根级记录器没有接收日志记录?

洪照
2023-03-14

我正在将一个应用程序从Log4J 1.2.16迁移到Log4J 2.13.3。为此,我使用log4j21.2到2.13.3桥。在我自己的开发机器上,一切都运转良好。但是,当我将应用程序部署到测试服务器时,日志只会发送到根日志记录器,我定义的其他日志文件保持为空。

log4j2。两台机器上的xml配置文件完全相同,只是附件中的路径不同。我的开发机器运行Windows,测试服务器运行Linux。该应用程序已部署到Weblogic 12.2.1.3。

我已经在下面的测试服务器上包含了log4j2.xml文件(请原谅混乱的替换语句)。要明确的是:所有日志都被发送到ERROR_LOG(因为那是根日志中引用的),其他三个日志文件被创建,但在测试服务器上保持空,而它们确实在我的开发机器上接收数据。

<?xml version="1.0" encoding="UTF-8" ?>
<Configuration monitorInterval="60">
    <Appenders>
        <RollingFile name="ERROR_LOG" fileName="/var/log/weblogic/app/error.log" filePattern="/var/log/weblogic/app/error.log%d{yyyy-MM-dd}.gz">
            <PatternLayout charset="UTF-8" pattern="###%d{yyyy-MM-dd HH:mm:ss,SSS Z}{Europe/Amsterdam}|%d{yyyy-MM-dd HH:mm:ss,SSS Z}{UTC}|%-5p|%t|%c{2}|%replace{%replace{%replace{%m}{(&lt;[^/]*?[wW]achtwoord.*?&gt;).*?(&lt;/.*?[wWWachtwoord].*?&gt;)}{$1********$2}}{(&lt;pw&gt;).*?(&lt;/pw&gt;)}{$1********$2}}{(&lt;newPW&gt;).*?(&lt;/newPW&gt;)}{$1********$2}|%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"/>
            </Policies>
            <DefaultRolloverStrategy max="7"/>
        </RollingFile>
        <RollingFile name="DEBUG_LOG" fileName="/var/log/weblogic/app/debug.log" filePattern="/var/log/weblogic/app/debug.log%d{yyyy-MM-dd}.gz">
            <PatternLayout charset="UTF-8" pattern="###%d{yyyy-MM-dd HH:mm:ss,SSS Z}{Europe/Amsterdam}|%d{yyyy-MM-dd HH:mm:ss,SSS Z}{UTC}|%-5p|%t|%c{2}|%replace{%replace{%replace{%m}{(&lt;[^/]*?[pP]assword.*?&gt;).*?(&lt;/.*?[pPPassword].*?&gt;)}{$1********$2}}{(&lt;pw&gt;).*?(&lt;/pw&gt;)}{$1********$2}}{(&lt;newPW&gt;).*?(&lt;/newPW&gt;)}{$1********$2}|%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"/>
            </Policies>
            <DefaultRolloverStrategy max="7"/>
        </RollingFile>
        <RollingFile name="FACADE_LOG" fileName="/var/log/weblogic/app/facade.log" filePattern="/var/log/weblogic/app/facade.log%d{yyyy-MM-dd}.gz">
            <PatternLayout charset="UTF-8" pattern="###%d{yyyy-MM-dd HH:mm:ss,SSS Z}{Europe/Amsterdam}|%d{yyyy-MM-dd HH:mm:ss,SSS Z}{UTC}|%-5p|%t|%c{2}|%replace{%replace{%replace{%m}{(&lt;[^/]*?[pP]assword.*?&gt;).*?(&lt;/.*?[pPPassword].*?&gt;)}{$1********$2}}{(&lt;pw&gt;).*?(&lt;/pw&gt;)}{$1********$2}}{(&lt;newPW&gt;).*?(&lt;/newPW&gt;)}{$1********$2}|%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"/>
            </Policies>
            <DefaultRolloverStrategy max="7"/>
        </RollingFile>
        <RollingFile name="AUDIT_LOG" fileName="/var/log/weblogic/audit/audit.log" filePattern="/var/log/weblogic/audit/audit.log%d{yyyy-MM-dd}.gz">
            <PatternLayout charset="UTF-8" pattern="###%d{yyyy-MM-dd HH:mm:ss,SSS Z}{Europe/Amsterdam}|%d{yyyy-MM-dd HH:mm:ss,SSS Z}{UTC}|%-5p|%t|%c{2}|%replace{%replace{%replace{%m}{(&lt;[^/]*?[pP]assword.*?&gt;).*?(&lt;/.*?[pPPasword].*?&gt;)}{$1********$2}}{(&lt;pw&gt;).*?(&lt;/pw&gt;)}{$1********$2}}{(&lt;newPW&gt;).*?(&lt;/newPW&gt;)}{$1********$2}|%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"/>
            </Policies>
            <DefaultRolloverStrategy max="7"/>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Logger name="nl.test.app.facade" level="debug" additivity="false">
            <AppenderRef ref="FACADE_LOG"/>
        </Logger>
        <Logger name="nl.test.app.auditadapter" level="debug" additivity="false">
            <AppenderRef ref="AUDIT_LOG"/>
        </Logger>
        <Logger name="nl.test.app.proces" level="debug" additivity="false">
            <AppenderRef ref="DEBUG_LOG"/>
        </Logger>
        <Root level="debug">
            <AppenderRef ref="ERROR_LOG" />
        </Root>
    </Loggers>
</Configuration>

在我自己的机器上,我添加了log4j2的位置。xml到类路径。在测试服务器上,我尝试将位置添加到类路径,并通过log4j进行设置。configurationFileJava虚拟机参数。这两种情况下的结果都是一样的:所有日志文件都是在启动时创建的,但只有根日志记录器(ERROR_LOG)中提到的日志文件将日志数据发送给它,其他日志文件保持为空。这告诉我,至少Log4J2能够找到并读取配置文件。我尝试过切换根记录器中提到的appender。在这种情况下,日志数据会被发送到该文件,因此它似乎与文件系统无关。

所以问题是:为什么我的测试服务器上的日志文件是空的(根日志中提到的除外),但在我的开发机器上接收数据?

共有1个答案

柯甫
2023-03-14

最后,还是有一个迷路的log4j 1。在删除应用程序工件后,一切正常。在Log4J的调试日志中,您可能会看到一些错误或至少是一条线索,但事实并非如此。再说一遍,类路径问题(我想这是)可能很棘手。

 类似资料:
  • 问题内容: 状态的JavaDocs: 级别降序为: (最高值) (最低值) 资源 输出量 问题陈述 我的示例将设置为,因此我希望每个循环看到2条消息。相反,我为每个循环看到一条消息(消息丢失)。 题 为了查看(或)输出,需要进行哪些更改? 更新(解决方案) 感谢Vineet Reynolds的回答,该版本可以按照我的期望工作。它显示3条消息和3条消息。 问题答案: 记录器仅记录消息,即它们创建日志

  • 我想在我的应用程序中使用SLF4J+logback用于两个目的--日志和审计。 14:41:57.978[main]信息AUDIT_LOGGER-110欢迎使用main 如何确保审核消息在审核记录器下只出现一次?

  • 现在,问题是,当我以以下方式进行日志记录时: 尽管根记录器级别被设置为“错误”,但日志条目仍然存在于两个日志文件中。然而,当我去掉“it.pkg.testpkg.service”记录器(通过注释或删除它)时,条目停止进入根记录器。我不太清楚这是怎么回事。 目前,我已经找到了一个临时解决方案,方法是在“root_file_appender”中添加以下条目: 谢了。

  • 我在Spring Boot(1.3M1)中使用了application.properties,并开始将其转换为yaml文件,因为它变得越来越复杂。 但我在将其转换为YAML时遇到了问题:

  • 我使用Kubernetes作为cron作业运行python脚本。问题是,直到作业完成后,我才看到脚本的输出(可能需要一段时间才能运行)。我怀疑这是由于日志记录级别(--v选项)造成的,但在我的整个生命周期中,我都找不到它的文档(默认为--v=0)。如果我想增加输出内容的详细程度,是否有人知道“INFO”或“TRACE”的值(或者这些值是什么/定义在哪里)?提前谢谢你的帮助。 编辑:是否有人在Kub

  • 问题内容: 我正在考虑将Redis用于Web应用程序日志记录目的。我用谷歌搜索,有人将日志转储到Redis队列/列表中,然后将计划的工作人员转储到磁盘中。 http://nosql.mypopescu.com/post/8652869828/another-redis-use-case- centralized-logging 我希望寻求理解,为什么不直接使用Redis持久化到磁盘?如果我分配了一