SpringBoot中的日志使用(一)

一:日志简介:

  • 常用的日志接口 commons-logging/slf4j
  • 日志框架:log4j/logback/log4j2
  • 日志接口屏蔽了日志框架的底层实现,使用时只需引入相关的jar包,当更换日志的实现框架时,只需要修改pom文件或者日志配置文件,无需对代码层进行修改;

二:springboot使用logback的配置文件

  • application.properties配置:
  • logging.path=/User/jackie/workspace/rome/   日志的保存路径
    logging.file=springbootLog.log   保存文件,注意file和path同时存在时,file生效,保存在根目录下,可以在file中设置路径如/logs/log/test.log
    logging.level.root =warn 日志的保存级别,级别高于warn的被保存
    logging.level.com.wht.logging.logger01=warn 可以设置某个具体包或者类的日志的保存级别;
    logging.pattern.file=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger :: %msg%n 日志的保存格式  
  • logging.prattern.file解析:
    %d{HH:mm:ss.SSS}——日志输出时间
    %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
    %-5level——日志级别,并且使用5个字符靠左对齐
    %logger- ——日志输出者的名字
    %msg——日志消息
    %n——平台的换行符

三:logback的自定义配置

  • 当我们想使用更高级的日志操作,比如我们希望将不同包下的日志记录到不同的位置,或者只想查看日志中包含否和特定正则的记录,此时需要logback‘的高级配置;

  • SpringBoot中默认使用logback作为日志实现。一般我们构建的springboot项目中包含spring-boot-starter-web,里面已经包含了logback的三个以来jar:

    • logback-core:基础模块;
    • logback-classic:log4j的改良;
    • logback-access:提供通过http访问日志的功能
  • springboot查找logback配置文件的顺序:首先查找logback.groovy,然后logback-test.xml,然后logback.xml文件,都没有使用默认设置;

 

logback.xml配置:

配置实例:appender负责具体日志输出。logger负责对相关包或者类进行控制;

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="true"> <!-- 控制台打印日志的相关配置,配置文件修改60s刷新,默认1min,debug=true显示logback内部日志信息 -->

<property name="location" value="./../logs/" /> <!--location表示了value值,在这作为日志的保存位置使用-->

<!--像控制台输出的日志格式,输出级别为warn以上的日志被打印-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd-HH:mm:ss} [%class:%line] - %m%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>warn</level>
</filter>
</appender>

<!--将日志保存到本地,filter设置级别,encoder设置格式,rollingPlicy设置日志滚动方式为基于时间滚动,保存格式为按天保存,最长时间为30天-->
<appender name="file1" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>%d{yyyy-MM-dd-HH:mm:ss} [%class:%line] - %m%n</pattern>
</encoder>
<!--<append>false</append>-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${location}%d{yy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>

<!--仍然擦用该输出方式,file设置日志保存地址和日志名字,filter采用正则匹配的方式,
   rollingPolicy策略为固定窗口策略:将日志压缩为如tets.1.log.zip格式放在location位置,其中%i必须带,范围为1-2;
triggeringPolocy定义了rollingPolicy的触发机制:采用基于文件大小的方式,当日志大于2k时进行压缩;-->
<appender name="file2" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${location}service.log</file>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator >
<matcher>
<Name>wht</Name>
<regex>^[ie]</regex>
</matcher>
<expression>wht.matches(formattedMessage)</expression>
</evaluator>
<OnMatch>ACCEPT</OnMatch>
<OnMismatch>DENY</OnMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${location}tests.%i.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>2</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>2kB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd-HH:mm:ss} [%class:%line] - %m%n</pattern>
</encoder>
</appender>

<logger定义哪个包使用哪种appender进行日志输出,注意additivity默认不向上层传递,否则日志可能会被打印两遍>
<!--<logger name="com.wht.logger02.controller" level="DEBUG" additivity="false">;不向上层传递
<!--<appender-ref ref="file1"></appender-ref>-->
<!--</logger>-->
<logger name="com.wht.logger02.service" level="INFO" additivity="false">
<appender-ref ref="file2"></appender-ref>
</logger> <root level="INFO">
<appender-ref ref="STDOUT"></appender-ref>
</root> </configuration>

简单看下file2的日志输出: logging日志下是工程目录,service.log是正在生成的日志,test是已经打包的日志

      

