使用log4j在控制台中单击的类名和行号

时间:2015-08-30 06:56:02

标签: java eclipse logging log4j

下面的log4j.properties使用%l显示记录事件的位置。使用完全限定的类名和方法名称,输出有点太长了。

# root logger option
log4j.rootLogger=INFO, stdout, file

# redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%p: %d{yyyy-MM-dd HH:mm:ss} %l] %m%n

# redirect log messages to a log file, support file rolling
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=${catalina.home}/logs/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p: %d{yyyy-MM-dd HH:mm:ss} %l] %m%n

实际输出:

enter image description here

[INFO: 2015-08-30 14:24:07 com.mypackage.MyAction.execute(MyAction.java:64)] This is an INFO message.

属性文件中的正确ConversionPattern是什么,因此只需要该位置的可点击部分?

预期输出:

[INFO: 2015-08-30 14:24:07 MyAction.java:64] This is an INFO message.

其中:

MyAction.java:64可在控制台中点击。

3 个答案:

答案 0 :(得分:4)

如果您的意思是Eclipse中的控制台输出,您可以获得一个klickable链接。

像这样的追加者应该有效:

<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p %m (%F:%L) in %t%n"/>
    </layout>
</appender>

它可以工作,因为Eclipse控制台将模式(FileName.java:lineNumber)解析为lineNumber的FileName.java链接。

一个简单的测试(创建一个跳转到第6行的链接)是:

public class TestLink
{
    public static void main(String[] args)
    {
        System.out.println("(" + new TestLink().getClass().getSimpleName()
            + ".java:" + 6 + ")");
    }
}

答案 1 :(得分:2)

您应该查看PatternLayout javadoc以查看所有可能的模式。

记录如下消息:

[INFO: 2015-08-30 14:24:07 MyAction.java:64] This is an INFO message.

可以通过以下方式获得:

[%p: %d{yyyy-MM-dd HH:mm:ss} %F:%L] %m%n

答案 2 :(得分:1)

这就是我根据接受的答案使用log4j.properties文件的方式:

# direct log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%p: %d{yyyy-MM-dd HH:mm:ss} (%F:%L)] %m%n