Spring Boot引入日志框架log4f

一曲冷凌霜 提交于 2020-04-21 05:06:31

一 引入POM

<!--
在创建Spring Boot工程时,我们引入了spring-boot-starter,其中包含了spring-boot-starter-logging,
该依赖内容就是Spring Boot默认的日志框架Logback,所以我们在引入log4j之前,需要先排除该包的依赖,
再引入log4j的依赖
-->
<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.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.21</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.21</version>
</dependency>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>

二 resources目录下引入配置文件log4j.properties

# https://blog.csdn.net/reggergdsg/article/details/73618900 解读日志配置
###配置日志根Logger
#Log4j 根配置语法
#log4j.rootLogger = [ level ] , appenderName, appenderName, …
#把指定级别以上的日志信息输出到指定的一个或者多个位置
log4j.rootLogger=DEBUG,stdout,file


#ERROR 为严重错误 主要是程序的错误
#WARN 为一般警告,比如session丢失
#INFO 为一般要显示的信息,比如登录登出
#DEBUG 为程序的调试信息


# https://blog.csdn.net/hongweigg/article/details/14169477 解读additivity
log4j.additivity.org.apache=true


####################################输出到控制台的配置########################################
###配置日志信息输出目的地Appender
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#org.apache.log4j.ConsoleAppender(控制台)
#org.apache.log4j.FileAppender(文件)
#org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
#org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
#org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
#log4j.appender.error.Target=System.out
###输出INFO级别以上的日志
log4j.appender.stdout.threshold=INFO
###配置日志信息的格式(布局)
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#org.apache.log4j.HTMLLayout(以HTML表格形式布局)
#org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
#org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
#org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
###配置日志打印的格式格式化日志信息
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n


#%m   输出代码中指定的消息
#%p   输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
#%r   输出自应用启动到输出该log信息耗费的毫秒数
#%c   输出所属的类目,通常就是所在类的全名
#%t   输出产生该日志事件的线程名
#%n   输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
#%d   输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS}
#%l   输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数
##############################################################################################


####################################输出到文件的配置########################################
#log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.DatePattern='.'yyyy-MM-dd-HH-mm
# '.'yyyy-MM:每月滚动一次日志文件,即每月产生一个新的日志文件。当前月的日志文件名为logging.log4j,前一个月的日志文件名logging.log4j.yyyy-MM。
# '.'yyyy-ww:每周
# '.'yyyy-MM-dd:每天
# '.'yyyy-MM-dd-a:每天两次
# '.'yyyy-MM-dd-HH:每小时
# '.'yyyy-MM-dd-HH-mm:每分钟
# 后缀可以是KB, MB 或者GB。在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logging.log4j.1文件中。
#log4j.appender.file.MaxFileSize=1MB
###滚动文件的最大数
# 指定可以产生的滚动文件的最大数,例如,设为2则可以产生logging.log4j.1,logging.log4j.2两个滚动文件#和一个logging.log4j文件。
#log4j.appender.file.MaxBackupIndex=8
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-30c{1}) [TxId : %X{PtxId} , SpanId : %X{PspanId}] [ET:%X{ENV_TYPE},AN:%X{APP_NAME},SN:%X{SERVICE_NAME},CN:%X{CONTAINER_NAME},CI:%X{CONTAINER_IP}] %m%n
log4j.appender.file.Threshold=DEBUG
###将消息增加到指定文件中,false指将消息覆盖指定的文件内容
log4j.appender.file.append=true
###日志的保存位置
#log4j.appender.file.File=E:/logs/file-debug-log.log
log4j.appender.file.File=E:/logs/debug-debug.log
###每天产生一个日志文件
#log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.maxFileSize=100
#log4j.appender.file.maxBackupIndex=5
#log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-30c{1}) [TxId : %X{PtxId} , SpanId : %X{PspanId}] [ET:%X{ENV_TYPE},AN:%X{APP_NAME},SN:%X{SERVICE_NAME},CN:%X{CONTAINER_NAME},CI:%X{CONTAINER_IP}] %m%n
#log4j.appender.file.Threshold=DEBUG
#log4j.appender.file.append=true
#log4j.appender.file.File=E:/logs/debug-log.log

三 测试代码

/**
* @className: HelloController
* @description: Hello控制器
* @date: 2020/4/19
* @author: cakin
*/
package com.imooc.demo.controller;

import com.imooc.demo.common.Constant;
import com.imooc.demo.dto.UsDto;
import com.imooc.demo.service.UserService;
import org.apache.log4j.Logger;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;


import javax.annotation.Resource;


/**
* @className: HelloController
* @description: Hello控制器
* @date: 2020/4/19
* @author: cakin
*/
@RestController
public class HelloController {


    /**
     * 定义日志
     */
    private Logger logger = Logger.getLogger(HelloController.class);




    /**
     * 注入userService
     */
    @Resource
    private UserService userService;


    @RequestMapping("/")
    public String index() {
        UsDto usDto = userService.doLogin(null);
        System.out.println(Constant.NUM1);
        return "Greetings from Spring Boot!";
    }


    @RequestMapping("/hello")
    public String hello() {
        System.out.println(123);
        return "Greetings from Spring Boot!";
    }
    
    /**
     * 功能描述:日志测试
     * https://blog.csdn.net/m0_37063257/article/details/80400209
     *
     * @param
     * @return String
     * @author cakin
     * @date 2020/4/19
     * @description:
     */
    @RequestMapping("/logtest")
    public @ResponseBody
    String helloWorld() {
        for (int i = 0; i < Constant.NUM2; i++) {
            logger.debug("debug" + i);
            logger.info("info" + i);
            logger.warn("warn" + i);
            logger.error("error" + i);
            logger.fatal("fatal" + i);
        }
        return "Hello World!";
    }
}

四 测试效果

1 控制台输出

2020-04-19 21:04:25 INFO  DispatcherServlet:524 - Initializing Servlet 'dispatcherServlet'
2020-04-19 21:04:25 INFO  DispatcherServlet:546 - Completed initialization in 15 ms
2020-04-19 21:04:25 INFO  HelloController:68 - info0
2020-04-19 21:04:25 WARN  HelloController:69 - warn0
2020-04-19 21:04:25 ERROR HelloController:70 - error0
2020-04-19 21:04:25 FATAL HelloController:71 - fatal0
2020-04-19 21:04:25 INFO  HelloController:68 - info1
2020-04-19 21:04:25 WARN  HelloController:69 - warn1
2020-04-19 21:04:25 ERROR HelloController:70 - error1
2020-04-19 21:04:25 FATAL HelloController:71 - fatal1
......

2 文件输出

发布了4141 篇原创文章 · 获赞 677 · 访问量 349万+
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!