当前位置 : 主页 > 编程语言 > 其它开发 >

Log4j 日志框架

来源:互联网 收集:自由互联 发布时间:2022-07-02
01、简单介绍 Log4j(Log for java)是 Apache 的一个开源项目,通过使用 Log4j,可以控制日志信息输送的目的地是控制台或文件等,也可以控制每一条日志的输出格式。通过定义每一条日志信
01、简单介绍

Log4j(Log for java)是 Apache 的一个开源项目,通过使用 Log4j,可以控制日志信息输送的目的地是控制台或文件等,也可以控制每一条日志的输出格式。通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。使用 Log4j 技术,主要使用的是其配置文件。

02、组件介绍

Loggers(日志记录器) 控制日志的输出以及输出级别。输出日志的规则是:只输出级别不低于设定级别的日志信息,假设 Loggers 级别设定为 INFO,则 INFO、WARN、ERROR、FATAL 级别的日志信息都会输出,而级别比 INFO 低的 DEBUG、TRACE 则不会输出。

级别 说明 ALL 打开所有日志记录开关;是最低等级的 TRACE 输出追踪信息;一般情况下并不会使用 DEBUG(默认) 输出调试信息;打印些重要的运行信息 INFO 输出提示信息;突出应用程序运行过程 WARN 输出警告信息;会出现潜在错误的情况 ERROR 输出错误信息;不影响系统的继续运行 FATAL 输出致命错误;会导致应用程序的退出 OFF 关闭所有日志记录开关;是最高等级的

Appenders(输出控制器) 控制日志输出到不同的地方,如控制台、文件、数据库等。

常用输出控制器 描述 ConsoleAppender 将日志信息输出到控制台 FileAppender 将日志信息输出到文件中 DailyRollingFileAppender 将日志信息输出到文件中,并且每天输出到一个新的文件 RollingFileAppender 将日志信息输出到文件中,并且指定文件的尺寸,当文件大小达到指定尺寸时,会自动把文件改名,同时产生一个新的文件 JDBCAppender 将日志信息保存到数据库中

Layout(日志格式化器) 控制日志的输出格式。

常用日志格式化器 描述 SimpleLayout 将日志信息输出为简单格式,默认 INFO 级别的消息 PatternLayout 将日志信息输出为自定义格式,如果没有指定转换格式, 则用默认的转换格式 03、入门案例

导入依赖:

<dependencies>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

代码示例:

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.junit.Test;

public class Log4jTest {
    @Test
    public void test01() {
        BasicConfigurator.configure(); //加载初始化配置
        Logger logger = Logger.getLogger(Log4jTest.class);
        logger.trace("trace信息");
        logger.debug("debug信息"); //默认级别
        logger.info("info信息");
        logger.warn("warn信息");
        logger.error("error信息");
        logger.fatal("fatal信息");
    }
}

运行结果:

0 [main] DEBUG com.Log4jTest  - debug信息
1 [main] INFO com.Log4jTest  - info信息
1 [main] WARN com.Log4jTest  - warn信息
1 [main] ERROR com.Log4jTest  - error信息
1 [main] FATAL com.Log4jTest  - fatal信息
04、配置文件

配置说明:

log4j.rootLogger=日志级别,自定义输出控制器名称(可以多个,逗号隔开)
log4j.appender.自定义输出控制器名称=输出方式
log4j.appender.自定义输出控制器名称.layout=输出格式

代码示例: 创建 log4j.properties 配置文件

#配置日志输出级别,输出控制器
log4j.rootLogger=INFO,console
#配置输出方式(控制台)
log4j.appender.console=org.apache.log4j.ConsoleAppender
#配置输出格式(简单格式)
log4j.appender.console.layout=org.apache.log4j.SimpleLayout
@Test
public void test02() {
    // 已有配置文件,无需再加载初始化配置
    //BasicConfigurator.configure();
    Logger logger = Logger.getLogger(Log4jTest.class);
    logger.trace("trace信息");
    logger.debug("debug信息");
    logger.info("info信息");
    logger.warn("warn信息");
    logger.error("error信息");
    logger.fatal("fatal信息");
}

运行结果:

INFO - info信息
WARN - warn信息
ERROR - error信息
FATAL - fatal信息
05、自定义格式

PatternLayout 是最主要的方式,可以自定义格式输出,具体的占位符及其描述如下:

占位符 描述 %c 输出打印语句所属类的全路径 %d 输出服务器当前时间,默认为 ISO8601,也可以指定格式。如:%d{yyyy-MM-dd HH:mm:ss} %F 输出日志信息所在类的名称 %L 输出日志信息代码所在的行号 %l 输出日志信息发生的所在位置 %m 输出代码中指定的日志信息 %n 换行符 %p 输出日志级别 %r 输出自应用启动到输出该日志信息耗费的毫秒数 %t 输出产生该日志的线程全名 %% 输出一个 "%" 字符 %n占位符 输出占位符信息,最小宽度为 n 个字符,占位符信息 < n,默认的情况下右对齐 %-n占位符 输出占位符信息,最小宽度为 n 个字符,占位符信息 < n,"-" 号指定左对齐,会有空格 %.n占位符 输出占位符信息,最大宽度是 n 个字符,占位符信息 > n,将左边多出的字符截掉,< n 不会有空格 %n.N占位符 占位符信息 < n 个字符补空格,并且右对齐,> N 个字符,就从左边多出的字符截掉

