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

标签 java log4j logging

我正在为我的项目使用自定义记录器,例如。类 MyLogger。 这样我就可以正确记录消息但它没有记录 从日志启动的地方正确的类和方法名称。

所以我想我们可能需要在 log4j.xml 中指定 MyLoggger 但我不知道 在哪里以及如何?

感谢所有建议。 谢谢。


最佳答案

如果你有一个 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

关于java - 如何在 log4j.xml 文件中指定自定义/扩展记录器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5078561/

相关文章:

java - 删除 ArrayList Java 中的重复元素

java - 配置 proguard-maven-plugin 过滤库 jar 的 META-INF

java - 实现简单的文档管理

java - Hadoop伪分布式模式下各种守护进程的IP地址

java - 如果连续写入日志文件,是否可以以编程方式打开日志文件?

ruby-on-rails - 如何在发生之前记录 Rails 查询?

android - LogBack - 使用应用程序信息设置日志记录模式

保证日志在午夜轮换的 Java 日志记录框架

java - Java XML 中的字符错误?

linux - Tomcat 6 log4j - linux - 安全删除catalina.out