Log4j2 日志

点开博客

Apache Log4j2 是 Log4j 的升级,对其前身 Log4j 1.x进行了重大改进,并提供了Logback 中可用的许多改进,同时修复了 Logback 架构中的一些固有问题。

要求

Log4j2.13.0 及更高版本需要 Java 8。版本 2.4 到 2.12.1 需要 Java 7(Log4j 团队不再支持 Java 7)。某些功能需要可选的依赖项;这些功能的文档将指定所需的依赖项。

Log4j2 的优势

  • 性能提升: 在多线程方案中,异步记录器 (异常)的吞吐量比 Log4j 1.x 和 Logback 高 18 倍,延迟低几个数量级。
  • 支持多个接口: 虽然Log4j 2 API将提供最佳性能,但Log4j 2提供了对Log4j 1.2,SLF4J,Commons Logging 和 java.util.logging(JUL)API的支持。
  • 自动重载配置: 参考Logback,与Logback一样,Log4j 2可以在修改时自动重新加载其配置。但与 Logback 不同的是,在重新配置发生时,它将在不丢失日志事件的情况下执行此操作。
  • 无垃圾:在稳态日志记录期间,Log4j 2 在独立应用程序中是无垃圾的,在 Web 应用程序中是低垃圾。这减少了垃圾回收器的压力,并可以提供更好的响应时间性能。

更多详细转看官网:Log4j – Apache Log4j 2

配置Log4j2

src下创建一个 log4j2.xml 文件,将以下代码添加进入即可

<?xml version="1.0" encoding="UTF-8" ?>
<!--
    status="warn" 日志框架本身的输出日志级别,可以修改为debug
    monitorInterval="5" 自动加载配置文件的间隔时间,不低于 5 秒;生产环境中修改配置文件,是热更新,无需重启应用
 -->
<configuration status="warn" monitorInterval="5">
    <!--
    集中配置属性进行管理
    使用时通过:${name}
    -->
    <properties>
        <property name="LOG_HOME">D:/logs</property>
    </properties>
 
    <!-- 日志处理 -->
    <Appenders>
        <!-- 控制台输出 appender,SYSTEM_OUT输出黑色,SYSTEM_ERR输出红色 -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] [%-5level] %c{36}:%L --- %m%n" />
        </Console>
 
        <!-- 日志文件输出 appender -->
        <File name="file" fileName="${LOG_HOME}/myfile.log">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n" />
        </File>
 
        <!-- 使用随机读写流的日志文件输出 appender,性能提高 -->
        <RandomAccessFile name="accessFile" fileName="${LOG_HOME}/myAcclog.log">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n" />
        </RandomAccessFile>
 
        <!-- 按照一定规则拆分的日志文件的appender -->  <!-- 拆分后的文件 -->
        <!-- filePattern="${LOG_HOME}/$${date:yyyy-MM-dd}/myrollog-%d{yyyy-MM-dd-HH-mm}-%i.log"> -->
        <RollingFile name="rollingFile" fileName="${LOG_HOME}/myrollog.log"
                     filePattern="${LOG_HOME}/$${date:yyyy-MM-dd}/myrollog-%d{yyyy-MM-dd}-%i.log">
            <!-- 日志级别过滤器 -->
            <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" />
            <!-- 日志消息格式 -->
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %c{36} - %msg%n" />
            <Policies>
                <!-- 在系统启动时,出发拆分规则,生产一个新的日志文件 -->
                <OnStartupTriggeringPolicy />
                <!-- 按照文件大小拆分,10MB -->
                <SizeBasedTriggeringPolicy size="2MB" />
                <!-- 按照时间节点拆分,规则根据filePattern定义的 -->
                <TimeBasedTriggeringPolicy />
            </Policies>
            <!-- 在同一个目录下,文件的个限定为 30个,超过进行覆盖 -->
            <DefaultRolloverStrategy max="10" />
        </RollingFile>
 
    </Appenders>
 
    <!-- logger 定义 -->
    <Loggers>
        <!-- 使用 rootLogger 配置 日志级别 level="trace" -->
        <Root level="trace">
            <!-- 指定日志使用的处理器 -->
           <!-- <AppenderRef ref="Console" />-->
            <AppenderRef ref="file" />
            <AppenderRef ref="rollingFile" />
            <AppenderRef ref="accessFile" />
        </Root>
    </Loggers>
</configuration>

此处代码引自 log4j2 的使用【超详细图文】_不埋雷的探长的博客-CSDN博客_log4j2

完成以上步骤后,接下来讲解如何使用 log4j2

Log4j2 的使用

  1. 导包
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
  1. 定义一个成员字段
// 获取Logger对象,调用方法记录日志
private static Logger logger = LogManager.getLogger(Demo.class.getName());
  1. 编写代码

img

日志级别

Log4j2中日志有六个级别(level):

  • trace:追踪,是最低的日志级别,相当于追踪程序的执行,一般不怎么使用
  • debug:调试,一般在开发中,都将其设置为最低的日志级别
  • info:信息,输出重要的信息,使用较多
  • warn:警告,有些时候,虽然程序不会报错,但是还是需要告诉程序员的
  • error:错误,这个在开发中也挺常用的
  • fatal:严重错误,这个一旦发生,程序基本上也要停止了
posted @ 2022-05-20 16:58  JanYork(小简)  阅读(64)  评论(0编辑  收藏  举报