英文:
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 MyLoggerImpl
which 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
}
专注分享java语言的经验与见解,让所有开发者获益!
评论