SpringBoot 2.1.15(17)---日志的使用
一.日志框架
SpringBoot默认使用的的日志框架是slf4j + Logback
日志框架的统一
由于各个框架都有各自配套的日志框架,无法做到统一
为了统一日志框架为slf4j,可以进行以下操作:
1.去掉系统中的其他日志框架
2.使用中间包替换
3.导入slf4j的实现
二.日志的使用
public class Hello {public static void main(String[] args) {Logger logger = LoggerFactory.getLogger(Hello.class);logger.debug("Hello World");}
}
日志的等级分为 ERROR WARN DEBUG INFO TRACE,级别从高到低
日志只会打印高于等于当前日志级别的日志
1.使用默认配置
SpringBoot默认配置好了日志框架
我们可以使用配置文件application.properties/application.yml来修改日志相关配置
# LOGGING
logging.config= # Location of the logging configuration file. For instance, `classpath:logback.xml` for Logback.logging.exception-conversion-word=%wEx # Conversion word used when logging exceptions.logging.file= # Log file name (for instance, `myapp.log`). Names can be an exact location or relative to the current directory.logging.file.max-history=0 # Maximum of archive log files to keep. Only supported with the default logback setup.logging.file.max-size=10MB # Maximum log file size. Only supported with the default logback setup.logging.level.*= # Log levels severity mapping. For instance, `logging.level.org.springframework=DEBUG`.logging.path= # Location of the log file. For instance, `/var/log`.logging.pattern.console= # Appender pattern for output to the console. Supported only with the default Logback setup.logging.pattern.dateformat=yyyy-MM-dd HH:mm:ss.SSS # Appender pattern for log date format. Supported only with the default Logback setup.logging.pattern.file= # Appender pattern for output to a file. Supported only with the default Logback setup.logging.pattern.level=%5p # Appender pattern for log level. Supported only with the default Logback setup.logging.register-shutdown-hook=false # Register a shutdown hook for the logging system when it is initialized.
日志输出格式:
%d:表示日期时间%thread:表示线程名%‐5level:级别从左显示5个字符宽度 %logger{50}:表示logger名字最长50个字符,否则按照句点分割。 %msg:日志消息%n:是换行符 %d{yyyy‐MM‐dd HH:mm:ss.SSS} [%thread] %‐5level %logger{50} ‐ %msg%n
例子:
设置application.properties的日志配置
# 设置日志等级
logging.level.com.fjut.*=trace# 设置在控制台输出的日志的格式
logging.pattern.console=[%d{yyyy‐MM‐dd}]-[%level]-[%msg]-%logger{50}%n# 指定文件中日志输出的格式
logging.pattern.file=%d{yyyy‐MM‐dd} === [%thread] === %level === %logger{50} ==== %msg%n# 设置输出日志文件
logging.file=/my.log
测试:
//打印五个等级的日志@Testpublic void contextLoads() {Logger logger = LoggerFactory.getLogger(getClass()); logger.error("error ...");logger.warn("warn ...");logger.debug("debug ...");logger.info("info ...");logger.trace("trace ...");}
2.使用指定配置
使用指定配置只需要在类路径下放入每个日志框架自己的配置文件即可
logback.xml与logback-spring.xml的区别
logback.xml会直接被日志框架识别使用
logback-spring.xml会先经过springboot解析处理,之后才会被日志框架使用,可以使用SpringBoot的高级Profile功能
Profile功能:
<springProfile name="staging"><!‐‐ configuration to be enabled when the "staging" profile is active ‐‐>可以指定某段配置只在某个环境下生效
</springProfile>
例子:
application.properties
# 指定环境为dev
spring.profiles.active=dev
logback-spring.xml(模板)
<?xml version="1.0" encoding="UTF-8"?>
<configurationxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="http://www.padual.com/java/logback.xsd"debug="false" scan="true" scanPeriod="30 second"><property name="PROJECT" value="iorder" /><property name="ROOT" value="logs/${PROJECT}/" /><property name="FILESIZE" value="50MB" /><property name="MAXHISTORY" value="100" /><timestamp key="DATETIME" datePattern="yyyy-MM-dd HH:mm:ss" /><!-- 控制台打印 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!--使用SpringBoot profile功能--><springProfile name="dev"><encoder charset="utf-8"><pattern>[%-5level] === %d{${DATETIME}} [%thread] %logger{36} - %m%n</pattern></encoder></springProfile></appender><!-- ERROR 输入到文件,按日期和文件大小 --><appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder charset="utf-8"><pattern>[%-5level] %d{${DATETIME}} [%thread] %logger{36} - %m%n</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${ROOT}%d/error.%i.log</fileNamePattern><maxHistory>${MAXHISTORY}</maxHistory><timeBasedFileNamingAndTriggeringPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>${FILESIZE}</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy></appender><!-- WARN 输入到文件,按日期和文件大小 --><appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder charset="utf-8"><pattern>[%-5level] %d{${DATETIME}} [%thread] %logger{36} - %m%n</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>WARN</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${ROOT}%d/warn.%i.log</fileNamePattern><maxHistory>${MAXHISTORY}</maxHistory><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>${FILESIZE}</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy></appender><!-- INFO 输入到文件,按日期和文件大小 --><appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder charset="utf-8"><pattern>[%-5level] %d{${DATETIME}} [%thread] %logger{36} - %m%n</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>INFO</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${ROOT}%d/info.%i.log</fileNamePattern><maxHistory>${MAXHISTORY}</maxHistory><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>${FILESIZE}</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy></appender><!-- DEBUG 输入到文件,按日期和文件大小 --><appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder charset="utf-8"><pattern>[%-5level] %d{${DATETIME}} [%thread] %logger{36} - %m%n</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>DEBUG</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${ROOT}%d/debug.%i.log</fileNamePattern><maxHistory>${MAXHISTORY}</maxHistory><timeBasedFileNamingAndTriggeringPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>${FILESIZE}</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy></appender><!-- TRACE 输入到文件,按日期和文件大小 --><appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder charset="utf-8"><pattern>[%-5level] %d{${DATETIME}} [%thread] %logger{36} - %m%n</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>TRACE</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${ROOT}%d/trace.%i.log</fileNamePattern><maxHistory>${MAXHISTORY}</maxHistory><timeBasedFileNamingAndTriggeringPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>${FILESIZE}</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy></appender><!-- SQL相关日志输出--><logger name="org.apache.ibatis" level="INFO" additivity="false" /><logger name="org.mybatis.spring" level="INFO" additivity="false" /><logger name="com.github.miemiedev.mybatis.paginator" level="INFO" additivity="false" /><!-- Logger 根目录 --><root level="DEBUG"><appender-ref ref="STDOUT" /><appender-ref ref="DEBUG" /><appender-ref ref="ERROR" /><appender-ref ref="WARN" /><appender-ref ref="INFO" /><appender-ref ref="TRACE" /></root>
</configuration>
三.切换日志框架
步骤:
1.排除当前日志框架
2.引入新的日志框架
例子:更换日志框架为log4j2,并使用log4j2配置文件进行日志打印
pom.xml
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!--排除默认日志框架--><exclusions><exclusion><artifactId>spring-boot-starter-logging</artifactId><groupId>org.springframework.boot</groupId></exclusion></exclusions></dependency><!--引入log4j2依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency>
定义log4j2.xml配置文件
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration status="WARN" monitorInterval="30"><!--先定义所有的appender--><appenders><!--这个输出控制台的配置--><console name="Console" target="SYSTEM_OUT"><!--输出日志的格式--><PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/></console><!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用--><File name="log" fileName="log/test.log" append="false"><PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/></File><!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--><RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log"filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="100 MB"/></Policies></RollingFile><RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/warn.log"filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log"><ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="100 MB"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 --><DefaultRolloverStrategy max="20"/></RollingFile><RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/error.log"filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log"><ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="100 MB"/></Policies></RollingFile></appenders><!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--><loggers><!--过滤掉spring和mybatis的一些无用的DEBUG信息--><logger name="org.springframework" level="INFO"></logger><logger name="org.mybatis" level="INFO"></logger><root level="all"><appender-ref ref="Console"/><appender-ref ref="RollingFileInfo"/><appender-ref ref="RollingFileWarn"/><appender-ref ref="RollingFileError"/></root></loggers>
</configuration>
SpringBoot 2.1.15(17)---日志的使用相关推荐
- 【Springboot 入门培训】# 17 WebJars + BootStrap5 常用JS组件应用
在传统的前后一体项目开发中,大部分人会使用到BootStrap加其它JS组件的配合方式来完成页面UI功能的实现.下面介绍几种常用的JS库的使用方法.代码例子下载 目录 1 树形组件 1.1 TreeJ ...
- Python Cookbook(第3版)中文版:15.17 传递文件名给C扩展
15.17 传递文件名给C扩展¶ 问题¶ 你需要向C库函数传递文件名,但是需要确保文件名根据系统期望的文件名编码方式编码过. 解决方案¶ 写一个接受一个文件名为参数的扩展函数,如下这样: static ...
- 15.17 对缺乏潜在类型机制的补偿
15.17.1 反射 可以使用反射来解决潜在的类型机制. class Mime{ public void walkAgainstTheWind()} public void sit(){print(& ...
- springboot 指定 logback_spring boot与日志
日志想必各位都不陌生了,虽然我们平时的学习当中只看看这个控制台的日志,但是其他方式也要去掌握哦.这次就来讲讲这个日志与spring boot摩擦的火花.一些简单的使用. 基本介绍我们首先来看看这个市面 ...
- 记录druid整合springboot+logback配置打印sql日志
[记录druid整合springboot+logback配置打印sql日志] 整合记录 整合记录 首先看 druid 的LogFilter 为我们准备的四种logger类型 这些logger分别对应打 ...
- 【SpringBoot】72、SpringBoot中接入轻量级分布式日志框架Graylog
1.Graylog简介 Graylog 是一个开源的日志聚合.分析.审计.展现和预警工具.在功能上来说,和 ELK 类似,但又比 ELK 要简单很多.依靠着更加简洁,高效,部署使用简单的优势很快受到许 ...
- SpringBoot如何配置log4j输出日志呢?
转自: SpringBoot如何配置log4j输出日志呢? 下文笔者讲述SpringBoot配置log4j的方法分享,如下所示 SpringBoot日志输出 springboot框架中默认使用logb ...
- springboot 设置指定包的日志级别
springboot 设置指定包的日志级别 ******************* 配置文件 application.yml logging:level:com.example.demo.dao : ...
- 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。 例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19
题目描述: 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和. 例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19 输入描述: 输入一个int ...
最新文章
- NET 5是.NET的未来:每个.Net开发人员必须知道什么
- android 自定义控件TextInputSelectBox用法
- 导致溢出_由整数类型溢出导致的英雄联盟峡谷惨案
- 【MFC】MFC对话框类
- 在UltraEdit的查找和替换中使用正则表达式 (转)
- 暑期实习面试——艾锝科技,Python实习生
- css3是什么 ptml_CSS3 @keyframes 规则
- Java中Integer与String类型互转
- 协议 - 收藏集 - 掘金
- 【Hive】日期函数
- 深度学习(十八)基于R-CNN的物体检测-CVPR 2014
- build lavas 失败_基础教程 - 快速开始 PWA 工程 - 《Lavas 指导教程文档》 - 书栈网 · BookStack...
- 关于计算机的英语介绍,计算机专业的英语自我介绍
- 连续多帧图像光流对齐和光流运动检测
- mscorsvw.exe进程占用CPU资源高居不下
- macbookair有没有touchbar_Touch Bar 真的好用吗?苹果全新 MacBook Pro 触控条上手体验...
- eq, neq.gt,ge,lte,lt,not,mod的含义
- 相声评书戏曲大全(安卓)
- 测试治具、夹具、托盘
- 用vue实现动态组织结构图