Log4j-Log4j2-Slf4j不同点

桃扇骨 2023-09-23 18:20 180阅读 0赞

1 三者之间的不同之处

该博客只说明三者使用注意点,不过多阐述具体使用细节。

Log4j是基于Java开发的日志框架,其作者Ceki GülcüLog4j捐献给了Apache软件基金会,使之成为了Apache日志服务的一个子项目。是最流行的日志输出系统。

Log4j2**Log4j是一个作者,只不过Log4j是重新架构的一款日志组件,他抛弃了之前log4j的不足,以及吸取了优秀的logback的设计重新推出的一款新组件。**

SLF4J是一个日志抽象层,里面的定义很多的代码可以理解是通用代码。如何使用了SLF4J之后,想切换到其他的日志系统如Log4j或者Log4j2,只需要更换包及配置信息,不需要修改源码文件,【强制】应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J中的API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。

2 配置文件类型

log4j是通过一个.properties的文件作为主配置文件的,而现在的log4j 2则已经弃用了这种方式,采用的是.xml,.json或者.jsn这种方式来做。

3 使用的核心jar包

【log4j只需要引入一个jar包】

  1. <dependency>
  2. <groupId>log4j</groupId>
  3. <artifactId>log4j</artifactId>
  4. <version>1.2.17</version>
  5. </dependency>

【log4j2需要2个核心】

  1. <dependency>
  2. <groupId>org.apache.logging.log4j</groupId>
  3. <artifactId>log4j-core</artifactId>
  4. <version>2.5</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.logging.log4j</groupId>
  8. <artifactId>log4j-api</artifactId>
  9. <version>2.5</version>
  10. </dependency>

【slf4j需要引入如下包】

  1. <dependency>
  2. <groupId>org.slf4j</groupId>
  3. <artifactId>slf4j-api</artifactId>
  4. <version>1.7.25</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.slf4j</groupId>
  8. <artifactId>slf4j-simple</artifactId>
  9. <version>1.7.22</version>
  10. </dependency>

4 使用配置

【Log4j的使用在web.xml中配置监听】

  1. <listener>
  2. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  3. </listener>
  4. <context-param>
  5. <param-name>log4jConfigLocation</param-name>
  6. <param-value>classpath:config/log4j.properties</param-value>
  7. </context-param>
  8. <context-param>
  9. <param-name>log4jRefreshInterval</param-name>
  10. <param-value>60000</param-value>
  11. </context-param>

【log4j2配置需要使用xml文件】

Log4j2的配置需要使用xml的方式,如下是详细配置,名称是:log4j2.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration status="error">
  3. <!-- 先定义所有的appender -->
  4. <appenders>
  5. <!--这个输出控制台的配置 -->
  6. <Console name="Console" target="SYSTEM_OUT">
  7. <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
  8. <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
  9. <!--输出日志的格式 -->
  10. <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
  11. </Console>
  12. <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,
  13. 这个也挺有用的,适合临时测试用 -->
  14. <!-- append为TRUE表示消息增加到指定文件中,false表示消息覆盖指定的文件内容,默认值是true -->
  15. <File name="log" fileName="log/test.log" append="false">
  16. <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
  17. </File>
  18. <!-- 添加过滤器ThresholdFilter,可以有选择的输出某个级别以上的类别 onMatch="ACCEPT" onMismatch="DENY"意思是匹配就接受,否则直接拒绝 -->
  19. <File name="ERROR" fileName="logs/error.log">
  20. <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
  21. <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
  22. </File>
  23. <!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
  24. <RollingFile name="RollingFile" fileName="logs/web.log"
  25. filePattern="logs/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz">
  26. <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
  27. <SizeBasedTriggeringPolicy size="2MB"/>
  28. </RollingFile>
  29. </appenders>
  30. <!--定义logger,只有定义了logger并引入的appender,appender才会生效 -->
  31. <loggers>
  32. <!--建立一个默认的root的logger -->
  33. <root level="trace">
  34. <appender-ref ref="RollingFile"/>
  35. <appender-ref ref="Console"/>
  36. <appender-ref ref="ERROR" />
  37. <appender-ref ref="log"/>
  38. </root>
  39. </loggers>
  40. </configuration>

6 spring5中使用log4j2

spring5之后弃用了log4j,而使用log4j,如果使用了log4j之后,系统会报错,下面简单说明使用关键点

【web.xml中配置信息】

  1. <listener>
  2. <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
  3. </listener>
  4. <filter>
  5. <filter-name>log4jServletFilter</filter-name>
  6. <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
  7. </filter>
  8. <filter-mapping>
  9. <filter-name>log4jServletFilter</filter-name>
  10. <url-pattern>/*</url-pattern>
  11. <dispatcher>REQUEST</dispatcher>
  12. <dispatcher>FORWARD</dispatcher>
  13. <dispatcher>INCLUDE</dispatcher>
  14. <dispatcher>ERROR</dispatcher>
  15. </filter-mapping>

【pom中到导入相关jar包】

  1. <!-- log Start 日志记录-->
  2. <dependency>
  3. <groupId>org.apache.logging.log4j</groupId>
  4. <artifactId>log4j-api</artifactId>
  5. <version>2.10.0</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.apache.logging.log4j</groupId>
  9. <artifactId>log4j-core</artifactId>
  10. <version>2.10.0</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.apache.logging.log4j</groupId>
  14. <artifactId>log4j-web</artifactId>
  15. <version>2.9.1</version>
  16. </dependency>
  17. <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
  18. <dependency>
  19. <groupId>commons-logging</groupId>
  20. <artifactId>commons-logging</artifactId>
  21. <version>1.1.1</version>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.slf4j</groupId>
  25. <artifactId>slf4j-log4j12</artifactId>
  26. <version>${slf4j.version}</version>
  27. </dependency>
  28. <!-- log end-->

【在resources中配置log4j2.xml配置文件】

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Configuration status="OFF" monitorInterval="1800">
  3. <properties>
  4. <property name="LOG_HOME">/WEB-INF/logs</property>
  5. <property name="FILE_NAME">finance-pay</property>
  6. </properties>
  7. <Appenders>
  8. <Console name="Console" target="SYSTEM_OUT">
  9. <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
  10. </Console>
  11. <RollingFile name="running-log" fileName="${LOG_HOME}/${FILE_NAME}.log"
  12. filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log.gz"
  13. immediateFlush="true">
  14. <PatternLayout
  15. pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />
  16. <Policies>
  17. <TimeBasedTriggeringPolicy />
  18. <SizeBasedTriggeringPolicy size="10 MB" />
  19. </Policies>
  20. <DefaultRolloverStrategy max="20" />
  21. </RollingFile>
  22. </Appenders>
  23. <Loggers>
  24. <!-- <Logger name="com.cssweb.test.app" level="trace" additivity="true">
  25. <AppenderRef ref="running-log" /> </Logger> -->
  26. <Root level="info">
  27. <!-- 输入到文件-->
  28. <AppenderRef ref="running-log" />
  29. <!-- 输入到控制台-->
  30. <AppenderRef ref="Console" />
  31. </Root>
  32. </Loggers>
  33. </Configuration>

发表评论

表情:
评论列表 (有 0 条评论,180人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Log4j-Log4j2-Slf4j不同

    1 三者之间的不同之处 该博客只说明三者使用注意点,不过多阐述具体使用细节。 Log4j是基于Java开发的日志框架,其作者Ceki Gülcü将Log4j捐献给了Ap