• SpringBoot使用日志


    1、选什么日志框架

    • 首先列举一下日志门面和实现
    • SpringBoot默认选用SLF4J和Logback
    • 日志级别:springboot默认已经帮我们配置好了日志,日志级别为trace<debug<info<warn<error默认的日志级别为inifo,日志输出只有在当前级别以及更高级别的才输出。

    2、SLF4J和Logback使用

    第一种注册Logger日志记录器:
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class UserController {
        //注册Logger,  推荐使用第一种不用每次更改类名
        public final Logger logger = LoggerFactory.getLogger(this.getClass()); 
        //public final Logger logger = LoggerFactory.getLogger(UserController.class);
    
        @GetMapping("/getUsers")
        public void findAllUser(){
            logger.debug("debug");
            logger.warn("warn");
            logger.info("info");
            logger.error("error");
        }
    }
    第二种@Slf4j注解:
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class UserController {
    
        @GetMapping("/getUsers")
        public void findAllUser(){
            log.warn("debug");
            log.warn("warn");
            log.warn("info");
            log.warn("error");
        }
    }
    
    • 使用SLF4J和Logback的properties配置:
    logging.level.com.atguigu=trace
    #logging.path=
    # 不指定路径在当前项目下生成springboot.log日志
    # 可以指定完整的路径;
    #logging.file=G:/springboot.log
    # 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件
    logging.file.path=/springboot.log
    # 在控制台输出的日志的格式
    logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50}:%msg%n
    # 指定文件中日志输出的格式
    logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n
    
    %d{HH: mm:ss.SSS}——日志输出时间
    %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
    %-5level——日志级别,并且使用5个字符靠左对齐
    %logger{36}——日志输出者的名字
    %msg——日志消息
    %n——平台的换行符
    

    3、SLF4J和log4j2使用

    • Log4j2是log4j 1.x和logback的改进版,所以这里我选SLF4J和Log4j2,Spring Boot 默认使用 logback,但相比较而言,log4j2 在性能上面会更好。log4j2在使用方面与 log4j 基本上没什么区别,比较大的区别是 log4j2 不再支持 properties 配置文件,支持 xml、json 格式的文件。

    • pom文件引入依赖

         <!-- 去掉spring boot项目默认引入的logging依赖 -->
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- log4j2依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
    
    • SLF4J和log4j2使用方法与SLF4J和Logback一样
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    @RestController
    public class UserController {
        public final Logger logger = LoggerFactory.getLogger(this.getClass());
    
        @GetMapping("/getUsers")
        public void findAllUser(){
            logger.debug("debug");
            logger.warn("warn");
            logger.info("info");
            logger.error("error");
        }
    }
    
    • SLF4J和log4j2的配置文件
    //文件名为:log4j2.xml,放在resources下
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出。   -->
    <!-- monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数。-->
    <Configuration status="error" monitorInterval="30">
        <appenders>
            <!--这个输出控制台的配置-->
            <Console name="Console" target="SYSTEM_OUT">
                <!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
                <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout pattern="[%d{HH:mm:ss.SSS}] [%-5level] %class{36} %L %M - %msg%xEx%n"/>
            </Console>
            <!-- 文件会打印出所有信息,这个log每次重启项目会自动清空,由append属性决定,这个也挺有用的,适合临时测试用 -->
            <!-- append为TRUE表示重启后消息增加到指定文件中,false表示重启后消息覆盖指定的文件内容,默认值是true -->
            <File name="log" fileName="E:/logs/temp.log" append="false">
                <PatternLayout pattern="[%d{HH:mm:ss.SSS}] [%-5level] %class{36} %L %M - %msg%xEx%n"/>
            </File>
            <!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
            <RollingFile name="RollingFile" fileName="E:/logs/app.log"
                         filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
                <PatternLayout pattern="[%d{yyyy-MM-dd 'at' HH:mm:ss z}] [%-5level] %class{36} %L %M - %msg%xEx%n"/>
                <SizeBasedTriggeringPolicy size="50M"/>
                <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
                <DefaultRolloverStrategy max="20"/>
            </RollingFile>
        </appenders>
        <loggers>
            <!-- 过滤掉spring和mybatis的一些信息,输出到配置的一个或多个AppenderRef中-->
            <logger name="org.springframework" level="INFO" additivity="false">
                <AppenderRef ref="log" />
            </logger>
            <!-- <logger name="org.mybatis" level="INFO" additivity="false">
                <AppenderRef ref="log" />
            </logger> -->
            <!-- 建立一个默认的root的level是全局级别的 -->
            <root level="trace">
                <appender-ref ref="Console"/>
                <appender-ref ref="log"/>
                <appender-ref ref="RollingFile"/>
            </root>
        </loggers>
    </Configuration>
    
    • 测试结果
  • 相关阅读:
    Hive Word count
    Hive drop table batched
    BendFord's law's Chi square test
    Hive UDF 实验1
    java charset detector
    java Annotation Demo
    Reducejoin sample
    java Memorymapfile demo
    java :hello world
    Java dynamical proxy demo
  • 原文地址:https://www.cnblogs.com/lin127/p/13049301.html
Copyright © 2020-2023  润新知