当前位置: 首页 > news >正文

湘潭网站建设定制磐石网络百度热度榜搜索趋势

湘潭网站建设定制磐石网络,百度热度榜搜索趋势,酷玛网站建设,网站上推广游戏怎么做文章目录日志体系结构在SpringBoot中使用slf4j logback日志框架四种常用的日志输出1. ConsoleAppender2. FileAppender3. RollingFileAppender之TimeBasedRollingPolicy4. RollingFileAppender之SizeAndTimeBasedRollingPolicy日志过滤1. 级别介绍2. 过滤节点filter介绍Spring…

文章目录

  • 日志体系结构
  • 在SpringBoot中使用slf4j + logback日志框架
  • 四种常用的日志输出
    • 1. ConsoleAppender
    • 2. FileAppender
    • 3. RollingFileAppender之TimeBasedRollingPolicy
    • 4. RollingFileAppender之SizeAndTimeBasedRollingPolicy
  • 日志过滤
    • 1. 级别介绍
    • 2. 过滤节点filter介绍
  • SpringBoot日志输出的最终使用

日志体系结构

对于一个web项目来说二,日志框架是必不可少的,日志的记录可以帮助我们在开发以及维护过程中快速的定位错误。相信很多人听说过slf4j,log4j,logback,JDK Logging等跟日志框架有关的词语,所以这里也简单介绍下他们之间的关系。

首先slf4j可以理解为规则的制定者,是一个抽象层,定义了日志相关的接口,log4j,logback,JDK Logging都是slf4j的实现层,只是处于不同。

其中slf4j + logback是当下最流行的日志框架。

在SpringBoot中使用slf4j + logback日志框架

在SpringBoot使用是非常方便的,不需要我们有复杂的配置,因为Spring Boot默认支持的就是slf4j + logback日志框架,而我们只需要在src/main/resources下添加配置文件logback-spring.xml即可。

logback-spring.xml配置规则

<configuration><!-- 一般根节点不需要写属性了,使用默认的就好 -->	<scan>当配置文件发生修改时,是否重新加载该配置文件,默认为true</scan><scanPeriod>检测“配置文件是否被修改”的时间周期,默认为1min,只有在scan = true时才生效</scanPeriod><debug>是否打印logback内部日志,默认为false</debug><!--重要子节点,正式这些节点的不同组合构成配置文件的基本框架--><!--定义策略的子节点:一个日志策略对应一个appender标签,一个配置文件可以有零个或者多个appender--><!--如果没有定义至少一个appender标签,程序不会报错,但是不会有任何的日志信息输出--><appender><name>指定该节点的名称,方便之后的使用</name><class>指定日志策略的类型的全限定名</class></appender><!--用来设置某各包或者类的日志打印级别--><logger><name>用来指定受此约束的包或者类</name><!--ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF--><level>用来指定日志的输出级别,默认继承上级的级别</level><additivity>是否向上级传递输出信息,默认为true</additivity></logger><!--根root是一个特殊的logger,默认name为root,同时因为是根,所以也没有上级传递一说,故没有additivity属性--><root><!--ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF--><level>用来指定日志的输出级别,默认继承上级的级别</level></root><!--用来定义变量的节点,可以使用${}来使用变量--><property><name>变量名</name><value>变量值</value></property></configuration>

logback-spring.xml配置示例:定义了一个输出到控制台的ConsoleAppender以及输出到文件的FileAppender

<?xml version="1.0" encoding="UTF-8"?><!-- 一般根节点不需要写属性了,使用默认的就好 -->
<configuration><contextName>demo</contextName><!-- 该变量代表日志文件存放的目录名 --><property name="log.dir" value="logs"/><!-- 该变量代表日志文件名 --><property name="log.appname" value="eran"/><!--定义一个将日志输出到控制台的appender,名称为STDOUT --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!-- 内容待定 --></appender><!--定义一个将日志输出到文件的appender,名称为FILE_LOG --><appender name="FILE_LOG" class="ch.qos.logback.core.FileAppender"><!-- 内容待定 --></appender><!-- 指定com.demo包下的日志打印级别为INFO,但是由于没有引用appender,所以该logger不会打印日志信息,日志信息向上传递 --><logger name="com.demo" level="INFO"/><!-- 指定最基础的日志输出级别为DEBUG,并且绑定了名为STDOUT的appender,表示将日志信息输出到控制台 --><root level="debug"><appender-ref ref="STDOUT" /></root>
</configuration>

四种常用的日志输出

1. ConsoleAppender

ConsoleAppender的功能

将日志输出到控制台

ConsoleAppender配置实例

<!--定义一个将日志输出到控制台的appender,名称为STDOUT -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><!--pattern作用就是定义日志的格式,即定义一条日志信息包含哪些内容--><pattern>[Eran]%date [%thread %line] %level >> %msg >> %logger{10}%n</pattern></encoder>
</appender>

ConsoleAppender的规则制定