代码示例:

#配置日志输出级别,输出控制器
log4j.rootLogger=INFO,console

########## 输出到控制台 ##########
#配置输出方式
log4j.appender.console=org.apache.log4j.ConsoleAppender
#配置输出格式
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#配置转换格式
log4j.appender.console.layout.conversionPattern=[%-5p] %r [%t] [%d{yyyy-MM-dd HH:mm:ss}] %l %m%n
@Test
public void test03() {
    Logger logger = Logger.getLogger(Log4jTest.class);
    logger.trace("trace信息");
    logger.debug("debug信息");
    logger.info("info信息");
    logger.warn("warn信息");
    logger.error("error信息");
    logger.fatal("fatal信息");
}

运行结果:

[INFO ] 1 [main] [2022-06-30 21:19:45] Log4jTest.test03(Log4jTest.java:38) info信息
[WARN ] 2 [main] [2022-06-30 21:19:45] Log4jTest.test03(Log4jTest.java:39) warn信息
[ERROR] 2 [main] [2022-06-30 21:19:45] Log4jTest.test03(Log4jTest.java:40) error信息
[FATAL] 3 [main] [2022-06-30 21:19:45] Log4jTest.test03(Log4jTest.java:41) fatal信息
06、日志打印到文件中
#配置日志输出级别,输出控制器
log4j.rootLogger=INFO,file

########## 输出到文件中 ##########
#配置输出方式
log4j.appender.file=org.apache.log4j.FileAppender
#配置输出格式
log4j.appender.file.layout=org.apache.log4j.PatternLayout
#配置转换格式
log4j.appender.file.layout.conversionPattern=[%-5p] %r [%t] [%d{yyyy-MM-dd HH:mm:ss}] %l %m%n
#配置文件位置
log4j.appender.file.file=file.log
#配置输出字符编码
log4j.appender.file.encoding=UTF-8

按照文件大小拆分:

#配置日志输出级别,输出控制器
log4j.rootLogger=INFO,rollingFile

########## 按照文件大小拆分 ##########
#配置输出方式
log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
#配置输出格式
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
#配置转换格式
log4j.appender.rollingFile.layout.conversionPattern=[%-5p] %r [%t] [%d{yyyy-MM-dd HH:mm:ss}] %l %m%n
#配置文件位置
log4j.appender.rollingFile.file=rollingFile.log
#配置字符编码
log4j.appender.rollingFile.encoding=UTF-8
#配置文件大小
log4j.appender.rollingFile.maxFileSize=1KB
#配置文件数量
log4j.appender.rollingFile.maxBackupIndex=2

#若文件大小超过1KB,则生成另外一个文件,数量最多2个。
#若2个文件不够用,则按照时间来进行覆盖,保留新的覆盖旧的。

按照时间进行拆分:

#配置日志输出级别,输出控制器
log4j.rootLogger=INFO,dailyRollingFile

########## 按照时间进行拆分 ##########
#配置输出方式
log4j.appender.dailyRollingFile=org.apache.log4j.DailyRollingFileAppender
#配置输出格式
log4j.appender.dailyRollingFile.layout=org.apache.log4j.PatternLayout
#配置转换格式
log4j.appender.dailyRollingFile.layout.conversionPattern=[%-5p] %r [%t] [%d{yyyy-MM-dd HH:mm:ss}] %l %m%n
#配置文件位置
log4j.appender.dailyRollingFile.file=dailyRollingFile.log
#配置字符编码
log4j.appender.dailyRollingFile.encoding=UTF-8
#配置日期格式
log4j.appender.dailyRollingFile.datePattern='.'yyyy-MM-dd
07、日志保存到数据库
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
</dependency>
create table log4j
(
    id         int(11) not null auto_increment comment '自增ID',
    name       varchar(255) default null comment '项目名称',
    createTime varchar(255) default null comment '创建时间',
    level      varchar(255) default null comment '日志级别',
    thread     varchar(255) default null comment '所属线程',
    fileName   varchar(255) default null comment '文件名称',
    location   varchar(255) default null comment '日志位置',
    message    varchar(255) default null comment '日志信息',
    primary key (id)
)
#配置日志输出级别,输出控制器
log4j.rootLogger=INFO,db

########## 日志保存到数据库 ##########
#配置输出方式
log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
#配置输出格式
log4j.appender.db.layout=org.apache.log4j.PatternLayout
#配置转换格式
log4j.appender.db.layout.conversionPattern=[%-5p] %r [%t] [%d{yyyy-MM-dd HH:mm:ss}] %l %m%n
#配置数据库
log4j.appender.db.URL=jdbc:mysql://localhost:3306/test
log4j.appender.db.Driver=com.mysql.cj.jdbc.Driver
log4j.appender.db.User=root
log4j.appender.db.Password=root
log4j.appender.db.Sql=insert into log4j (name, createTime, level, thread, fileName, location, message) \
  values ('log', '%d{yyyy-MM-dd HH:mm:ss}', '%p', '%t', '%F', '%l', '%m');
上一篇:类加载
下一篇:没有了
网友评论