java - 如何从一个常见的 jar 进行日志记录

标签 java

我有一个通用的 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

的 java 原始记录器

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)到该项目使用的特定日志库实现:

slf4j bridges

例如,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/

相关文章:

Java SSL 客户端身份验证 : How to select alias in Keystore?

java - 如何将 Element 编码到 JAXB Axis2 响应对象

java - Tomcat 应用程序管理器的默认用户名密码

java - 有什么方法可以让 "inverted"剪辑区域用于 Java 绘画?

java - 来自前台服务 Android 的多个通知

java - 如何获取鼠标指针下的(ListView 的)单元格?

java - 如何解决重复条目 : com/google/gson/JsonParseException. 类?

java - 从 Netty 3.x 迁移到 4.21 Final 时寻找某些功能的替代品

Java 鼓组项目

java - 提交事务后数据未更新