%date{}:输出时间,可以在花括号内指定时间格式,例如-%data{yyyy-MM-dd HH:mm:ss}
%logger{}:日志的logger名称
%thread:产生日志的线程名,可简写为%t
%line:当前打印日志的语句在程序中的行号,可简写为%L
%level:日志级别,可简写为%le,%p
%message:程序员定义的日志打印内容,可简写为%msg,%m
%n:换行,即一条日志信息占一行

2. FileAppender

FileAppender的功能

FileAppender表示将日志输出到文件

FileAppender的配置实例

<!--定义一个将日志输出到文件的appender,名称为FILE_LOG -->
<appender name="FILE_LOG" class="ch.qos.logback.core.FileAppender">  <file>D:/test.log</file><append>true</append>  <encoder>  <pattern>[Eran]%date [%thread %line] %level >> %msg >> %logger{10}%n</pattern></encoder>
</appender>

FileAppender的规则制定

<file>:定义文件名和路径,可以是相对路径 , 也可以是绝对路径 , 如果路径不存在则会自动创建
<append>:两个值true和false,默认为true,表示每次日志输出到文件走追加在原来文件的结尾,false则表示清空现存文件
<encoder>:和ConsoleAppender一样

3. RollingFileAppender之TimeBasedRollingPolicy

看示例就能懂其作用了

<appender name="ROL-FILE-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>D:/logs/test.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 只保留近七天的日志 --><maxHistory>7</maxHistory><!-- 用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志 --><totalSizeCap>1GB</totalSizeCap></rollingPolicy> <encoder><pattern>[Eran]%date [%thread %line] %level >> %msg >> %logger{10}%n</pattern></encoder>
</appender>

TimeBasedRollingPolicy的规则制定

<fileNamePattern>:指定日志的路径以及日志文件名的命名规则,一般根据日志文件名+%d{}.log来命名,这边日期的格式默认为yyyy-MM-dd表示每天生成一个文件,即按天滚动yyyy-MM,表示每个月生成一个文件,即按月滚动
<maxHistory>:可选节点,控制保存的日志文件的最大数量,超出数量就删除旧文件,比如设置每天滚动,且<maxHistory> 是7,则只保存最近7天的文件,删除之前的旧文件
<encoder>:同上
<totalSizeCap>:这个节点表示设置所有的日志文件最多占的内存大小,当超过我们设置的值时,logback就会删除最早创建的那一个日志文件。

4. RollingFileAppender之SizeAndTimeBasedRollingPolicy

看示例就能看懂作用

<appender name="ROL-SIZE-FILE-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>D:/logs/test.%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 单个文件的最大内存 --><maxFileSize>100MB</maxFileSize><!-- 只保留近七天的日志 --><maxHistory>7</maxHistory><!-- 用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志 --><totalSizeCap>1GB</totalSizeCap></rollingPolicy><encoder><pattern>[Eran]%date [%thread %line] %level >> %msg >> %logger{10}%n</pattern></encoder>
</appender>

规则制定

1. 仔细观察上边demo中的<fileNamePattern>会发现比TimeBasedRollingPolicy中定义的
<fileNamePattern>多了.%i的字符,这个很关键,在SizeAndTimeBasedRollingPolicy中是必不可少的。

日志过滤

1. 级别介绍

我们开发测试一般输出DEBUG级别的日志,生产环境配置只输出INFO级别的日志。

ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF

2. 过滤节点filter介绍

过滤器通常配置在Appender中,一个Appender可以配置一个或者多个过滤器,有多个过滤器时按照配置顺序依次执行,其实大多数情况下我们都不需要配置,但是有的情况下又必须配置,所以这里也介绍下常用的也是笔者曾经使用过的两种过率机制:级别过滤器LevelFilter和临界值过滤器ThresholdFilter。

级别过滤器LevelFilter
设置了级别为INFO,满足的日志返回ACCEPT即立即处理,不满足条件的日志则返回DENY即丢弃掉,这样经过这一个过滤器就只有INFO级别的日志会被打印出输出。

<filter class="ch.qos.logback.classic.filter.LevelFilter">   <!--日志级别--><level>INFO</level> <!--DENY:日志将被过滤掉,并且不经过下一个过滤器NEUTRAL:日志将会到下一个过滤器继续过滤ACCEPT:日志被立即处理,不再进入下一个过滤器--><!--配置满足过滤条件的处理方式-->  <onMatch>ACCEPT</onMatch>   <!--配置不满足过滤条件的处理方式--><onMismatch>DENY</onMismatch>   
</filter>

临界值过滤器ThresholdFilter
只处理INFO级别之上的日志,当日志级别等于或高于临界值时,过滤器返回NEUTRAL,当日志级别低于临界值时,返回DENY。

<filter class="ch.qos.logback.classic.filter.ThresholdFilter">   <level>INFO</level>   
</filter>

SpringBoot日志输出的最终使用

