SpringBoot入门 (三) 日志配置

摘要:
上一篇博客文章记录了在spring-boot项目中读取的属性文件中配置的属性。本文将学习如何登录springboot项目。SpringBoot在内部使用CommonsLogging进行日志记录,但它也为其他日志记录框架提供默认配置,如JavautilLogging、Log4j2和Logback。在每种情况下,日志记录器都预先配置为使用控制台输出和可选文件输出。如果我们的SpringBoot项目使用Starters启动器,则默认情况下使用LogBack进行日志记录。

上一篇博文记录了再springboot项目中读取属性文件中配置的属性,本文学习在springboot项目中记录日志。

  日志记录在项目中是很常见的一个功能了,对排查问题有很大帮助,也可以做分类分析及统计。SpringBoot内部使用的是Commons Logging做日志的记录,但是对其他的日志框架也提供了默认的配置,如:Java util Logging,Log4j2,Logback,每一种情况下日志记录器都预先配置为使用控制台输出和可选的文件输出。

日志格式及内容

  如果我们的SpringBoot项目使用的是Starters启动器,默认使用LogBack做日志记录。如我们启动项目时在控制台上看到的

SpringBoot入门 (三) 日志配置第1张

输出的信息有以下几点
日期和时间:精确到毫秒,如 2019-01-24 14:03:14.260

日志级别:日志级别有ERROR,WARN,INFO,DEBUG,TRACE,如上边的INFO

进程号:如上边的 10348

分割线:如上边的 ---

线程名:如上边用[]括起来的

日志名:一般使用的是代码的类名

日志信息:我们在代码中要输出的内容

日志输出

  Spring Boot中默认配置了ERRORWARNINFO级别的日志输出到控制台,我们也是可以修改的日志级别的,比如我们修改为debug级别,有两种方式

1 使用命令 $ java -jar myapp.jar --debug 

2 在application.properties中添加配置debug=true 开启debug,此配置只会对核心Logger(如内嵌的tomcat容器、hibernate、spring)有效,但是我们自己应用的日志并不会输出为DEBUG级别,需要自己配置,如 logger.level.root=debug

日志级别

  可以通过logger.level.*=LEVEL来改变对应日志级别,如

logging.level.root=warn
logging.level.org.springframework.web=info
logging.level.org.hibernate=error

######修改mubatis日志级别
logging.level.org.mybatis=info
#mapper接口为debug级别
logging.level.mybatis mapper接口所在包=debug

输出文件

  SpringBoot默认只在控制台输出日志信息,如果想把日志信息写入文件中记录,需要在application.properties中配置,如

##文件存放路径
logging.path=/usr/local/log
##写入的文件
logging.file=myapp.log
##日志文件大小,超过大小时会在新的文件中记录
logging.file.max-size=10Mb
##日志保存时间 天
logging.file.max-history=15

集成log4j

  SpringBoot在高版本中已经不支持log4j了,支持的是log4j2。在pom.xml中引入需要的log4j2的jar包

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

由于web依赖包中已经有了log的依赖,所以我们选去掉web中的log依赖,避免jar包冲突。

  然后配置log4j2的属性,在官方文档中可以看到集成的日志文件的命名如下

SpringBoot入门 (三) 日志配置第2张

  在resources目录下创建一个log4j2-spring.xml文件

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <properties>
        <!-- 文件输出格式 -->
        <property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss,SSS} |-%-5level [%thread] %c [%L] -| %msg%n</property>
    </properties>
    <appenders>
        <!--添加一个控制台追加器-->
        <Console name="Console" target="system_out">
            <PatternLayout pattern="${PATTERN}" />
        </Console>
        <!--添加一个文本追加器,文件位于E:\logs目录下,名为HelloWorld.log-->
        <File name="File" fileName="E:\logs\HelloWorld.log">
            <PatternLayout>
                <pattern>${PATTERN}</pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies>
        </File>
    </appenders>
    <loggers>
        <root level="info">
            <appenderref ref="File" />
       <!--为了直观,在控制天中也输出info级别的日志--> <appenderref ref="Console" /> </root> <!--把org.springframework包下的所有日志输出到log文件,additivity="false"表示不输出到控制台--> <Logger name="org.springframework" level="debug" additivity="true"> <appenderRef ref="File" /> </Logger> </loggers> </configuration>

  正式项目中,我们需要对上述xml文件中的配置信息做些修改。写一个控制器访问,看看输出的信息

@RestController
public class HelloController {

    private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
    
    @RequestMapping("/hello")
    public String hello(){
        logger.info("使用log4j输出日志!");
        return "helloworld";
    }

}

控制台和生成的log文件中输出的信息一致

SpringBoot入门 (三) 日志配置第3张

 SpringBoot入门 (三) 日志配置第4张

免责声明:文章转载自《SpringBoot入门 (三) 日志配置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇DB2字符函数简介及使用GERBER文件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

3.开始使用Spring Cloud实战微服务

                 开始使用Spring Cloud实战微服务 3.1. Spring Cloud实战前提               3.1.1. 需要的技术储备                   语言方面:可以使用Java、scala、Groovy...等等,推荐使用Java                   构建工具方面:Java...

SpringBoot 2 要不要升级

目录 前言 一、SpringBoot 简史 二、SpringBoot 2 的变化 1.配置的变更 2.JDK 版本升级 3.第三方类库升级 4.响应式编程支持 5.Data 支持 6.Web加强 7.HTTP/2 支持 8.其他增强 三、要不要升级 前言 在谈SpringBoot 2.x 之前,先来聊点别的: 首先是Java 语言,这门长期...

服务对外提供接口以供不同站点之间使用:Spring Cloud Feign使用记录及携带token请求

  在开发 Spring Cloud 微服务的时候,我们知道,服务之间都是以 HTTP 接口的形式对外提供服务的,因此消费者在进行调用的时候,底层就是通过 HTTP Client 的这种方式进行访问。当然我们可以使用JDK原生的 URLConnection、Apache 的 HTTP Client、Netty 异步 Http Client,Spring 的...

JBOSS未授权访问漏洞复现

目录 1.JBOSS是什么 2.JBOSS未授权访问是什么 3.漏洞环境搭建 4.漏洞复现 进入控制台 进入应用部署页面 上马 5.jexboss工具安装方法: 6.war的制作 1.JBOSS是什么 JBOSS是一个基于J2EE的开放源代码的应用服务器。 JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理...

spring 定时任务

1.定时任务实现方式有很多,java自带的定时器可以,但是不好用,基本不用。如果需求较为简单,可以考虑 Spring Task。如果更为负责,则可以考虑重量级的框架quartz。今天重点介绍quartz,quartz和 Spring 的集成方式有多种,有RAM 和 JDBC 方式。RAM方式可以理解为静态的方式,任务和触发方式均可配置式,JDBC方式可实现...

控制台连接oracle11g报ORA-12560异常

oracle11g R2 64bit oracleClient 11.2 32bit PL/SQL Developer11.0.2 32bit 今天发现了一个奇怪的现象,如图: 后来发现机器上既有server的sqlplus,又有client的sqlplus,而client的环境变量在server的前面,优先使用了client的sqlplus。 而cli...