java logRecord中的getSourceClassName方法给出null值

时间:2013-12-03 13:26:38

标签: java logging log4j

我想在日志文件中包含类名和方法名。我使用以下代码。

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新手,所有人都建议我。

2 个答案:

答案 0 :(得分:1)

最好的方法是使用扩展类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;
    }
}

要获取类的名称,您需要声明一个静态字段并在 client 类中传递类引用对象:

private static final Logger LOG = Logger.getLogger(SomeClass.class);

Short introduction to log4j Appenders and Layouts 中查看更多内容。

答案 1 :(得分:0)

您可以使用 record.getClass().getName(); 并显示名称类。