栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

日志框架 - 雁迟

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

日志框架 - 雁迟

所有的测试内容同步到:https://gitee.com/panlsp/logging_framework

常见的日志框架及日志门面常见的日志实现:JUL、log4j、logback、log4j2

常见的日志门面:JCL、slf4j

出现顺序:log4j -->JUL–>JCL–> slf4j --> logback --> log4j2e

1、log4j 日志框架 导入依赖

	log4j
	log4j
	1.2.17




    junit
    junit
    4.13.2
    test

注意加载初始化信息: Basicconfigurator.configure();

日志级别说明:

Log4j 提供了8个级别的日志输出,分别为:

ALL 最低等级用于打开所有级别的日志记录

TRACE 程序推进下的追踪信息,这个追踪信息的日志级别非常低,一般情况下是不会使用的

DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要是配合开发,在开发过程中打印一些重要的运行信息

INFO 消息的粗粒度级别运行信息

WARN 表示警告,程序在运行过程中会出现的有可能会发生的隐形的错误注意,有些信息不是错误,但是这个级别的输出目的就是为了给程序员以提示

ERROR 系统的错误信息,发生的错误不影响系统的运行一般情况下,如果不想输出太多的日志,则使用该级别即可

FATAL 表示严重错误,它是那种一旦发生系统就不可能继续运行的严重错误如果这种级别的错误出现了,表示程序可以停止运行了

OFF 最高等级的级别,用户关闭所有的日志记录

1.1、入门案例
public class MyTest {
    static Logger logger = Logger.getLogger(MyTest.class);

    // 使用默认的日志(控制台日志,无需配置文件)
    @Test
    public void test1() {
        // 加载初始化信息
        BasicConfigurator.configure();
        
        logger.trace("trace 信息");
        logger.debug("debug 信息");
        logger.info("info 信息");
        logger.warn("warn 信息");
        logger.error("error 信息");
        logger.fatal("fatal 信息");
    }
}

日志默认级别:debug

1.2、快速上手

配置文件配置:log4j.properties(需要放在resources文件夹下)

#配置根节点logger  log4j.rootLogger=日志级别,{自定义名字1,自定义名字2}
log4j.rootLogger=trace,console,file

#配置.appender输出方式输出到控制台
log4j.appender.console=org.apache.log4j.ConsoleAppender
#配置输出到控制台的格式
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=[%-6p]%r %c%t%d{yyyy-MM-dd HH:mm:ss:SSS} %m%n

#配置appender输出方式输出到文件
log4j.appender.file=org.apache.log4j.FileAppender
#配置输出到文件中的格式
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern=[%-6p]%r %c%t%d{yyyy-MM-dd HH:mm:ss:SSS} %m%n
#第一个file是我们自己命名的appenderName,第二个file是用来指定文件位置的属性
log4j.appender.file.file=D://test//log4j.log
#配置输出字符编码
log4j.appender.file.encoding=UTF-8

测试:

// 2、快速上手
@Test
public void test2() {
    logger.trace("trace 信息");
    logger.debug("debug 信息");
    logger.info("info 信息");
    logger.warn("warn 信息");
    logger.error("error 信息");
    logger.fatal("fatal 信息");
}

生成的日志文件:

1.3、按照文件大小拆分日志

当日志过量时,新日志会覆盖旧日志

配置文件配置:

#配置根节点logger  log4j.rootLogger=日志级别,{自定义名字1,自定义名字2}
log4j.rootLogger=trace,rollingFile

#配置appender输出方式输出到文件(文件大小进行拆分)
log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
#配置输出到文件中的格式
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.conversionPattern=[%-6p]%r %c%t%d{yyyy-MM-dd HH:mm:ss:SSS} %m%n
#第一个file是我们自己命名的appenderName,第二个file是用来指定文件位置的属性
log4j.appender.rollingFile.file=D://test//log4j.log
#配置输出字符编码
log4j.appender.rollingFile.encoding=UTF-8
#配置文件的最大尺寸(默认值:10485760L)10M
log4j.appender.rollingFile.MaxFileSize=10M
#配置最大记录文件数(默认值:1)
log4j.appender.rollingFile.MaxBackupIndex=5

