我有一个通用的 jar 文件,用作多个其他项目的基础库,
每个项目使用不同类型的日志记录(一种使用 log4j,一种使用 log4j2,一种使用文件日志记录,其他使用数据库表日志记录)
我想创建一个接口(interface),以便每个项目都将实现通用 jar 并使用自己的日志记录方法
所以在公共(public) jar 中我会写:
commonLog.log(level, message);
然后在其他项目中实现该方法并将消息传递到正确的位置。
如何设计这个问题的解决方案?
更新
因为我不需要任何花哨的或额外的库
我在想这样的事情:
public interface CommonLogger {
CommonLogger getLogger(final Class<?> clazz);
public void Log(Level level,String message);
public void Log(Level level,String message,Throwable t);
}
然后在其他项目中:
public class DBLogger implements CommonLogger {
@Autowired
DbOperations dao
Class<?> clazz;
private CommonLogger DBLogger(Class<?> clazz) {
this.clazz =clazz;
}
public CommonLogger getLogger(final Class<?> clazz){
return DBLogger(clazz);
}
public void Log(Level level,String message) {
dao.insertAudit(new Date(),clazz.getName(),level,message);
}
public void Log(Level level,String message,Throwable t) {
dao.insertAudit(new Date(),clazz.getName(),level,message + t.getMessage());
}
}
和 log4j2 一个:
public class Log4j2Bridge implements CommonLogger {
private static Logger logger;
Class<?> clazz;
public CommonLogger getLogger(final Class<?> clazz){
logger = LogManager.getLogger(clazz);
return this;
}
public void Log(Level level,String message) {
logger.log(level,message);
}
public void Log(Level level,String message,Throwable t) {
logger.log(level,message,t);
}
}
但是如何获取公共(public)日志中的实例呢?
CommonLogger logger = CommonLogger. getLogger?
最佳答案
已经有解决方案。流行的日志库实现了将日志从一个库重定向到另一个库的桥接器。
有Java Common Logging这适用于您的用例,还有其他类似的 slf4j它具有许多常见日志记录库的桥梁,包括来自 java.util.logging
slf4j
在您的公共(public)库中,像任何其他日志记录库一样使用该库:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Example {
final Logger logger = LoggerFactory.getLogger(Example.class);
public Example() {
logger.debug("Example class created");
}
}
然后在使用该库的项目中,通过添加适配桥将 slf4j 绑定(bind)到该项目使用的特定日志库实现:
例如,maven 中的 log4j 1.2:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.8.0-beta4</version>
</dependency>
关于java - 如何从一个常见的 jar 进行日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56279069/