关于jboss log4j如何编程添加自定义的日志输出


代码比较简单

添加自定义的Appender
          Logger log = Logger.getRootLogger();
          // Logger.getRootLogger().getLoggerRepository().resetConfiguration();

         
          Appender newAppender = new HelloAppender();
          log.addAppender(newAppender );

定义自定义的appdender

package exam.action.logger;

import java.io.File;

import org.apache.log4j.AppenderSkeleton; 
import org.apache.log4j.spi.LoggingEvent; 

import cn.netinnet.qdk.util.DateUtil;
import exam.util.FileUtil;

public class HelloAppender extends AppenderSkeleton { 

    private String account ; 
    private String fileName = DateUtil.getUniqueID();

    /*@Override 
    protected void append(LoggingEvent event) { 
       //  System.out.println("Hello, " + account + " : "+ event.getMessage()); 
       String str = (String) event.getMessage();

       File downloadPath = new File("d:" +File.separator+"data"+File.separator+"temp"+File.separator+fileName
                +".txt");

       //FileUtil.writeFile(str.getBytes(), downloadPath.getAbsolutePath());
       if(str.indexOf("11") == -1){
           str += "11";
           FileUtil.appendFile(str, downloadPath.getAbsolutePath());
       }


    } */
    @Override
    protected void append(LoggingEvent loggingEvent) {
        try {
            StringBuffer buf = new StringBuffer();

            buf.append(loggingEvent.getMessage()).append("\r\n");

            // if layout doesn't handle exceptions, the appender has
            // to do it

                String[] s = loggingEvent.getThrowableStrRep();
                if (s != null) {
                    for (int j = 0; j < s.length; j++) {
                        buf.append(s[j]);
                    }
                }

            File downloadPath = new File("d:" +File.separator+"data"+File.separator+"temp"+File.separator+fileName
                    +".txt");
            if(downloadPath.exists()) downloadPath.createNewFile();
            FileUtil.appendFile(downloadPath.getAbsolutePath(), buf.toString() );
            //后成根据buf的日志做你自己想做的事情即可
        } catch(Exception e) {
            errorHandler.error(e.getLocalizedMessage());
        }
    }
    @Override 
    public void close() { 
        // TODO Auto-generated method stub 

    } 

    @Override 
    public boolean requiresLayout() { 
        // TODO Auto-generated method stub 
        return false; 
    } 

    public String getAccount() { 
        return account; 
    } 

    public void setAccount(String account) { 
        this.account = account; 
    } 
}

期间出现报错了,

20:05:44,757 ERROR STDERR log4j:ERROR A "org.jboss.logging.util.OnlyOnceErrorHandler" object is not assignable to a "org.apache.log4j.spi.ErrorHandler" variable. 20:05:44,757 ERROR STDERR log4j:ERROR The class "org.apache.log4j.spi.ErrorHandler" was loaded by 20:05:44,757 ERROR STDERR log4j:ERROR [WebappClassLoaderDelegateFalseRepositories/WEBINF/Classes/ParentClassloaderjava.net.FactoryURLClassLoader31c43f|WebappClassLoader   delegate: false   repositories:     /WEB-INF/classes/ -


> Parent Classloader: java.net.FactoryURLClassLoader@31c43f ] whereas object of type 20:05:44,757 ERROR  STDERR  log4j:ERROR "org.jboss.logging.util.OnlyOnceErrorHandler" was loaded by  Org.jboss.system.server.NoAnnotationURLClassLoaderab95e6 . 20:05:44,820 ERROR  STDERR  log4j:ERROR Could not create an Appender. Reported error follows.

 
解决办法:

 

These sort of exceptions occur if an application deployed on JBoss packages log4j and commons-logging related jars in its package. JBoss has its own versions of these jars in its lib folder which results in these conflicts.

 

Removing the log4j and commons-logging jars from your application's package will solve this issue.
解决方案: 

这类异常信息出现的原因为:JBoss中的发布的Application自身包含log4j和相关的commons-logging组建在它的发布包中。

JBoss的lib目录下,本身包含有这些jars包,这导致了以上jar包冲突的发生。
另外需要将jboss的 log4j和commons-logging加入classpath中,但是不放入webRoot的lib中.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值