SpringBoot中的日志使用:的更多相关文章

  1. SpringBoot中Logback日志的配置

    说明 在SpringBoot中自带的日志工具是Logback,我们可以在Springboot的配置文件中直接对Logback进行一些简单的配置,如: logging.level.com.nowcode ...

  2. SpringBoot(三) SpringBoot中的日志配置

    SLF4J Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logb ...

  3. springboot中的日志配置

    日志方式:每天日志存放在一个文件中,info和warn日志存放一个文件,error存放一个文件 创建文件 logback-spring.xml <?xml version="1.0&q ...

  4. SpringBoot中的日志

    默认情况下,Spring Boot会用SLF4J + Logback来记录日志,并用INFO级别输出到控制台. SLF4J,即简单日志门面(Simple Logging Facade for Java ...

  5. logback在springBoot项目中的使用 springboot中使用日志进行持久化保存日志信息

    文章目录 1.xml文件的编写 2.实现的效果 2.1 日志保存到磁盘 2.2 控制台输出的效果 放置的位置 1.xml文件的编写 logback-spring.xml <?xml versio ...

  6. springboot logback + log4j2日志管理

    springboot的web项目中自带了日志组件: 我们看一下,springboot中找到日志组件. <dependency> <groupId>org.springframe ...

  7. SpringBoot起飞系列-日志使用(四)

    一.SpringBoot中的日志组件 日志是一个系统中不可缺少的组件.在项目中,我们常用的日志组件有JUL.JCL.Jboss-logging.logback.log4j.log4j2.slf4j.. ...

  8. 【SpringBoot】整合日志框架

    一.日志框架概述 1.1 日志框架的产生 1.2 市面上的日志框架 二.SLF4j 使用与整合 2.1 如何在系统中使用SLF4j 2.2 如何整合日志框架 2.3 SpringBoot中的日志关系 ...

  9. Springboot中使用AOP统一处理Web请求日志

    title: Springboot中使用AOP统一处理Web请求日志 date: 2017-04-26 16:30:48 tags: ['Spring Boot','AOP'] categories: ...

随机推荐

  1. Linux之history使用技巧

    背景: 正常情况下,Linux系统中输入 history  只显示序号和历史命令如下图,但是当我们想要根据历史命令来排查一些故障问题时,无法精确获取该命令执行的详细信息,包括执行时间.执行的用户.是哪 ...

  2. 【Elastic-2】SpringBoot整合ELK、SpringBoot写ES

    ELK相关TODO 快速开始文档(https://www.cnblogs.com/lbhym/p/15934416.html) SpringBoot整合ELK ELK接入Kafka(待Kafka快速开 ...

  3. HTTP攻击与防范-命令注入攻击

    实验目的 1.了解命令注入攻击攻击带来的危险性. 2.掌握命令注入攻击攻击的原理与方法 3.掌握防范攻击的方法 实验原理 1.了解命令注入攻击攻击攻击带来的危险性. 2.掌握命令注入攻击攻击攻击的原理 ...

  4. 如何将k8s中的某些节点单独、仅给某些应用来使用

    1.概述 在k8s集群的使用场景中有这样的一种情况,某些机器只给某些特殊的应用来使用.那么,这个时候,需要有以下的2个条件来进行保障: 节点不允许其他的pod来使用 应用只允许被调度到该节点上 2.实 ...

  5. Centos7使用kubeadm安装1.23.1版本的k8s集群

    系统环境 #cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) #Linux内核一定要大约等于3.10,也就是centos版本要大 ...

  6. C# Event 内核构造 |EventWaitHandle、AutoResetEvent、 ManualResetEvent

    EventWaitHandle 继承:Object->WaitHandle-> EventWaitHandle派生:System.Threading.AutoResetEvent\Syst ...

  7. 【C#】通过一个案例 彻底了解 Volatile和 内存屏障

    案例如下的.我个人理解是不会出现出现0,0的结果,但是很明显出现了. 说明对我对 Volatile\内存屏障\乱序排序的理解是不对. 今天就通过这个案例,理清这些概念. using System; u ...

  8. 【基础知识】 CPU 详细整理(个人整理)

    本文只是个人对cpu的理解,不建议浏览 建议浏览:https://zhuanlan.zhihu.com/p/397260483 提要 64位/32位操作系统,64/32指的是通用寄存器的位数. 定义 ...

  9. C#10 新功能

    C# 10.0 向 C# 语言添加了以下功能和增强功能: 记录结构 结构类型的改进 可使用 const 内插字符串 内插字符串处理程序 global using 指令 文件范围的命名空间声明 扩展属性 ...

  10. 【C#表达式树 四】Expression类上的函数列表

    Expression相当于工厂,这个工厂有各式各样的模型(函数),用来生成各种零部件(节点类型),最后组装成表达式树. Expressions这个命名空间有各种个容器用陈放生产出来的零部件. Expr ...