一.springboot的日志级别

日志级别从低到高有:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL

高级别包含了低级别,级别越高打印信息越先详细,默认情况下,spring boot从控制台打印出来的日志级别为INFO级别,设置如下

logging:level:root: warn # 设置日志级别为警告

此时的日志只能输出到控制台,输出不到文件中

二.Logback日志的详细使用

如果我们想将日志输出到文件中,可以使用Logback日志,spring boot内部使用Logback作为日志实现的框架。

使用步骤:

(1)删除yaml中其它日志的配置以及我们设置的日志级别

(2)resources下创建logback-spring.xml文件,在xml中可以配置日志级别、日志输出位置等信息

<?xml version="1.0" encoding="UTF-8"?>
<configuration  scan="true" scanPeriod="10 seconds"><!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 --><!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true --><!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 --><!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 --><contextName>logback</contextName><!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 --><property name="log.path" value="D:/guli_log/edu" /><!-- 彩色日志 --><!-- 配置格式变量:CONSOLE_LOG_PATTERN 彩色日志格式 --><!-- magenta:洋红 --><!-- boldMagenta:粗红--><!-- cyan:青色 --><!-- white:白色 --><!-- magenta:洋红 --><property name="CONSOLE_LOG_PATTERN"value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)"/><!--输出到控制台--><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--><!-- 例如:如果此处配置了INFO级别,则后面其他位置即使配置了DEBUG级别的日志,也不会被输出 --><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level></filter><encoder><Pattern>${CONSOLE_LOG_PATTERN}</Pattern><!-- 设置字符集 --><charset>UTF-8</charset></encoder></appender><!--输出到文件--><!-- 时间滚动输出 level为 INFO 日志 --><appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在记录的日志文件的路径及文件名 --><file>${log.path}/log_info.log</file><!--日志文件输出格式--><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern><charset>UTF-8</charset></encoder><!-- 日志记录器的滚动策略,按日期,按大小记录 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 每天日志归档路径以及格式 --><fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>100MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy><!--日志文件保留天数--><maxHistory>15</maxHistory></rollingPolicy><!-- 此日志文件只记录info级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>INFO</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 时间滚动输出 level为 WARN 日志 --><appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在记录的日志文件的路径及文件名 --><file>${log.path}/log_warn.log</file><!--日志文件输出格式--><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern><charset>UTF-8</charset> <!-- 此处设置字符集 --></encoder><!-- 日志记录器的滚动策略,按日期,按大小记录 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>100MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy><!--日志文件保留天数--><maxHistory>15</maxHistory></rollingPolicy><!-- 此日志文件只记录warn级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>warn</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 时间滚动输出 level为 ERROR 日志 --><appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在记录的日志文件的路径及文件名 --><file>${log.path}/log_error.log</file><!--日志文件输出格式--><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern><charset>UTF-8</charset> <!-- 此处设置字符集 --></encoder><!-- 日志记录器的滚动策略,按日期,按大小记录 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>100MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy><!--日志文件保留天数--><maxHistory>15</maxHistory></rollingPolicy><!-- 此日志文件只记录ERROR级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!--<logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。<logger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。name:用来指定受此logger约束的某一个包或者具体的某一个类。level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,如果未设置此属性,那么当前logger将会继承上级的级别。--><!--使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:第一种把<root level="INFO">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息第二种就是单独给mapper下目录配置DEBUG模式,代码如下,这样配置sql语句会打印,其他还是正常DEBUG级别:--><!--开发环境:打印控制台--><springProfile name="dev"><!--可以输出项目中的debug日志,包括mybatis的sql日志--><logger name="com.guli" level="INFO" /><!--root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,默认是DEBUG可以包含零个或多个appender元素。--><root level="INFO"><appender-ref ref="CONSOLE" /><appender-ref ref="INFO_FILE" /><appender-ref ref="WARN_FILE" /><appender-ref ref="ERROR_FILE" /></root></springProfile><!--生产环境:输出到文件--><springProfile name="pro"><root level="INFO"><appender-ref ref="CONSOLE" /><appender-ref ref="DEBUG_FILE" /><appender-ref ref="INFO_FILE" /><appender-ref ref="ERROR_FILE" /><appender-ref ref="WARN_FILE" /></root></springProfile></configuration>

启动类后,指定的输入日志路径会出现三个log文件,springboot的运行日志会出现在log_info.log文件中,但错误日志信息默认不会输入到文件中

(3)若想将错误日志输出到文件中,则需要

给全局异常类加上@slf4j注解,然后在全局异常处理方法中编写

log.要输出到的日志(e.getMessage);

@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {//自定义异常@ResponseBody@ExceptionHandler(GuLiException.class)public R error(GuLiException e){e.printStackTrace();log.info(e.getMsg());return R.error().code(e.getCode()).message(e.getMsg());}
}

此时只出现一行错误信息,并不详细

(4)若想输出更详细的错误日志到文件中,则要利用工具类

