Logger

1、日志介绍

日志门面框架

JCL(Jakarta Commons Logging) 最后一次更新2014年
SLF4j(Simple Logging Facede for java)
jboss-logging 特定框架用

日志实现

Log4j 
Logback  
Log4j2 apache提供,性能最屌
JUL(java.util.logging) Java 提供

Log4j 与 Logback创始人是同一个,但Log4j 性能不如Logback。Logback直接实现了SLF4j的接口,Log4j需要一个转换器slf4j-log412.jar。

 

 2、如何使用SLF4J

图片地址:https://www.slf4j.org/images/concrete-bindings.png

图片文章地址:https://www.slf4j.org/manual.html

 

从图中可以看出:

  Logback原生实现SLF4j。

  Log4j需要有个转换器->slf4j-log412.jar。

  JUL需要有个转换器->slf4j-jdk14.jar。

       Slf4j-Simple原生实现SLF4j。

3、如何在项目中将别的日志框架整合到SJF4j里面

图片地址:https://www.slf4j.org/images/legacy.png

图片文章地址:https://www.slf4j.org/legacy.html

例如第一张图,底层使用Logback作为最终实现时。

  使用jcl-over-slf4j替换Commons logging。jcl-over-slf4j使用了Commons logging一样的API,但底层调用的时SLF4j的API。

  使用log4j-over-slf4j替换log4j。log4j--over-slf4j使用了log4j一样的API,但底层调用的时SLF4j的API。

  使用jul-to-slf4j替换log4j。jul-to-slf4j使用了jul一样的API,但底层调用的时SLF4j的API。

 4、日志死循环的问题

假设项目存两个jar包:slf4j-log412.jar,log4j-over-slf4j.jar

结果会怎么样呢?

   1、slf4j-log412.jar,对外提供slf4j的接口,内部调用log4j的接口,最终是要调用log4j的实现类的。

   2、log4j-over-slf4j.jar,对外提供log4j的接口,内部调用slf4j的接口,最终是要找slf4的实现了。

   最终死循环了:sjf4j的API -> log4j的API->sjf4j的API -> log4j的API->sjf4j的API -> log4j的API->sjf4j的API -> log4j的API->sjf4j的API -> log4j的API->sjf4j的API -> log4j的API.......

 5、spring-boot 使用Logger的jar包依赖

Logback作为实现类: 

log4j-to-slf4j 对外提供log4j-api,对内转换成slf4j的调用
+- org.springframework.boot:spring-boot-starter-logging:jar:2.1.6.RELEASE:compile
|  +- ch.qos.logback:logback-classic:jar:1.2.3:compile
|  |  \- ch.qos.logback:logback-core:jar:1.2.3:compile
|  +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.11.2:compile
|  |  \- org.apache.logging.log4j:log4j-api:jar:2.11.2:compile

Log4j2作为实现类

+- org.springframework.boot:spring-boot-starter-log4j2:jar:2.1.6.RELEASE:compile
|  +- org.apache.logging.log4j:log4j-slf4j-impl:jar:2.11.2:compile
|  |  +- org.slf4j:slf4j-api:jar:1.7.26:compile
|  |  \- org.apache.logging.log4j:log4j-api:jar:2.11.2:compile
|  +- org.apache.logging.log4j:log4j-core:jar:2.11.2:compile
|  +- org.apache.logging.log4j:log4j-jul:jar:2.11.2:compile
|  \- org.slf4j:jul-to-slf4j:jar:1.7.26:compile

小知识点:

  maven依赖的命令:mvn dependency:tree。

  \- 表示同层依赖的最后一个节点,如果你跟我一样困惑为啥有的是“+-” 有的是“\-”的话。

 

转载于:https://www.cnblogs.com/sleepingDogs/p/11133625.html

LoggerJava中的一个类,位于java.util.logging包中,用于记录应用程序运行时的日志信息。Logger可以记录不同级别的日志信息,如FINE、INFO、WARNING、SEVERE等,可以将日志信息输出到控制台、文件、数据库等不同的目的地。Logger还可以通过设置过滤器、格式化器等来控制日志信息的输出格式和内容。下面是一个简单的Logger使用示例: ```java import java.util.logging.Logger; public class MyLogger { private static final Logger LOGGER = Logger.getLogger(MyLogger.class.getName()); public static void main(String[] args) { LOGGER.info("This is an information message."); LOGGER.warning("This is a warning message."); LOGGER.severe("This is a severe message."); } } ``` 上述代码中,我们首先通过Logger.getLogger()方法获取Logger实例,然后使用Logger的info()、warning()、severe()方法分别记录不同级别的日志信息。在默认情况下,这些日志信息会输出到控制台。如果需要将日志信息输出到文件中,可以通过设置Handler来实现。例如,下面的代码将日志信息输出到mylog.log文件中: ```java import java.util.logging.*; public class MyLogger { private static final Logger LOGGER = Logger.getLogger(MyLogger.class.getName()); public static void main(String[] args) throws Exception { FileHandler handler = new FileHandler("mylog.log"); handler.setFormatter(new SimpleFormatter()); LOGGER.addHandler(handler); LOGGER.info("This is an information message."); LOGGER.warning("This is a warning message."); LOGGER.severe("This is a severe message."); } } ``` 上述代码中,我们首先创建一个FileHandler实例,并设置输出文件名为mylog.log。然后,我们将该Handler添加到Logger实例中,这样Logger记录的日志信息就会输出到该文件中。注意,我们还设置了一个SimpleFormatter,用于控制日志信息的输出格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值