从log4j迁移到log4j2时出错。

huangapple 未分类评论48阅读模式
英文:

Error while migrating from log4j to log4j2

问题

我想从 log4j 迁移到 log4j2。我有一个自定义的日志记录器类 MyLoggerImpl,它继承自 log4j 中的 Logger,并实现了用户定义的接口。

MyLoggerImpl.java(使用 log4j)

import org.apache.log4j.Logger;

public class MyLoggerImpl extends Logger implements MyLoggerInterface
{
    private Logger logger = null;

    MyLoggerImpl(){};

    MyLoggerImpl(Class clas){
        logger = Logger.getLogger(clas);
    }
}

我尝试对自定义类进行以下修改。还有像 log4j2.xml 等配置文件已经就位。

解决方案 1

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class MyLoggerImpl extends LogManager implements MyLoggerInterface
{
    private Logger logger = null;

    MyLoggerImpl(){};

    MyLoggerImpl(Class clas){
        logger = LogManager.getLogger(clas);
    }
}

解决方案 2

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class MyLoggerImpl implements MyLoggerInterface
{
    private Logger logger = null;

    MyLoggerImpl(){};

    MyLoggerImpl(Class clas){
        logger = LogManager.getLogger(clas);
    }
}

然而,我得到了以下异常:

原因:java.lang.ClassCastException: com.custom.logger.MyLoggerImpl 与 org.apache.logging.log4j.Logger 不兼容

我不明白是什么导致了这个问题。请帮忙。

UPDATE 1

public interface MyLoggerInterface{
    public void info(Object infoObject1);
    public void info(Object infoObject1, Object infoObject2);
    public void info(int scheduleId, Object infoObject1);
    public void info(int scheduleId, Object infoObject1, Object infoObject2);
       
    // error 和 debug 方法的类似变体
}
英文:

I want to migrate from log4j to log4j2. I have a custom logger class MyLoggerImplwhich extends Logger from log4j and implements user defined interface.

MyLoggerImpl.java (using log4j)

import org.apache.log4j.Logger;    
public class MyLoggerImpl extends Logger implements MyLoggerInterface
{    
     private Logger logger = null;

     MyLoggerImpl(){};

     MyLoggerImpl(Class clas){
     logger = Logger.getLogger(clas);
   }
}

I tried modifying custom class as below. Also, configuration files like log4j2.xml etc are in place.

Solution 1

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;    
public class MyLoggerImpl extends LogManager implements MyLoggerInterface
{

     private Logger logger = null;

     MyLoggerImpl(){};

     MyLoggerImpl(Class clas){
     logger = LogManager.getLogger(clas);
   }
}

Solution 2

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;    
public class MyLoggerImpl implements MyLoggerInterface
{

     private Logger logger = null;

     MyLoggerImpl(){};

     MyLoggerImpl(Class clas){
     logger = LogManager.getLogger(clas);
   }
}

However I am getting below exception

Reason:java.lang.ClasCastException: com.custom.logger.MyLoggerImpl incompatible with org.apache.logging.log4j.Logger

I am not getting what is causing this. Please help.

UPDATE 1

public interface MyLoggerInterface{
    public void info(Object infoObject1);
    public void info(Object infoObject1, Object infoObject2);
    public void info(int scheduleId, Object infoObject1);
    public void info(int scheduleId, Object infoObject1, Object infoObject2);
       
    // similar variations for error and debug methods
}

huangapple
  • 本文由 发表于 2020年5月5日 14:18:29
  • 转载请务必保留本文链接:https://java.coder-hub.com/61606899.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定