java日志统一集成的两种方案

slf4j架构

Log4j日志集成

Logback日志集成

总结

分享的目的

一次性的解决应用中日志遇到的各种问题,包括:消除应用启动过程中与日志系统相关的无用错误提示,日志打印不出来的问题等;

Slf4j架构

  1. SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志System,通俗的讲,slf4j提供了目前Java日志系统的适配器;
  2. SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类,有点类似于JDBC,在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统(SPI)。如同使用JDBC基本不用考虑具体数据库一样,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。

Log4j日志集成

公共的Maven依赖

<dependency>
         <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
         <version>${slf4j.verson}</version>
</dependency>
<!-- 适配log4j -->
<dependency>
        <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
       <version>${slf4j.verson}</version>
</dependency>
<!-- 适配jcl(Jakarta Commons Logging ) -->
<dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>jcl-over-slf4j</artifactId>
       <version>${slf4j.verson}</version>
</dependency>
<!-- 适配jul java.util.logging -->
<dependency>
      <groupId>org.slf4j</groupId>
     <artifactId>jul-to-slf4j</artifactId>
     <version>${slf4j.verson}</version>
</dependency>

log4j依赖

<dependency>
          <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.verson}</version>
</dependency>

排除的依赖

<exclusion>
         <groupId>ch.qos.logback</groupId>
         <artifactId>logback-core</artifactId>
<exclusion>

<exclusion>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
<exclusion>

<exclusion>
         <groupId>ch.qos.logback</groupId>
         <artifactId>logback-access</artifactId>
<exclusion>

<exclusion>
       <groupId>org.logback-extensions</groupId>
    <artifactId>logback-ext-spring</artifactId>
<exclusion>

<exclusion>
    <groupId>commons-logging</groupId>
     <artifactId>commons-logging</artifactId>
</exclusion>

Logback日志集成

我使用的日志版本 

        <slf4j.version>1.8.0-beta2</slf4j.version>
        <logback.version>1.3.0-alpha4</logback.version>

公共的Maven依赖

<dependency>
         <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
         <version>${slf4j.verson}</version>
</dependency>
<!-- 适配log4j -->
<dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>log4j-over-slf4j</artifactId>
       <version>${slf4j.verson}</version>
</dependency>
<!-- 适配jcl(Jakarta Commons Logging ) -->
<dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>jcl-over-slf4j</artifactId>
       <version>${slf4j.verson}</version>
</dependency>
<!-- 适配jul java.util.logging -->
<dependency>
      <groupId>org.slf4j</groupId>
     <artifactId>jul-to-slf4j</artifactId>
     <version>${slf4j.verson}</version>
</dependency>
<dependency>
         <groupId>ch.qos.logback</groupId>
         <artifactId>logback-core</artifactId>
         <version>${logback.version}</version>
</dependency>
<dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${logback.version}</version>
</dependency>
<dependency>
          <groupId>ch.qos.logback</groupId>
          <artifactId>logback-access</artifactId>
           <version>${logback.version}</version>
</dependency>
<dependency>
     <groupId>org.logback-extensions</groupId>
     <artifactId>logback-ext-spring</artifactId>
     <version>0.1.2</version>
</dependency>

Logback依赖

<dependency>
         <groupId>ch.qos.logback</groupId>
         <artifactId>logback-core</artifactId>
         <version>${logback.version}</version>
</dependency>
<dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${logback.version}</version>
</dependency>
<dependency>
          <groupId>ch.qos.logback</groupId>
          <artifactId>logback-access</artifactId>
           <version>${logback.version}</version>
</dependency>
<dependency>
     <groupId>org.logback-extensions</groupId>
     <artifactId>logback-ext-spring</artifactId>
     <version>0.1.2</version>
</dependency>

排除的依赖

<exclusion>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
</exclusion>
<exclusion>
    <groupId>commons-logging</groupId>
     <artifactId>commons-logging</artifactId>
</exclusion>

