![](/img/trans.png)
[英]Why Java LogRecord constructor calls a random method to check non null parameter?
[英]getSourceClassName method in java logRecord gives null value
我想在日志文件中包含类名和方法名。 我正在使用以下代码。
public String format(LogRecord record)
{
StringBuilder buff = new StringBuilder();
.
.
if( record.getSourceClassName() != null )
{
buff.append( "Source class: " );
buff.append( record.getSourceClassName() + " Method : " + record.getSourceMethodName() + '\n' );
}
else if( record.getSourceClassName() == null )
{
buff.append( "class name null" );//<-- always getting null
}
}
但是我得到的类名只有空值。 我正在使用log4j并使用自己的格式化程序类。 我是java日志记录的新手,任何人都建议我。
最好的方法是使用自定义布局,扩展类org.apache.log4j.Layout
,例如:
import org.apache.log4j.Layout;
import org.apache.log4j.spi.LoggingEvent;
public class MyLayout extends Layout {
public void activateOptions() {
// None action
}
public String format(LoggingEvent event) {
StringBuilder sb = new StringBuilder();
sb.append(event.getLevel());
sb.append(" (");
sb.append(event.getLoggerName());
sb.append(":");
sb.append(event.getLocationInformation().getLineNumber());
sb.append(") - ");
sb.append(event.getMessage());
sb.append(LINE_SEP);
return sb.toString();
}
public boolean ignoresThrowable() {
return true;
}
}
为了获得类的名称,您需要声明一个静态字段并在客户端类中传递类引用对象:
private static final Logger LOG = Logger.getLogger(SomeClass.class);
请参阅从简介到log4j的 Appender和Layouts中的更多内容。
您可以使用record.getClass().getName();
并显示名称类别。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.