spring-logback.xml日志文件配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>    <!--定义一个将日志输出到控制台的appender,名称为STDOUT --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>[%contextName]%date [%thread %line] %level >> %msg >> %logger{10}%n</pattern></encoder></appender> <!--定义一个将日志输出到文件的appender,名称为FILE_LOG --><appender name="FILE_LOG" class="ch.qos.logback.core.FileAppender">  <file>D:/test.log</file><append>true</append>  <encoder>  <pattern>[Eran]%date [%thread %line] %level >> %msg >> %logger{10}%n</pattern></encoder></appender>  <!--  按时间滚动产生日志文件 --><appender name="ROL-FILE-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>D:/logs/test.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 只保留近七天的日志 --><maxHistory>7</maxHistory><!-- 用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志 --><totalSizeCap>1GB</totalSizeCap></rollingPolicy> <encoder><pattern>[Eran]%date [%thread %line] %level >> %msg >> %logger{10}%n</pattern></encoder></appender><!-- 按时间和文件大小滚动产生日志文件 --><appender name="ROL-SIZE-FILE-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>D:/logs/test.%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 单个文件的最大内存 --><maxFileSize>100MB</maxFileSize><!-- 只保留近七天的日志 --><maxHistory>7</maxHistory><!-- 用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志 --><totalSizeCap>1GB</totalSizeCap></rollingPolicy><encoder><pattern>[Eran]%date [%thread %line] %level >> %msg >> %logger{10}%n</pattern></encoder><!-- 只处理INFO级别以及之上的日志 --><filter class="ch.qos.logback.classic.filter.ThresholdFilter">   <level>INFO</level>   </filter><!-- 只处理INFO级别的日志 --><filter class="ch.qos.logback.classic.filter.LevelFilter">   <level>INFO</level>   <onMatch>ACCEPT</onMatch>   <onMismatch>DENY</onMismatch>   </filter></appender><!-- 异步写入日志 --><appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender">  <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->  <discardingThreshold >0</discardingThreshold>  <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->  <queueSize>512</queueSize>  <!-- 添加附加的appender,最多只能添加一个 -->  <appender-ref ref ="FILE_LOG"/></appender><!-- 指定com.demo包下的日志打印级别为DEBUG,但是由于没有引用appender,所以该logger不会打印日志信息,日志信息向上传递 --><logger name="com.example" level="DEBUG"></logger><!-- 这里的logger根据需要自己灵活配置 ,我这里只是给出一个demo--><!-- 指定开发环境基础的日志输出级别为DEBUG,并且绑定了名为STDOUT的appender,表示将日志信息输出到控制台 --><springProfile  name="dev"><root level="DEBUG"><appender-ref ref="STDOUT" /></root></springProfile><!-- 指定生产环境基础的日志输出级别为INFO,并且绑定了名为ASYNC的appender,表示将日志信息异步输出到文件 --><springProfile  name="prod"><root level="INFO"><appender-ref ref="ASYNC" /></root></springProfile>
</configuration>

当然,如果你的日志输出文件路径只填写了文件名,那输出日志就会默认存放在项目中
在这里插入图片描述

代码中使用日志

@Slf4j
public class App 
{public static void main( String[] args ){log.trace("trace级别的日志");log.debug("debug级别日志");log.info("info级别日志");log.warn("warn级别的日志");log.error("error级别日志");String name = "bysen";Integer age = 24;log.info("姓名{}, 年龄{}",name,age);}
}

项目启动后,SpringBoot默认读取的日志文件是spring-logback,所以名字错误可能就读不到了,那么在项目运行之后,就会在制定路径下生成一个日志文件了。
在这里插入图片描述

http://www.ysxn.cn/news/2883.html

相关文章:

  • 做企业网站必须要座机吗模板网站免费
  • 烟台网站建设方案托管搜索优化
  • 引领网站最新的疫情数据
  • 优惠券的网站怎么做宁波网站推广大全
  • 免费制作网站的步骤 怎样做网站天津百度推广公司电话
  • 360做网站多少钱一年品牌管理
  • 接入商 济南网站建设海南网站设计
  • 自己做的网站注册用户无法收到激活邮箱的邮件中央常委成员名单
  • 浙江高端网站建设西安自助建站
  • 新人如何做自己的网站百度系app有哪些
  • 台州网站制作怎么做app推广
  • 网站反链数吉林seo刷关键词排名优化
  • 400电话申请网站源码程序江门网站开发多少钱
  • 西宁微信网站建设宁波网络营销策划公司
  • 商务网站建设的应用seo点击排名工具有用吗
  • 网站正在建设中 html 模板搜索引擎营销的特点是
  • 新手学做网站要多久企业管理系统
  • 用jsp做的二手交易网站成长电影在线观看免费
  • wordpress二级栏目信息流优化师培训
  • 在什么网站上做精帖幽默广告软文案例
  • 专业做礼品团购的网站网站优化教程
  • wordpress极速版西安seo优化公司
  • 建站平台和网站建设的区别seo岗位培训
  • 丰城网站建设三亚百度推广地址
  • 公司网址平台有哪些seo 资料包怎么获得
  • 成都微信网站建设搜索引擎优化案例分析
  • 旅游网站html百度网站制作联系方式
  • 专业彩票网站开发 APP开发佛山seo优化
  • 大型网站建设与维护过程软文推广平台排名
  • 2015网站排名上海外包seo