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

RollingFile Appender Log4j2未打印行号

戚侯林
2023-03-14

我正在使用具有以下依赖项的log4j2::

   <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.0-rc1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.0-rc1</version>
    </dependency>

我正在使用以下配置::

    <?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">

    <Properties>
        <Property name="LOGGER_HOME">/logs</Property>
    </Properties>

    <Appenders>

        <RollingFile name="application" fileName="${LOGGER_HOME}/application.log"
            filePattern="${LOGGER_HOME}/application.%d{yyyy-MM-dd}_%i.log">

            <PatternLayout pattern="%d{ISO8601}{GMT} %-5p %C{2} (%F:%L) - %m%n" />
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="1 GB" />
            </Policies>

        </RollingFile>

        <RollingFile name="framework" fileName="${LOGGER_HOME}/em-logs/framework.log"
            filePattern="${LOGGER_HOME}/framework.%d{yyyy-MM-dd}_%i.log">

            <PatternLayout pattern="%d{ISO8601}{GMT} %-5p %C{2} (%F:%L) - %m%n" />
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="1 GB" />
            </Policies>
        </RollingFile>

        <Console name="out" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{ISO8601}{GMT} %-5p %C{2} (%F:%L) - %m%n" />
        </Console>

        <Async name="asyncApplication">
            <AppenderRef ref="application" />
        </Async>

        <Async name="asyncFramework">
            <AppenderRef ref="framework" />
        </Async>


    </Appenders>


    <Loggers>

        <Logger name="com.memorynotfound.logging" level="debug"
            includeLocation="true">
            <AppenderRef ref="asyncApplication" />
        </Logger>

    <Root level="debug" includeLocation="true">
            <AppenderRef ref="asyncApplication"></AppenderRef>
        </Root>

        <Logger name="org.axonframework" level="info" additivity="false"
            includeLocation="true">
            <AppenderRef ref="asyncFramework" />
        </Logger>

        <Root level="error" includeLocation="true">
            <AppenderRef ref="out" />
        </Root>

    </Loggers>


</Configuration>

然而,我在控制台上得到以下格式的日志

2015-08-20 14:29:41,613 DEBUG logging.LoggerExample (LoggerExample.java:11) - This will be printed on debug

在滚动文件中,我得到以下模式,其中行号丢失::

2015-08-20 14:29:41,613 DEBUG ? () - This will be printed on debug

我已经疯了,因为似乎没有什么工作打印行号我也遵循官方的log4j2链接Log4j2迁移,但结果仍然与上述相同。如果有人有任何解决办法,请让我知道。

共有3个答案

楚威
2023-03-14

该文件说明了不打印行号的原因。它说您可以通过指定包含位置="true"来重写记录器或异步appender配置中的默认行为。但是我没有解决我做后不打印行号的问题。也许因为我不明白这是什么意思,我选错了地方。

我的解决方案是在Log4j2模式中添加%L。我的Log4j2。xml如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="WARN" monitorInterval="30">
        <Properties>
            <Property name="LOG_HOME">./logs</Property>
        </Properties>

        <Console name="Console" target="SYSTEM_OUT">
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36}:%L - %msg%n" />
        </Console>

        <RollingFile name="RollingFileInfo" fileName="${LOG_HOME}/pinche_quartz.log"
                     filePattern="${LOG_HOME}/test.log-%d{yyyy-MM-dd}.log">
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36}:%L - %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
        </RollingFile>

        <RollingFile name="RollingFileError" fileName="${LOG_HOME}/error/pinche_quartz-error.log"
                     filePattern="${LOG_HOME}/error/pinche_quartz-error.log-%d{yyyy-MM-dd}.log">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36}:%L - %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
        </RollingFile>
    </Appenders>

    <Loggers>
        <root level="all">
            <appender-ref ref="Console"/>
            <appender-ref ref="RollingFileInfo"/>
            <appender-ref ref="RollingFileError"/>
        </root>
    </Loggers>

</Configuration>

我希望能帮到你。

Log4j2文件https://logging.apache.org/log4j/2.x/manual/layouts.html#LocationInformation

何安宜
2023-03-14

出于性能考虑,异步记录器默认关闭includeLocation。如果要打印行数和类名,需要添加

仅供参考https://logging.apache.org/log4j/2.x/manual/layouts.html#LocationInformation

楚墨一
2023-03-14

在这里,我找到了解决方案::Log4j2 AsyncLogger,其中滚动文件appender没有显示文件行号

然后我将appender引用改为直接指向RollingFile name,而不是

因此,更改了以下内容:

<Logger name="com.memorynotfound.logging" level="debug"
            includeLocation="true">
            <AppenderRef ref="asyncApplication" />
        </Logger>

<Logger name="com.memorynotfound.logging" level="debug"
        includeLocation="true">
        <AppenderRef ref="application" />
    </Logger>

 类似资料:
  • 我有一个flask应用程序,只有一条路线,没有复杂的事情发生,运行在docker容器中。我一辈子都不能让print语句出现在日志中(

  • 如果图像无法加载,下面是代码

  • *update2:增加了Keyboard.nextint的限制。 在我尝试打印赔率和偶数的部分遇到了“字符串文字不是由双引号关闭”的错误。 *update3:修正了上面的错误(由打字造成)。

  • 我正在尝试打印出一个字符串,如果Hello和世界是使用Flink CEP库找到的。我的源是 Kafka,并使用控制台生产者来输入数据。这部分正在起作用。我可以打印出我在主题中输入的内容。但是,它不会打印出我的最后一条消息“世界真好!它甚至不会打印出它进入了lambda。下面是类 任何帮助都将不胜感激。 谢谢!

  • 我不确定如何打印数组;我尝试使用arrays.toString(nums),但它仍然不起作用。我需要做什么才能解决这个问题? 导入java.util.Arrays; }

  • $ gdb -q `which gdb` (gdb) l 15 16 You should have received a copy of the GNU General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 18