总结

  1. 当然大家在对自己的应用进行了相应的日志方案集成之后,最好也要在web.xml中配置日志的初始化的listener;
  2. 如果大家按照上面的方案对自己应用的日志系统进行了改造,你会发现,在应用启动的过程中,再也不会出现与日志系统本身集成相关的错误,更不会出现日志打不出来的现象,整个应用中日志打印出来是非常的干净;
  3. 当然统一日志集成不仅只有log4j和logback方案,还有其它方案,其它方案详见slf4j官方网站,地址链接是:https://www.slf4j.org/
  4. 因为logback日志比log4j更新,写日志的效率更高,更友好、更稳定,建议大家有时间统一把自己的应用日志系统切换到logback,log4j日志转换到logback 日志也是非常方便的,只需要按上面的要求替换相关的maven依赖,然后用logback官方的转换工具把log4j.propertiea配置文件转换成logback.xml的配置文件,如果是log4j.xml文件,转换到logback.xml更容易,只需要替换相关的appender即可,地址:https://logback.qos.ch/translator/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 什么是Spring框架?它的核心模块有哪些? 答:Spring框架是一个开源的Java应用程序框架,它提供了一个轻量级的容器来管理对象的生命周期和依赖关系。Spring的核心模块包括IOC(控制反转)容器、AOP(面向切面编程)框架、数据访问和集成、Web开发等。 2. 什么是IOC(控制反转)和DI(依赖注入)? 答:IOC(控制反转)是一种设计模式,它将对象的创建和依赖关系的管理交给了容器来完成。DI(依赖注入)是IOC的一种实现方式,它通过将依赖关系注入到对象中,实现对象之间的解耦。 3. Spring框架中的AOP是什么?它有哪些常用的概念? 答:AOP(面向切面编程)是一种编程范式,它通过将横切关注点(如日志、事务等)从业务逻辑中分离出来,实现了代码的重用和解耦。Spring框架中的AOP常用的概念包括切面(Aspect)、连接点(Join Point)、切点(Pointcut)、通知(Advice)和目标对象(Target Object)等。 4. Spring框架中的事务管理是如何实现的? 答:Spring框架中的事务管理是通过声明式事务和编程式事务两种方式来实现的。声明式事务是通过在方法上添加注解或配置XML文件来声明事务的属性,而编程式事务是通过编写代码来实现事务的管理。 5. Spring框架中的MVC是什么?它的工作原理是什么? 答:Spring框架中的MVC(Model-View-Controller)是一种设计模式,它将应用程序分为模型(Model)、视图(View)和控制器(Controller)三个部分。MVC模式的工作原理是,用户请求首先被控制器接收并处理,然后控制器调用模型来处理业务逻辑并返回数据,最后控制器将数据传给视图进行展示。 6. Spring框架中的Bean是什么?它有哪些作用域? 答:在Spring框架中,Bean是由容器管理的对象,它们被实例化、组装和管理。Spring框架中的Bean有多种作用域,包括单例(Singleton)、原型(Prototype)、会话(Session)、请求(Request)和全局会话(Global Session)等。 7. Spring框架中的依赖注入有哪些方式? 答:Spring框架中的依赖注入可以通过构造函数注入、Setter方法注入和字段注入三种方式来实现。构造函数注入是通过构造函数参数来注入依赖,Setter方法注入是通过Setter方法来注入依赖,字段注入是直接将依赖注入到字段中。 8. Spring框架中的Spring Boot是什么?它的特点是什么? 答:Spring Boot是Spring框架的一个子项目,它简化了Spring应用程序的开发和部署过程。Spring Boot的特点包括自动配置、快速开发、无需部署WAR文件、内嵌Web服务器等。 9. Spring框架中的JdbcTemplate是什么?它的作用是什么? 答:JdbcTemplate是Spring框架中的一个核心类,它提供了对JDBC(Java数据库连接)的封装和简化。JdbcTemplate的作用是提供了一种更简单、更方便的方式来执行数据库操作。 10. Spring框架中的AOP和AspectJ有何区别? 答:Spring框架中的AOP是基于代理模式实现的,而AspectJ是一种更为强大的AOP框架,它支持更多的切面语法和功能。AspectJ可以在编译期、类加载期或运行期织入切面,而Spring AOP只能在运行期织入切面。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值