Bootstrap

Java中Log4j的配置与使用详细解析

Log4j

  • Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件。

  • 也可以控制每一条日志的输出格式

  • 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。

  • 这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

日志级别

debug调试 info信息 warn警告 error错误 fatal严重(从小到大)

  1. debug(调试):非常详细的代码运行记录
  2. info(信息):常规的信息输出【比较常用】,一般用于记录应用程序的运行状态和关键信息,如启动、关闭等
  3. warn(警告):程序中出现了一些不合理的情况,但是还没有达到影响运行的程度,不会导致程序立即停止。
  4. error(错误):程序中某个模块发生了错误,但是不影响整体的系统运行,只要妥善处理。例如捕获异常。
  5. fatal(严重):严重的错误不是来自于业务逻辑,可能来自于运行环境,可能会导致系统崩溃,一般用于记录程序运行过程中无法恢复的严重错误。例如:内存溢出
Log4j三大核心组件

1、Logger(日志记录器)

Logger是Log4j中负责记录日志的核心组件。他提供了各种日志记录方法,如debug()、info()、warn()、error()、fatal()等。

logger.debug("这是一个调试信息");
logger.info("这是一个信息");
logger.warn("这是一个警告");
logger.error("这是一个错误");
logger.fatal("这是一个致命错误");

2、Appender(日志输出器)

Appender负责将日志输出到指定的目的地。Log4j提供了多种Appender类型,如ConsoleAppender(控制台)、FileAppender(文件)、DailyRollingFileAppender(按日期滚动文件)等。

org.apache.log4j.ConsoleAppender //控制台
org.apache.log4j.FileAppender //⽂件
org.apache.log4j.DailyRollingFileAppender //每天产⽣⼀个⽇志⽂件
org.apache.log4j.RollingFileAppender //⽂件⼤⼩达到指定尺⼨时产⽣⼀个新⽂件
org.apache.log4j.WriterAppender //将⽇志以流格式发送到任意指定位置
org.apache.log4j.JDBCAppender //把⽇志⽤JDBC记录到数据库

3、Layout(日志格式化器)

Layout负责将日志信息格式化成特定的格式。常见格式有:

org.apache.log4j.HTMLLayout //HTML表格形式布局
org.apache.log4j.PatternLayout //根据模板布局
org.apache.log4j.SimpleLayout //包含⽇志信息级别和信息字符串
org.apache.log4j.TTCCLayout //包含⽇志产⽣的线程,类别,内容等信息
log4j.properties配置文件
# 设置输出器 [level,] appenderName1, appenderName2,....
# level为日志输出级别,默认为debug
log4j.rootLogger = debug,logger1,logger2

# 输出源配置,通常包含以下两种结构:
# 声明输出源类型
# log4j.appender.输出源名称 = 输出源类型
# 为该输出源定义配置参数
# log4j.appender.输出源名称.配置参数名 = 配置参数值

## 第一个输出源
# 使用控制台输出源类型(输出时会将信息打印到控制台上)
log4j.appender.logger1 = org.apache.log4j.ConsoleAppender
# 输出使用的目标对象
log4j.appender.logger1.Target = System.out
# 定义该输出源使用的布局  PatternLayout:格式字符串
log4j.appender.logger1.layout = org.apache.log4j.PatternLayout
# 定义布局格式  -:向左对齐
log4j.appender.logger1.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss,SSS} [%-5p] [%t] [%m]%n

## 第二个输出源
# 使用每天产生一个新日志文件的输出源
log4j.appender.logger2 = org.apache.log4j.DailyRollingFileAppender
# 输出文件的路径
log4j.appender.logger2.File = logs/env-log
log4j.appender.logger2.datePattern='.'yyyy-MM-dd HH-mm'.log'
# 是否追加
log4j.appender.logger2.Append = true
# 输出级别
log4j.appender.logger2.Threshold = info
# 定义该输出源使用的布局
log4j.appender.logger2.layout = org.apache.log4j.PatternLayout
# 定义布局格式
log4j.appender.logger2.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%-5p] [%t] [%m]%n
基本使用

1、引入相关依赖:Log4j

<dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
</dependency>

2、导入包:import org.apache.log4j.Logger;

3、创建日志对象,参数为当前类的class

  • static Logger log = Logger.getLogger(Log4jExample.class);

import org.apache.log4j.Logger;

public class Log4jExample {
    static final Logger logger = Logger.getLogger(Log4jExample.class);

    public static void main(String[] args) {
        // 输出不同级别的日志
        logger.fatal("这是一个致命错误");
        logger.error("这是一个错误");
        logger.warn("这是一个警告");
        logger.info("这是一个信息");
        logger.debug("这是一个调试信息");
        logger.trace("这是一个跟踪信息");
    }
}

最后:在Mybatis设置中设定STDOUT_LOGGING是标准的日志输出,也可以通过上述导包和依赖的方式,设置为Log4j

<!-- 开启SQL日志输出功能  STDOUT_LOGGING标准的日志输出-->
<setting name="logImpl"	value="STDOUT_LOGGING"/>

<setting name="logImpl"	value="log4j"/>

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;