如何在log4j.xml文件中指定自定义/扩展记录器?

时间:2011-02-22 13:11:55

标签: java log4j logging

我正在为我的项目使用Custom Logger,例如。 MyLogger类。 有了这个我能够正确记录消息,但它没有记录 班级&方法名称正确地从日志启动的位置开始。

所以我想我们可能需要在log4j.xml中指定MyLoggger,但我不知道 在哪里&怎么样?

所有建议都表示赞赏。 感谢。


1 个答案:

答案 0 :(得分:3)

如果你有一个MyClass类:

package com.acando.norolnes;

public class MyClass {
    public String foo;
    public int bar;
}

您希望在日志记录时自定义格式,您可以创建自定义ObjectRenderer:

package com.acando.norolnes;

import org.apache.log4j.or.ObjectRenderer;

public class MyClassRenderer implements ObjectRenderer {

    @Override
    public String doRender(Object arg0) {
        if(arg0 instanceof MyClass) {
            MyClass m = (MyClass)arg0;
            return "("+m.foo+" "+m.bar+")";
        }
        return arg0.toString();
    }
}

并使用-element:

在配置中将其链接起来
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
  <renderer renderedClass="com.acando.norolnes.MyClass"
            renderingClass="com.acando.norolnes.MyClassRenderer"/>
  <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n"/>
    </layout>
  </appender>
  <root>
    <priority value="debug"></priority>
    <appender-ref ref="stdout"/>
  </root>
</log4j:configuration>

有关更完整的示例,请查看http://www.java2s.com/Code/Java/Language-Basics/log4jAcompleteexample.htm