测试:

// 3、按照文件大小拆分日志
@Test
public void test3() {

    for (int i = 0; i < 100000; i++) {
        logger.trace("trace 信息");
        logger.debug("debug 信息");
        logger.info("info 信息");
        logger.warn("warn 信息");
        logger.error("error 信息");
        logger.fatal("fatal 信息");
    }
}

生成的日志文件:

1.4、按照时间进行日志拆分

日志冗余需要自己手动清理或者写shell脚本

配置文件配置:

#配置根节点logger  log4j.rootLogger=日志级别,{自定义名字1,自定义名字2}
log4j.rootLogger=trace,console,dailyRollingFile

#配置.appender输出方式输出到控制台
log4j.appender.console=org.apache.log4j.ConsoleAppender
#配置输出到控制台的格式
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=[%-6p]%r %c%t%d{yyyy-MM-dd HH:mm:ss:SSS} %m%n

#配置appender输出方式输出到文件(文件时间进行拆分)
log4j.appender.dailyRollingFile=org.apache.log4j.DailyRollingFileAppender
#配置输出到文件中的格式
log4j.appender.dailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.dailyRollingFile.layout.conversionPattern=[%-6p]%r %c%t%d{yyyy-MM-dd HH:mm:ss:SSS} %m%n
#第一个file是我们自己命名的appenderName,第二个file是用来指定文件位置的属性
log4j.appender.dailyRollingFile.file=D://test//log4j.log
#配置输出字符编码
log4j.appender.dailyRollingFile.encoding=UTF-8
#配置文件的拆分时间(默认值:'.'yyyy-MM-dd)每天午夜滚动。  便于测试,如下使用的是一分钟
log4j.appender.dailyRollingFile.DatePattern='.'yyyy-MM-dd-HH-mm

测试:

// 3、按照时间拆分日志
@Test
public void test4() throws InterruptedException {

    for (int i = 0; i < 3; i++) {
        logger.trace("trace 信息");
        logger.debug("debug 信息");
        logger.info("info 信息");
        logger.warn("warn 信息");
        logger.error("error 信息");
        logger.fatal("fatal 信息");
        // 休眠一分钟
        Thread.sleep(1000 * 60);
    }
}

生成的日志文件:

1.5、日志持久化到数据库表中

导入mysql的驱动:


    mysql
    mysql-connector-java
    5.1.49

数据表结构(tb_log4j):

CREATE TABLE `tb_log4j` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL COMMENT '项目名称',
  `createTime` varchar(255) DEFAULT NULL COMMENT '创建时间',
  `level` varchar(255) DEFAULT NULL COMMENT '日志级别',
  `category` varchar(255) DEFAULT NULL COMMENT '所在类的全路径',
  `fileName` varchar(255) DEFAULT NULL COMMENT '文件名称',
  `message` varchar(255) DEFAULT NULL COMMENT '日志消息',
  PRIMARY KEY (`id`)
)

配置文件:

#配置根节点logger  log4j.rootLogger=日志级别,{自定义名字1,自定义名字2}
log4j.rootLogger=trace,console,logDB

#配置appender输出方式输出到数据库表中
log4j.appender.logDB=org.apache.log4j.jdbc.JDBCAppender
#配置输出到文件中的格式
log4j.appender.logDB.layout=org.apache.log4j.PatternLayout
#配置数据库的连接
log4j.appender.logDB.URL=jdbc:mysql://localhost:3306/log4j?useSSL=false&useUnicode=true&characterEncoding=UTF-8
log4j.appender.logDB.User=root
log4j.appender.logDB.Password=root
log4j.appender.logDB.Sql=insert into tb_log4j(name,createTime,level,category,fileName,message) values ('log4j_project','%d{yyyy-MM-dd HH:mm:ss:SSS}','%p','%c','%F','%m')

测试:

// 3、日志持久化到数据库表中
@Test
public void test5() {
    logger.trace("trace 信息");
    logger.debug("debug 信息");
    logger.info("info 信息");
    logger.warn("warn 信息");
    logger.error("error 信息");
    logger.fatal("fatal 信息");
}

日志信息:

1.6、配置自定义logger

配置文件:

#配置根节点logger  log4j.rootLogger=日志级别,{自定义名字1,自定义名字2}
log4j.rootLogger=trace,file

#配置自定义logger(日志打印级别)
log4j.logger.com.yanchi=info,console

#配置.appender输出方式输出到控制台
log4j.appender.console=org.apache.log4j.ConsoleAppender
#配置输出到控制台的格式
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=[%-6p]%r %c %t %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n

#配置appender输出方式输出到文件
log4j.appender.file=org.apache.log4j.FileAppender
#配置输出到文件中的格式
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern=[%-6p]%r %c %t %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n
#第一个file是我们自己命名的appenderName,第二个file是用来指定文件位置的属性
log4j.appender.file.file=D://test//log4j.log
#配置输出字符编码
log4j.appender.file.encoding=UTF-8

测试:

// 4、配置自定义logger
@Test
public void test6() {
    logger.trace("trace 信息");
    logger.debug("debug 信息");
    logger.info("info 信息");
    logger.warn("warn 信息");
    logger.error("error 信息");
    logger.fatal("fatal 信息");
}

日志信息:

1.7、完整版配置(按需修改)
#配置根节点logger  log4j.rootLogger=日志级别,{自定义名字1,自定义名字2}
log4j.rootLogger=trace,file

#配置自定义logger
log4j.logger.com.yanchi=info,console

#配置.appender输出方式输出到控制台
log4j.appender.console=org.apache.log4j.ConsoleAppender
#配置输出到控制台的格式
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=[%-6p]%r %c %t %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n

#配置appender输出方式输出到文件
log4j.appender.file=org.apache.log4j.FileAppender
#配置输出到文件中的格式
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern=[%-6p]%r %c %t %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n
#第一个file是我们自己命名的appenderName,第二个file是用来指定文件位置的属性
log4j.appender.file.file=D://test//log4j.log
#配置输出字符编码
log4j.appender.file.encoding=UTF-8

#配置appender输出方式输出到文件(文件大小进行拆分)
log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
#配置输出到文件中的格式
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.conversionPattern=[%-6p]%r %c %t %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n
#第一个file是我们自己命名的appenderName,第二个file是用来指定文件位置的属性
log4j.appender.rollingFile.file=D://test//log4j.log
#配置输出字符编码
log4j.appender.rollingFile.encoding=UTF-8
#配置文件的最大尺寸(默认值:10485760L)10M
log4j.appender.rollingFile.MaxFileSize=10M
#配置最大记录文件数(默认值:1)
log4j.appender.rollingFile.MaxBackupIndex=5

#配置appender输出方式输出到文件(文件时间进行拆分)
log4j.appender.dailyRollingFile=org.apache.log4j.DailyRollingFileAppender
#配置输出到文件中的格式
log4j.appender.dailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.dailyRollingFile.layout.conversionPattern=[%-6p]%r %c %t %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n
#第一个file是我们自己命名的appenderName,第二个file是用来指定文件位置的属性
log4j.appender.dailyRollingFile.file=D://test//log4j.log
#配置输出字符编码
log4j.appender.dailyRollingFile.encoding=UTF-8
#配置文件的拆分时间(默认值:'.'yyyy-MM-dd)每天午夜滚动。  便于测试,如下使用的是一分钟
log4j.appender.dailyRollingFile.DatePattern='.'yyyy-MM-dd-HH-mm

#配置appender输出方式输出到数据库表中
log4j.appender.logDB=org.apache.log4j.jdbc.JDBCAppender
#配置输出到文件中的格式
log4j.appender.logDB.layout=org.apache.log4j.PatternLayout
#配置数据库的连接
log4j.appender.logDB.URL=jdbc:mysql://localhost:3306/log4j?useSSL=false&useUnicode=true&characterEncoding=UTF-8
log4j.appender.logDB.User=root
log4j.appender.logDB.Password=root
log4j.appender.logDB.Sql=insert into tb_log4j(name,createTime,level,category,fileName,message) values ('log4j_project','%d{yyyy-MM-dd HH:mm:ss:SSS}','%p','%c','%F','%m')
2、JCL 日志门面

简介:

​ 全称为Jakarta Commons Logging,是Apache提供的一个 通用日志API

​ 用户可以自由选择第三方的日志组件作为具体实现,像 log4j,或者jdk自带的jul,common-logging 会通过动态查找的机制,在程序运行时自动找出真正使用的日志库。

​ 当然,common-logging内部有一个Simple logger的简单实现,但是功能很弱。所以使用common-logging,通常都是配合着log4j以及其他日志框架来使用。

​ 使用它的好处就是,代码依赖是common-logging 而非log4j的API,避免了和具体的日志API直接耦合,在有必要时,可以更改日志实现的第三方库。

​ JCL有两个基本的抽象类:

​ Log:日志记录器

​ LogFactory:日志工厂(负责创建Log实例)

导入依赖

    commons-logging
    commons-logging
    1.2




    junit
    junit
    4.13.2
    test

2.1、入门案例

测试:

@Test
public void test1(){

    
    Log log = LogFactory.getLog(JCLTest.class);
    log.info("info 信息");

}

日志信息:

2.2、集成Log4j

导入依赖:


    log4j
    log4j
    1.2.17

书写配置文件:

#配置根节点logger  log4j.rootLogger=日志级别,{自定义名字1,自定义名字2}
log4j.rootLogger=trace,console

#配置.appender输出方式输出到控制台
log4j.appender.console=org.apache.log4j.ConsoleAppender
#配置输出到控制台的格式
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=[%-6p]%r %c %t %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n

测试:

@Test
public void test2(){

    
    Log log = LogFactory.getLog(JCLTest.class);
    log.info("info 信息");

}

日志信息:

3、SLF4J 日志门面

​ 简单日志门面,对应的英文为Simple Logging Facade,是存取日志的标准接口,包括slf4j、log4j、jdk logging api和apache common-log等具体实现。

​ 主要两个功能:日志框架的绑定以及日志框架的桥接

导入依赖:

    junit
    junit
    4.13.2
    test




    org.slf4j
    slf4j-api
    1.7.32




    org.slf4j
    slf4j-simple
    1.7.32

3.1、入门案例

测试:

@Test
public void test1(){
    
    Logger logger = LoggerFactory.getLogger(SLF4JTest.class);

    logger.trace("trace信息");
    logger.debug("debug信息");
    logger.info("info信息");
    logger.warn("warn信息");
    logger.error("error信息");

}

日志信息:

3.2、动态打印日志

测试:

// 动态打印日志的实现
@Test
public void test2(){
    Logger logger = LoggerFactory.getLogger(SLF4JTest.class);

    String name = "yanchi";
    int age = 18;

    logger.info("姓名:{},年龄:{}",name,age);
}

日志信息:

3.3、打印异常信息

测试:

// 打印异常信息
@Test
public void test3(){
    Logger logger = LoggerFactory.getLogger(SLF4JTest.class);

    try {
        Class.forName("aaa");
    } catch (Exception e) {
        logger.error("异常信息:",e);
    }
}

日志信息:

3.4、集成logback

依赖:

        
        
            ch.qos.logback
            logback-classic
            1.2.6
        

        





测试:

@Test
public void test4(){
    Logger logger = LoggerFactory.getLogger(SLF4JTest.class);
    try {
        Class.forName("bbb");
    } catch (Exception e) {
        logger.error("异常信息(logback版本):",e);
    }
}

日志信息:

3.5、集成log4j

依赖:


    org.slf4j
    slf4j-log4j12
    1.7.32




    log4j
    log4j
    1.2.17

书写配置文件:

#配置根节点logger  log4j.rootLogger=日志级别,{自定义名字1,自定义名字2}
log4j.rootLogger=trace,console

#配置.appender输出方式输出到控制台
log4j.appender.console=org.apache.log4j.ConsoleAppender
#配置输出到控制台的格式
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=[%-6p]%r %c %t %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n

测试:

@Test
public void test5(){
    Logger logger = LoggerFactory.getLogger(SLF4JTest.class);
    try {
        Class.forName("ccc");
    } catch (Exception e) {
        logger.error("异常信息(log4j版本):",e);
    }
}

日志信息:

3.6、集成JUL

依赖:


    org.slf4j
    slf4j-jdk14
    1.7.32

测试:

@Test
public void test6() {
    Logger logger = LoggerFactory.getLogger(SLF4JTest.class);

    logger.trace("trace 信息");
    logger.debug("debug 信息");
    logger.info("info 信息");
    logger.warn("warn 信息");
    logger.error("error 信息");
}

日志信息:

3.7、桥接器的使用

注意:桥接器和适配器不能同时导入

本次测试:默认log4j日志切换为logback日志(其余桥接问题大同小异)

依赖:

注释掉默认的log4j,导入log4j桥接依赖

        








    org.slf4j
    slf4j-api
    1.7.32




    org.slf4j
    log4j-over-slf4j
    1.7.32




    ch.qos.logback
    logback-classic
    1.2.6

测试:

package com.yanchi;

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

public class SLF4JBridge {
    @Test
    public void test(){

        Logger logger = LogManager.getLogger(SLF4JBridge.class);

        logger.trace("trace 信息");
        logger.debug("debug 信息");
        logger.info("info 信息");
        logger.warn("warn 信息");
        logger.error("error 信息");

    }

}

日志信息:

4、logback 日志 4.1、入门案例

依赖:


    junit
    junit
    4.13.2
    test




    ch.qos.logback
    logback-classic
    1.2.6




    org.slf4j
    slf4j-api
    1.7.32

测试:

// 1、入门案例
@Test
public void test1() {
    
    Logger logger = LoggerFactory.getLogger(MyTest.class);
    
    logger.trace("trace 信息");
    logger.debug("debug 信息");
    logger.info("info 信息");
    logger.warn("warn 信息");
    logger.error("error 信息");
}

日志信息:

4.2、配置入门

配置文件配置:logback.xml(需要放在resources文件夹下)





    
    

    
    

        
        
            System.err
        

        
        
            
            ${pattern}
        

    

    
    
        
        
    


测试:

// 2、配置案例
@Test
public void test2() {

    Logger logger = LoggerFactory.getLogger(LogbackTest.class);

    logger.trace("trace 信息");
    logger.debug("debug 信息");
    logger.info("info 信息");
    logger.warn("warn 信息");
    logger.error("error 信息");
}

日志信息:

4.3、日志文件输出

配置文件:





    
    
    
    

    
    
        
        ${logDir}/logback.log

        
        
            
            ${pattern}
        
    

    
    

        
        
            System.err
        

        
        
            
            ${pattern}
        

    

    
    
        
        
        
    


测试:

// 3、日志文件输出
@Test
public void test3() {

    Logger logger = LoggerFactory.getLogger(LogbackTest.class);

    logger.trace("trace 信息");
    logger.debug("debug 信息");
    logger.info("info 信息");
    logger.warn("warn 信息");
    logger.error("error 信息");
}

日志信息:

4.4、日志拆分

配置可拆分归档的文件

配置文件:





    
    
    
    

    
    
        
        ${logDir}/logback.log

        
        
            
            ${pattern}
        
    

    
    
        
        ${logDir}/roll_logback.log

        
        
            
            ${pattern}
        

        
        

            
            ${logDir}/roll.%d{yyyy-MM-dd}.log%i.gz

            
            1kb

        
    

    
    

        
        
            System.err
        

        
        
            
            ${pattern}
        

    

    
    
        
        
        
    


测试:

// 4、配置可拆分归档的文件
@Test
public void test4() {

    Logger logger = LoggerFactory.getLogger(LogbackTest.class);

    for (int i = 0; i < 10; i++) {
        logger.trace("trace 信息");
        logger.debug("debug 信息");
        logger.info("info 信息");
        logger.warn("warn 信息");
        logger.error("error 信息");
    }

}

日志信息:

4.4、异步日志

配置信息:

    
    

        
        
            System.err
        

        
        
            
            ${pattern}
        

    

    
    
        
    

    
    
        


        
    

测试:

// 5、异步日志
@Test
public void test5() {

    Logger logger = LoggerFactory.getLogger(LogbackTest.class);

    for (int i = 0; i < 50; i++) {
        logger.trace("trace 信息");
        logger.debug("debug 信息");
        logger.info("info 信息");
        logger.warn("warn 信息");
        logger.error("error 信息");
    }

    System.out.println("1--------------------");
    System.out.println("2--------------------");
    System.out.println("3--------------------");
    System.out.println("4--------------------");
    System.out.println("5--------------------");

}

日志信息:

5、log4j2日志

默认:error级别打印日志

5.1、入门案例

依赖:


    org.apache.logging.log4j
    log4j-api
    2.14.1




    org.apache.logging.log4j
    log4j-core
    2.14.1




    junit
    junit
    4.13.2
    test

测试:

// 1、使用默认的日志(控制台日志,无需配置文件)
@Test
public void test1() {

    Logger logger = LogManager.getLogger(Log4j2Test.class);

    logger.trace("trace 信息");
    logger.debug("debug 信息");
    logger.info("info 信息");
    logger.warn("warn 信息");
    logger.error("error 信息");
    logger.fatal("fatal 信息");
}

日志信息:

5.2、配置入门

配置文件配置:log4j2.xml(需要放在resources文件夹下)



    
    
        

        
    
    
    
    
        
            
        
    

测试:

// 2、使用配置文件的日志
@Test
public void test2() {

    Logger logger = LogManager.getLogger(Log4j2Test.class);

    logger.trace("trace 信息");
    logger.debug("debug 信息");
    logger.info("info 信息");
    logger.warn("warn 信息");
    logger.error("error 信息");
    logger.fatal("fatal 信息");
}

日志信息:

5.3、集成 slf4j 日志门面

依赖:



    
    
        org.slf4j
        slf4j-api
        1.7.32
    

    
    
        org.apache.logging.log4j
        log4j-slf4j-impl
        2.14.1
    

    
    
        org.apache.logging.log4j
        log4j-api
        2.14.1
    

    
    
        org.apache.logging.log4j
        log4j-core
        2.14.1
    

    
    
        junit
        junit
        4.13.2
        test
    


测试:

package com.yanchi;

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Slf4jToLog4j2 {

    // 集成 slf4j 日志门面
    @Test
    public void test3(){
        Logger logger = LoggerFactory.getLogger(Slf4jToLog4j2.class);

        logger.trace("trace 信息");
        logger.debug("debug 信息");
        logger.info("info 信息");
        logger.warn("warn 信息");
        logger.error("error 信息");

    }

}

日志信息:

5.4、日志文件输出

配置文件:




    
    
        D://test
    

    
    
        
        
            
        

        
        
            
        

    
    
    
    
        
            
            
        
    

测试:

// 4、日志文件输出
@Test
public void test4(){
    Logger logger = LoggerFactory.getLogger(Slf4jToLog4j2.class);

    logger.trace("trace 信息");
    logger.debug("debug 信息");
    logger.info("info 信息");
    logger.warn("warn 信息");
    logger.error("error 信息");

}

日志信息:

5.5、日志拆分

配置文件:




    
    
        D://test
    

    
    
        
        
            
        

        
        
            
        

        
        
            
            

            

                
                

                
                

                
                

            

            
            
        

    
    
    
    
        


            
        
    

测试:

// 5、日志拆分
@Test
public void test5(){
    Logger logger = LoggerFactory.getLogger(Slf4jToLog4j2.class);

    for (int i = 0; i < 2000; i++) {
        logger.trace("trace 信息");
        logger.debug("debug 信息");
        logger.info("info 信息");
        logger.warn("warn 信息");
        logger.error("error 信息");
    }
}

日志信息:

5.6、*异步日志 5.6.1、使用AsyncAppender方式(不是很推荐)

添加依赖:


    com.lmax
    disruptor
    3.4.4

配置文件:




    
    
        D://test
    

    
    
        
        
            
        

        
        
            
        

        
        
            
            

            

                
                

                
                

                
                

            

            
            
        

        
        
            
        

    
    
    
    
        
            
            



        
    

测试:

// 6.1、异步日志
@Test
public void test6_1(){
    Logger logger = LoggerFactory.getLogger(Slf4jToLog4j2.class);

    // 日志部分
    for (int i = 0; i < 50; i++) {
        logger.trace("trace 信息");
        logger.debug("debug 信息");
        logger.info("info 信息");
        logger.warn("warn 信息");
        logger.error("error 信息");
    }

    // 业务逻辑部分
    for (int i = 0; i < 10; i++) {
        System.out.println("----------------------------------------");
    }
}

日志信息:

5.6.2、使用AsyncLogger的方式(推荐) 5.6.2.1、全局异步

所有的日志都是异步的日志记录

需要在类路径resources下添加一个properties属性配置文件

文件名要求是:log4j2.component.properties

Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

配置文件:




    
    
        D://test
    

    
    
        
        
            
        

        
        
            
        

        
        
            
            

            

                
                

                
                

                
                

            

            
            
        

        




    
    
    
    
        
            

            
            


        
    

测试:

// 6.2.1、全局异步
@Test
public void test6_2_1(){
    Logger logger = LoggerFactory.getLogger(Slf4jToLog4j2.class);

    // 日志部分
    for (int i = 0; i < 50; i++) {
        logger.trace("trace 信息");
        logger.debug("debug 信息");
        logger.info("info 信息");
        logger.warn("warn 信息");
        logger.error("error 信息");
    }

    // 业务逻辑部分
    for (int i = 0; i < 10; i++) {
        System.out.println("----------------------------------------");
    }
}

日志信息:

5.6.2.2、混合异步

可以在应用中同时使用同步日志和异步日志,更加灵活

注意:需要把全局异步注释掉

配置文件:




    
    
        D://test
    

    
    
        
        
            
        

        
        
            
        

        
        
            
            

            

                
                

                
                

                
                

            

            
            
        

        




    
    
    
    

        
        
            
            

        

        
            

            
            


        
    

测试1:

// 6.2.2、混合异步(com.yanchi)
@Test
public void test6_2_2(){
    Logger logger = LoggerFactory.getLogger(Slf4jToLog4j2.class);

    // 日志部分
    for (int i = 0; i < 50; i++) {
        logger.trace("trace 信息");
        logger.debug("debug 信息");
        logger.info("info 信息");
        logger.warn("warn 信息");
        logger.error("error 信息");
    }

    // 业务逻辑部分
    for (int i = 0; i < 10; i++) {
        System.out.println("----------------------------------------");
    }
}

日志信息1:(异步)

测试2:

// 6.2.3、混合异步(org.slf4j)
@Test
public void test6_2_3(){
    Logger logger = LoggerFactory.getLogger(Logger.class);

    // 日志部分
    for (int i = 0; i < 50; i++) {
        logger.trace("trace 信息");
        logger.debug("debug 信息");
        logger.info("info 信息");
        logger.warn("warn 信息");
        logger.error("error 信息");
    }

    // 业务逻辑部分
    for (int i = 0; i < 10; i++) {
        System.out.println("----------------------------------------");
    }
}

日志信息:(同步)

6、SpringBoot日志实现

默认集成:slf4j+logback

6.1、入门案例

测试:

package com.yanchi;

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringbootLogStudyApplicationTests {

    // 1、使用默认的日志(控制台日志,无需配置文件)
    @Test
    public void test1() {

        Logger logger = LoggerFactory.getLogger(SpringbootLogStudyApplicationTests.class);

        logger.trace("trace 信息");
        logger.debug("debug 信息");
        logger.info("info 信息");
        logger.warn("warn 信息");
        logger.error("error 信息");
    }

}

日志信息:

6.2、使用log4j日志实现

测试:

package com.yanchi;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringbootLogStudyApplicationTest2 {

    // 2、使用log4j2日志实现(观察桥接器是否可用)
    @Test
    public void test2() {

        Logger logger = LogManager.getLogger(SpringbootLogStudyApplicationTest2.class);

        logger.trace("trace 信息");
        logger.debug("debug 信息");
        logger.info("info 信息");
        logger.warn("warn 信息");
        logger.error("error 信息");
        logger.fatal("fatal 信息");
    }

}

日志信息:

6.3、配置文件输出控制台

配置文件:(application.properties)

logging.level.com.yanchi=trace
logging.pattern.console=%d{yyyy-MM-dd} [%level] -%m%n

测试:

package com.yanchi;

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringbootLogStudyApplicationTest3 {

    // 3、使用配置文件实现
    @Test
    public void test3() {

        Logger logger = LoggerFactory.getLogger(SpringbootLogStudyApplicationTests.class);

        logger.trace("trace 信息");
        logger.debug("debug 信息");
        logger.info("info 信息");
        logger.warn("warn 信息");
        logger.error("error 信息");

    }

}

日志信息:

6.4、配置文件输出文件

配置文件:

logging.level.com.yanchi=trace
logging.pattern.console=%d{yyyy-MM-dd} [%level] -%m%n
# 6.4、配置文件输出文件(路径)
logging.file.path=D:/test

测试:

package com.yanchi;


import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringbootLogStudyApplicationTest4 {

    // 4、使用配置输出到文件
    @Test
    public void test4() {

        Logger logger = LoggerFactory.getLogger(SpringbootLogStudyApplicationTests.class);

        logger.trace("trace 信息");
        logger.debug("debug 信息");
        logger.info("info 信息");
        logger.warn("warn 信息");
        logger.error("error 信息");
    }

}

日志信息:

6.5、日志拆分

高级功能需要使用日志相应的配置文件

把之前配置的logback.xml引入进行配置使用

logback.xml:





    
    
    
    

    
    
        
        ${logDir}/logback.log

        
        
            
            ${pattern}
        
    

    
    
        
        ${logDir}/roll_logback.log

        
        
            
            ${pattern}
        

        
        

            
            ${logDir}/roll.%d{yyyy-MM-dd}.log%i.gz

            
            1kb

        
    

    
    

        
        
            System.out
        

        
        
            
            ${pattern}
        

    

    
    
        
        
                
    


测试:

package com.yanchi;


import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringbootLogStudyApplicationTest5 {

    // 5、使用logback.xml配置日志拆分
    @Test
    public void test5() {

        Logger logger = LoggerFactory.getLogger(SpringbootLogStudyApplicationTests.class);

        for (int i = 0; i < 1000; i++) {
            logger.trace("trace 信息");
            logger.debug("debug 信息");
            logger.info("info 信息");
            logger.warn("warn 信息");
            logger.error("error 信息");
        }
    }

}

日志信息:

6.6、集成log4j2

排出logback日志依赖:


    org.springframework.boot
    spring-boot-starter-web
    
        
        
            org.springframework.boot
            spring-boot-starter-logging
        
    




    org.springframework.boot
    spring-boot-starter-log4j2

导入log4j2配置文件:




    
    
        D://test
    

    
    
        
        
            
        

        
        
            
        

    
    
    
    
        
            
        
    

测试:

package com.yanchi;


import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringbootLogStudyApplicationTest6 {

    // 6、使用log4j2.xml配置进行日志打印
    @Test
    public void test6() {

        Logger logger = LoggerFactory.getLogger(SpringbootLogStudyApplicationTests.class);


        logger.trace("trace 信息");
        logger.debug("debug 信息");
        logger.info("info 信息");
        logger.warn("warn 信息");
        logger.error("error 信息");
        
    }

}

日志信息:

package com.yanchi;


import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringbootLogStudyApplicationTest6 {

    // 5、使用log4j2.xml配置进行日志打印
    @Test
    public void test5() {

        Logger logger = LoggerFactory.getLogger(SpringbootLogStudyApplicationTests.class);

        logger.trace("trace 信息");
        logger.debug("debug 信息");
        logger.info("info 信息");
        logger.warn("warn 信息");
        logger.error("error 信息");
        
    }

}

日志信息:

6.7、使用注解简化操作

导入依赖:


    org.projectlombok
    lombok
    true

测试:

package com.yanchi;


import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
@Slf4j
class SpringbootLogStudyApplicationTest7 {

    // 7、使用注解简化操作
    @Test
    public void test7() {

        log.trace("trace 信息");
        log.debug("debug 信息");
        log.info("info 信息");
        log.warn("warn 信息");
        log.error("error 信息");

    }

}

日志信息:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/322013.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号