Different log4j layout for debug and error?

不打扰是莪最后的温柔 提交于 2020-01-10 14:58:20

问题


In log4j, is there a way to have logger.error("") and logger.debug("") include different output layouts?

I'd like errors to include method names and line numbers, both of which slow down application performance.

EDIT:

After adding apache-log4j-extras, the following config file works.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="WARNINGS" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="warnings.log"/>
        <param name="DatePattern" value="'.'yyyy-MM-dd"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss} %-5p %c - %m%n%n"/>
        </layout>
        <filter class="org.apache.log4j.filter.LevelRangeFilter">
            <param name="LevelMin" value="DEBUG"/>
            <param name="LevelMax" value="WARN"/>
        </filter>
    </appender>

    <appender name="ERRORS" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="errors.log"/>
        <param name="DatePattern" value="'.'yyyy-MM-dd"/>
        <layout class="org.apache.log4j.PatternLayout">
            <!-- %M for method name , %L for line number  -->
            <param name="ConversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss} %-5p %c %M %L - %m%n%n"/>
        </layout>
        <filter class="org.apache.log4j.filter.LevelRangeFilter">
            <param name="LevelMin" value="ERROR"/>
            <param name="LevelMax" value="FATAL"/>
        </filter>
    </appender>

    <logger name="com.foo.bar">
        <appender-ref ref="WARNINGS"/>
        <appender-ref ref="ERRORS"/>
    </logger>

</log4j:configuration>

This code was used to test

// goes to errors.txt
     log.error("error");
//goes to warnings.txt
     log.warn("warn");

回答1:


Within your log4j.xml configuration, you can create two appenders, each using a LevelMatchFilter and each with a separate pattern output.




回答2:


I would just setup two different loggers. One called ERROR and one called DEBUG. Then you can easily setup different output layouts and only call ERROR.error or DEBUG.debug.



来源:https://stackoverflow.com/questions/1008122/different-log4j-layout-for-debug-and-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!