使用 log4j 在控制台中单击类名和行号
Clickable classname and line number in console using 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
实际输出:
[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
可在控制台中单击。
您应该查看 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
如果您指的是 Eclipse 中的控制台输出,您可以获得可点击的 link。
像这样的 appender 应该可以工作:
<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) 解析为 link 到 FileName.java 行 lineNumber.
一个简单的测试(创建一个 link 到跳转到第 6 行的行)是:
public class TestLink
{
public static void main(String[] args)
{
System.out.println("(" + new TestLink().getClass().getSimpleName()
+ ".java:" + 6 + ")");
}
}
这就是我根据接受的答案使用 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
下面的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
实际输出:
[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
可在控制台中单击。
您应该查看 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
如果您指的是 Eclipse 中的控制台输出,您可以获得可点击的 link。
像这样的 appender 应该可以工作:
<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) 解析为 link 到 FileName.java 行 lineNumber.
一个简单的测试(创建一个 link 到跳转到第 6 行的行)是:
public class TestLink
{
public static void main(String[] args)
{
System.out.println("(" + new TestLink().getClass().getSimpleName()
+ ".java:" + 6 + ")");
}
}
这就是我根据接受的答案使用 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