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

log4j 2-配置问题

魏浩广
2023-03-14

我正在尝试将log4j2.0配置为报告日志

我的配置保存为log4j2.xml,这是它的内容:

  <?xml version="1.0" encoding="UTF-8"?>
  <configuration name="PRODUCTION" status="OFF">

    <appenders>
        <RollingFile name="MyFileAppender" 
            fileName="../Logs/app.log" 
            filePattern="../Logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout>
                <pattern>%d %p %C{1.} [%t] %m%n</pattern>
            </PatternLayout>
            <Policies>
                <OnStartupTriggeringPolicy />
                <TimeBasedTriggeringPolicy interval="6" modulate="true"/>
                <SizeBasedTriggeringPolicy size="250 MB"/>
            </Policies>
        </RollingFile>
    </appenders>

    <loggers>
        <root level="trace">
            <appender-ref ref="MyFileAppender"/>
        </root>
    </loggers>

 </configuration>

它存在于项目的类路径中,我试着把它放在许多其他目录中...

我在代码中创建了一个记录器,如下所示:

    Logger          logger = LogManager.getLogger(MyClass.class.getName());
    logger.info("test");

没有任何东西被写入,也没有文件被创建。当我调试代码时,我看到记录器是默认的记录器(控制台)。

共有3个答案

松雅昶
2023-03-14

你应该把你的日志放在4J2上。将xml转换为类路径。

或设置"log4j.configuration文件"系统属性强制使用log4j2.xml

请参阅:http://logging.apache.org/log4j/2.x/manual/configuration.html#AutomaticConfiguration

崔涵亮
2023-03-14

放置log4j2。xml文件位于src/main/resources下。它起作用了

宿文栋
2023-03-14

实际上,这是一个直接的过程。Log4j 2的两个主要类如下所示,您需要这样导入:

    import org.apache.logging.log4j.LogManager
    import org.apache.logging.log4j.Logger

现在使用此代码获取一个记录器实例。

    private static final Logger logger = LogManager.getLogger();

注意,我没有将getLogger()方法的类名指定为参数。Log4j 2会自动计算出来。

现在,您可以使用Logger类中的任何info(),跟踪(),调试(),警告(),错误(),致命()方法。但是要获得所有这些方法的输出,您需要一个XML配置文件。默认情况下,Log4j 2仅从错误()和致命()方法产生输出。

配置文件如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="WARN">
        <Appenders>
            <File name="MyCustomLogFile" fileName="/home/me/mylogfile.log">
                <PatternLayout>
                    <Pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</Pattern>
                </PatternLayout>
            </File>
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            </Console>
        </Appenders>
        <Loggers>
            <Root level="all">
                <AppenderRef ref="MyCustomLogFile"/>
                <!--<AppenderRef ref="Console"/>-->
            </Root>
        </Loggers>
    </Configuration>

在任何位置以任何名称保存此文件。我使用Log4j2。xml作为名称。现在,您需要将此文件放入类路径中,您可以在运行程序时按如下方式传递系统属性:

    java -Dlog4j.configurationFile=/path/to/xml/configuration/file/Log4j2.xml MyMainClass

你做到了。将立即在您的控制台上进行日志记录。

特别说明:

>

  • 在XML文件中,我提供了两个附件:一个文件和一个控制台。您可以看到,只需取消注释已注释的AppenderRef标记,即可在文件中而不是控制台中获得输出。

    还可以提供环境变量作为系统属性。Log4j 2将首先从环境变量中读取配置文件,如果没有找到环境变量,则在-D参数中读取配置文件。

    享受日志记录的乐趣。:-)

  •  类似资料:
    • 我有多模块spring boot项目,我添加了log4j2作为日志机制,它在启动服务器时抛出下面的异常。 引起原因:java.lang.ClassNotFoundExcoop:非法访问:此Web应用程序实例已被停止。无法加载[org.apache.logging.log4j.message.参数化消息]。以下堆栈跟踪被抛出用于调试目的以及试图终止导致非法访问的线程。在org.apache.cata

    • 最近,我决定学习如何使用log4j2记录器。我下载了所需的jar文件,创建了库,xml编译文件,并尝试使用它。不幸的是,我在console(Eclipse)中得到了这样的语句: 这是我的测试类代码: 和我的xml配置文件: 我还尝试使用不带标记的xml,以及包规范和各种文件夹/包目录,但没有帮助。现在我的文件直接位于Eclipse的project文件夹中。

    • 我们希望将所有java应用程序日志集中在Graylog服务器上。我们使用apache tomcat作为容器,使用log4j作为日志框架。log4j2.xml 伐木工人 日志详细信息 正如你们所见,我的应用程序与gray log server创建了一个套接字连接。但是我们在灰色日志服务器上没有看到任何日志 版本:tomcat-9.0.16.0 jdk-1.8.0_201-b09(64位) log4j

    • 你能帮我找出配置中缺少的步骤吗? 我正试图将logger添加到我非常简单的web应用程序中:为了做到这一点,我使用了log4j2 (beta9)。 我写下了我的<code>log4j2.xml<code>如下 我把它放在WEB-INF文件夹里。 然后,我有一个简单的servlet,它执行以下操作 正如你所看到的,这只是一个尝试,看看是否如预期的那样工作,但它没有。通过阅读此处的web app,我不

    • 我想使用新的log4j2-Java日志框架。一切正常,但我从一小时后就尝试加载一个自定义配置文件来配置日志记录(如日志级别)。 这是我的log4j2.xml: 我尝试了以下方法,但没有任何效果: 移动log4j2.xml文件,使其位于默认包中。 将log4j2.xml文件移动到项目中的任意位置 将log4j2.xml文件命名为log4j.xml 在项目中创建一个文件夹,将log4j2.xml文件放

    • 这是我的配置文件: 日志配置文件读起来非常清楚,因为它使用my/log目录中定义的模式正确地写入。 这是我在代码中实例化它的方式:

    • 问题内容: 在我的application.yml中,我得到了: 还有其他一些使用不同的配置文件。启动应用程序时,我得到以下信息: 如果我只是将log4j2.xml放在已分析的文件旁边,则它可以工作。所以我认为这是我错过依赖关系的原因,或者使用log4j2无法实现? 问题答案: 在我这边,我正在使用属性文件而不是Yaml文件。我需要两个日志文件:一个将所有内容记录到控制台,另一个用于记录文件。因此,

    • 我有一个Spring Boot应用程序,并使用log4j2在centos linux中生成控制台和持久化日志。 我想在存档中只维护5mb的日志文件。 但问题是,我的归档日志文件总共有5mb。但我的主控制台日志保存在主日志文件中,即wc通知。输出超过1mb。 因此,我的磁盘已满,这导致了一个问题。 蛮力方法的解决方案是:每当重新启动(硬停止和启动)我的spring boot应用程序时,都会从wc通知