public class ExceptionUtil {public static String getMessage(Exception e) {StringWriter sw = null;PrintWriter pw = null;try {sw = new StringWriter();pw = new PrintWriter(sw);// 将出错的栈信息输出到printWriter中e.printStackTrace(pw);pw.flush();sw.flush();} finally {if (sw != null) {try {sw.close();} catch (IOException e1) {e1.printStackTrace();}}if (pw != null) {pw.close();}}return sw.toString();}
}

调用工具类getMessage方法

log.error(ExceptionUtil.getMessage(e));

全局异常处理类中创建一个toString()方法

@Override
public String toString() {return "GuliException{" +"message=" + this.getMessage() +", code=" + code +'}';
}

springboot中怎么进行统一日志处理?相关推荐

  1. 【SpringBoot】72、SpringBoot中接入轻量级分布式日志框架Graylog

    1.Graylog简介 Graylog 是一个开源的日志聚合.分析.审计.展现和预警工具.在功能上来说,和 ELK 类似,但又比 ELK 要简单很多.依靠着更加简洁,高效,部署使用简单的优势很快受到许 ...

  2. SpringBoot中使用log4j进行日志管理

    场景 SpringBoot项目中使用log4j进行日志管理. 实现 1.因为SpringBoot默认是使用logback,所以要修改pom.xml 过滤掉自带的spring-boot-starter- ...

  3. SpringBoot中使用mybatis/ibatis日志打印sql

    SpringBoot中使用mybatis/ibatis时日志打印sql 控制台打印mybatis/ibatis对应的sql 主机的日志文件中打印mybatis/ibatis对应的sql 控制台打印my ...

  4. SpringBoot中Mybatis打印sql日志

    application.yml中加上 # springBoot+Mybatis 控制台打印SQL语句 (方式一) logging:level:com.zoctan.api.mapper : debug ...

  5. springboot 打印乱码_Springboot中使用logback输出日志中文乱码

    在Springboot中使用logback输出日志时,中文变成了?乱码,第一反应是编码问题. 解决方法: 设置charset, 在encoder 中增加一行 UTF-8,重新启动系统,日志中中文显示正 ...

  6. SpringBoot中的SFL4J日志

    SpringBoot:底层是Spring框架,Spring框架默认使用的是JCL日志的抽象层 SpringBoot选用SLF4J和logback 如何系统地在系统中使用SLF4J 在开发的使用,日志记 ...

  7. 十、springboot注解式AOP(@Aspect)统一日志管理

    springboot注解式AOP(@Aspect)统一日志管理 简介 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功 ...

  8. Java开发面试题及答案,SpringBoot统一日志处理原理

    <artifactId>slf4j-api</artifactId> <version>1.7.28</version> ``` 按照slf4j官方的说 ...

  9. 【SpringBoot】统一日志处理

    通常情况下,日志框架是由一个抽象层 + 实现层搭建的.SpringBoot日志系统是由SLF4J + logback组成的. 抽象层有:SLF4J.jboss-logging.JCL等:  实现层有: ...

最新文章

  1. 2021年3月程序员工资统计数据出炉,又拖后腿了……
  2. 如何理解java中String的不可变性
  3. 产品要不要做先回答的10个问题
  4. 【Android开发坑系列】之事件
  5. C#自定义ConfigSections节点操作
  6. X-lab 开放实验室开源创新的故事
  7. 洛谷P1801 黑匣子 双堆套路的使用
  8. 是引进外部函数吗_使用PowerBI的这两个函数,灵活计算各种占比
  9. 获得Open Images冠军,商汤TSD目标检测算法入选CVPR 2020 ​
  10. js 动态生成html(js根据后台返回数据生成html页面中的table标签)(转义字符)
  11. 小米路由通过SSH添加静态路由表之后无法跳转的问题
  12. OSG-基本几何图形
  13. MS UC 2013-2-Deploy Microsoft Exchange Server 2013-1-Prerequisites
  14. 【数据分享】糖尿病患者研究数据集
  15. [UE4][C++]简单超人小游戏(游戏接受键盘事件)
  16. 转载:KOF97简易出招原理解析
  17. 读书笔记:《黎明之街》
  18. 多线程的三种设计模式的介绍
  19. java 模板函数_重温Java中的模板方法设计模式
  20. 【云和恩墨业务介绍】之超融合存储解决方案 - zData Light Storage

热门文章

  1. 笔记本 原因代码: 0x500ff 关机类型: 关闭电源_关于笔记本电池更换的建议
  2. 利用Python进行数据分析 学习笔记
  3. 淘宝天猫店招空白间隔去除
  4. 软件性能测试报告收费,软件性能测试报告模板
  5. 微信公众号里打开链接下载APP
  6. ipv6的127位掩码如何表示_计算机子网掩码知识举例详解
  7. 简单的VUE购物车应用
  8. 戴尔笔记本,快捷键无法调节屏幕亮度,有图标显示,就是没有调节效果
  9. 【DockerCE】Docker-CE 20.10.22正式版发布
  10. GTD软件比较和选用