SpringBoot中日志配置

1.打印日志的目的

在日常开发中,会遇到不同的异常,日志方便我们去排查处理。

2.SpringBoot的日志

在SpringBoot的web启动依赖中包含有关于logging中的三个框架。分别为slf4jlogbacklog4j

3.slf4j、logback、log4j三者有何关系

3.1 slf4j (Simple logging Facade for Java)

意为简单日志门面,它只是一个接口,不实现日志的具体功能,为日志系统提供一套标准的调用api。日志的格式,记录级别,输出方式等功能都要通过具体的日志系统来完成,日志系统有log4j、logback、java.util.logger等。

3.2 为什么使用slf4j
  • slf4j只是一个提供统一接口的api,实现调用和具体实现的分离,如:之前使用的lombok,因需求需更换为log4j,只需更换jar包即可
  • slf4j日志输出时可以使用{}占位符,如,logger.info(“testlog: {}”, “test”),而如果只使用log4j做日志输出时,只能以logger.info(“testlog:”+“test”)这种形式,前者要比后者在性能上更好,后者采用+连接字符串时就是new 一个String 字符串,在性能上就不如前者。

3.2 log4j(log for java)

Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

3.3 logback

logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架,是slf4j的原生实现(即直接实现了slf4j的接口,而log4j并没有直接实现,所以就需要一个适配器slf4j-log4j12.jar),logback一共有以下几个模块:

  • logback-core:其它两个模块的基础模块
  • logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging
  • logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能

总结

slf4j提供其接口,log4j、logback等日志系统具体实现,

4.Spring的日志搭配

SpringBoot2.x以后,默认采用slf4j+logback实现日志功能;具体实现如:

@RestController
public class LogController {

    @Autowired
    private UserServiceImpl userService;
    @Autowired
    private UserContfiguration userContfiguration;
	
    private static Logger logger = LoggerFactory.getLogger(LogController.class);
    @GetMapping("/log")
    public String logTest(){
        logger.trace("====trace====");
        logger.debug("====debug====");
        logger.info("====info====");
        logger.warn("====warn====");
        logger.error("====error====");
        return "log";
    }
}

5.日志级别

tarce > debug > info > warn > error
注:SpringBoot默认级别为:info

logger.trace("====trace====");
logger.debug("====debug====");
logger.info("====info====");
logger.warn("====warn====");
logger.error("====error====");

6.日志配置

6.1 配置日志级别

全局配置

# 指定日志级别,将springboot日志级别改为debug
logging:
  level:
    root: debug

局部配置

# 指定日志级别,将springboot日志级别改为debug
logging:
  level:
    com
	  liyi: debug

6.2 日志文件和格式配置

日志输出文件:默认为关闭
在开发中建议大家是打开,不打开也没有关闭,你可以项目发布制定日志输出的文件:
nohup java -jar xxxx.jar >>log.txt &
使用path的方式

logging:
  level:
    root: debug
  file:
    # 如果不想把日志存放在logging.file.path目录下,可以采用name来重新定义存储的位置和日志文件的名称
    name: /www/logs/pro.log
  pattern:
    # file 是指日志文件中日志的格式
    file: "【liyi-file】%d{yyyy/MM/dd-HH:mm:ss} -- [%thread] %-5level %logger{50} -- %M - %msg%n"
	# console是控制台的日志的格式
    # console: "【liyi-console】%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger{50} --%M- %msg%n"

日志格式:

%c 输出logger名称
%C 输出类名
%d{HH:mm:ss.SSS} 表示输出到毫秒的时间
%t 输出当前线程名称
%-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
%logger 输出logger名称,因为Root Logger没有名称,所以没有输出
%msg 日志文本
%n 换行
其他常用的占位符有:
%F 输出所在的类文件名,如Log4j2Test.java
%L 输出行号
%M或%method 输出所在方法名
%l 输出完整的错误位置, 包括类名、方法名、文件名、行数
%p 该条日志的优先级
%replace{pattern}{regex}{substitution} 将pattern的输出结果pattern按照正则表达式regex替换成substitution

7.lombok优化日志

在lombok中提供两个日志注解:Slf4jLog4j2,建议开发使用Log4j
前提:安装lombok插件和导入依赖

<dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
     <version>1.18.20</version>
</dependency>

具体实现:

@Slf4j
@Service
public class UserServiceImpl {

    @Value("${user.name}")
    private String name;
    @Value("${user.age}")
    private Integer age;
    @Value("${user.addr}")
    private String addr;

    public UserInfo getUserInfo() {
        return new UserInfo(name, age, addr);
    }

    public void testLog(UserInfo userInfo) {
        try {
            System.out.println(1/0);
            log.info("当前支付的用户是:{},地址:{},年龄是:{}", userInfo.getName(), userInfo.getAddr(), userInfo.getAge());
        } catch (Exception ex) {
            log.error("获取用户信息异常,异常是:{}",ex.getMessage());
        }

    }
}

8.在开发中日志级别隔离

开发环境建议:debug或info
生产环境建议:error

application-dev.yml

开发环境:一般就在控制台打印即可,写文件着实没有任何意义。 日志级别是:debug

server:
  port: 9999

#  指定日志级别 把springboot的所有日志修改成为debug
logging:
  level:
    root: debug
  pattern:
    # console是控制台的日志的格式
    console: "【liyi-console】%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger{50} --%M- %msg%n"
application-prod.yml

开发环境:一般就在控制台打印即可,写文件着实没有任何意义。 日志级别是:error

server:
  port: 80

#  指定日志级别 把springboot的所有日志修改成为debug
logging:
  level:
    root: error
  file:
    # 如果不想把日志存放在logging.file.path目录下,可以采用name来重新定义存储的位置和日志文件的名称
    name: /www/logs/kuangstudypro.log
  pattern:
    # file 是指日志文件中日志的格式
    file: "【KuangStudy-file】%d{yyyy/MM/dd-HH:mm:ss} -- [%thread] %-5level %logger{50} -- %M - %msg%n"
application.yml
# 环境激活
spring:
  profiles:
    active: dev

##该博客的中心思想是养成总结写博客的习惯…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值