繁体   English   中英

java logRecord中的getSourceClassName方法给出空值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM