SpringBoot 日志 Log4j比System.out.println的优势

本文详细对比了Log4j与System.out.println在日志记录方面的优势,阐述了Log4j在日志文件管理、格式定制及日志级别控制上的灵活性,特别是在SpringBoot项目中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Log4j比System.out.println的优势

  • log4j可以自己定义日志文件的,命名规则,备份规则,存放路径,system.out默认输出到控制台
  • log4j 可以自己定义日志的格式,使得日志可读性更加好
  • log4j 可以灵活使用日志的级别,通过设置日志级别,可以在不同的运行环境使用不同的日志级别,从而达到只输出我们需要的日志到文件的目的。 (日志级别从小到大:debug,info,warn,error)

SpringBoot 日志, 默认日志级别是info, 默认日志采用sl4j

package com.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description: java类作用描述
 * @Author: Bsea
 * @CreateDate: 2019/6/7$ 20:15$
 */
@RestController
public class TestController {
    private Logger log = LoggerFactory.getLogger(this.getClass());
    @RequestMapping("/show1")
    public String t1(){
        log.debug("这个是debug-测试 基本的日志信息");
        log.info("这个是info-普通信息  基本的日志信息");
        log.warn("这个是warn-警告  基本的日志信息");
        log.error("这个是error--错误   基本的日志信息");
        return "tt";
    }
}

测试结果:
2019-06-07 20:19:11.599 INFO 5748 — [nio-8080-exec-1] com.controller.TestController : 这个是info-普通信息 基本的日志信息
2019-06-07 20:19:11.599 WARN 5748 — [nio-8080-exec-1] com.controller.TestController : 这个是warn-警告 基本的日志信息
2019-06-07 20:19:11.599 ERROR 5748 — [nio-8080-exec-1] com.controller.TestController : 这个是error–错误 基本的日志信息

修改日志级别

// com表示包的名字
logging.level.com=debug

在这里插入图片描述

使用lombok 插件的@Slf4j

package com.controller;

import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description: java类作用描述
 * @Author: Bsea
 * @CreateDate: 2019/6/7$ 20:15$
 */
@RestController
@Slf4j
public class TestController2 {
    @RequestMapping("/show2")
    public String t2(){
        log.debug("这个是debug-测试 基本的日志信息");
        log.info("这个是info-普通信息  基本的日志信息");
        log.warn("这个是warn-警告  基本的日志信息");
        log.error("这个是error--错误   基本的日志信息");
        return "tt";
    }
}

运行结果:

30 DEBUG 6032 — [nio-8080-exec-1] com.controller.TestController2 : 这个是debug-测试 基本的日志信息
2019-06-07 20:38:03.331 INFO 6032 — [nio-8080-exec-1] com.controller.TestController2 : 这个是info-普通信息 基本的日志信息
2019-06-07 20:38:03.331 WARN 6032 — [nio-8080-exec-1] com.controller.TestController2 : 这个是warn-警告 基本的日志信息
2019-06-07 20:38:03.331 ERROR 6032 — [nio-8080-exec-1] com.controller.TestController2 : 这个是error–错误 基本的日志信息

public static void main(String[] args) { ConfigurableApplicationContext context= SpringApplication.run(JeecgDomianuniqCloudApplication.class, args); // 打印数据库连接信息 printDatabaseInfo(context); } private static void printDatabaseInfo(ConfigurableApplicationContext context) { DataSource dataSource = context.getBean(DataSource.class); // 处理动态数据源 if (dataSource instanceof DynamicRoutingDataSource) { DynamicRoutingDataSource dynamicDataSource = (DynamicRoutingDataSource) dataSource; Map<String, DataSource> dataSources = dynamicDataSource.getCurrentDataSources(); System.out.println("🚀 应用启动成功 | 动态数据源信息"); System.out.println("🔧 当前默认数据源: " + dynamicDataSource.determineDataSource()); System.out.println("📦 已配置数据源数量: " + dataSources.size()); System.out.println("=================================================="); // 遍历并打印所有数据源信息 dataSources.forEach((name, ds) -> { System.out.println("🔹 数据源名称: " + name); printDataSourceDetails(ds); System.out.println("--------------------------------------------------"); }); } // 处理 Druid 数据源 else if (dataSource instanceof DruidDataSource) { System.out.println("🚀 应用启动成功 | 数据库连接信息"); printDataSourceDetails(dataSource); } // 其他类型数据源 else { System.out.println("⚠️ 未知数据源类型: " + dataSource.getClass().getName()); printDataSourceDetails(dataSource); } } // 通用数据源信息打印方法 private static void printDataSourceDetails(DataSource ds) { try { if (ds instanceof DruidDataSource) { DruidDataSource druid = (DruidDataSource) ds; System.out.println(" 🔧 驱动类: " + druid.getDriverClassName()); System.out.println(" 🌐 连接URL: " + druid.getUrl()); System.out.println(" 👤 用户名: " + druid.getUsername()); System.out.println(" 🔑 密码: " + druid.getPassword()); System.out.println(" 📊 连接池类型: DruidDataSource"); System.out.println(" 🔄 初始连接数: " + druid.getInitialSize()); System.out.println(" ⚡ 最大连接数: " + druid.getMaxActive()); System.out.println(" ⏱️ 连接超时(ms): " + druid.getMaxWait()); } else if (ds instanceof ItemDataSource) { ItemDataSource itemDs = (ItemDataSource) ds; System.out.println(" 📊 连接池类型: DynamicDataSource"); System.out.println(" 🔧 真实数据源类型: " + itemDs.getRealDataSource().getClass().getName()); // 尝试获取底层连接信息 try (Connection conn = ds.getConnection()) { DatabaseMetaData meta = conn.getMetaData(); System.out.println(" 🌐 连接URL: " + meta.getURL()); System.out.println(" 👤 用户名: " + meta.getUserName()); } } else { // 通用JDBC信息获取 try (Connection conn = ds.getConnection()) { DatabaseMetaData meta = conn.getMetaData(); System.out.println(" 🔧 驱动类: " + meta.getDriverName()); System.out.println(" 🌐 连接URL: " + meta.getURL()); System.out.println(" 👤 用户名: " + meta.getUserName()); System.out.println(" 📊 数据库产品: " + meta.getDatabaseProductName()); } } } catch (SQLException e) { System.err.println(" ❌ 获取数据源信息失败: " + e.getMessage()); } } 把打印去掉改成log.info
最新发布
08-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值