Spring Boot Logback应用日志

时间:2021-07-17 08:54:17
2015-09-08 19:57

7673人阅读
评论(0)

收藏

举报

.

Spring Boot Logback应用日志

分类:

Spring Boot(51)
Spring Boot Logback应用日志

.

目录(?)[+]

日志对于应用程序来说是非常重要的,Spring框架本身集成了不少其他工具,我们自身的应用也会使用到第三方库,所以我们推荐在Spring应用中使用SLF4J/Logback来记录日志。

SLF4J与Logback简介

SLF4J——Simple Logging Facade For Java,它是一个针对于各类Java日志框架的统一Facade抽象。Java日志框架众多——常用的有java.util.logginglog4jlogbackcommons-logging,
Spring框架使用的是Jakarta Commons Logging API (JCL)。而SLF4J定义了统一的日志抽象接口,而真正的日志实现则是在运行时决定的——它提供了各类日志框架的binding。

Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。

Spring Boot Logging

Spring Boot实现了一套日志系统——它能够根据类路径上的内容来决定使用哪一种日志框架,logback是最优先的选择。配置了logback.xml可以利用Spring
Boot提供的默认日志配置:

<?xml version="1.0" encoding="UTF-8"?><configuration>    <include resource="org/springframework/boot/logging/logback/base.xml"/>    <logger name="org.springframework.web" level="DEBUG"/></configuration>

这样就定义了一个<logger>捕获org.springframework.web的日志,日志级别是DEBUGbase.xml内容如下:

<included>    <include resource="org/springframework/boot/logging/logback/defaults.xml" />    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />    <include resource="org/springframework/boot/logging/logback/file-appender.xml" />    <root level="INFO">        <appender-ref ref="CONSOLE" />        <appender-ref ref="FILE" />    </root></included>

Spring Boot的日志系统预先定义了一些系统变量:

  • ${PID},当前进程ID
  • ${LOG_FILE},Spring Boot配置文件中logging.file的值
  • ${LOG_PATH}, Spring Boot配置文件中logging.path的值

同时默认情况下包含另个appender——一个是控制台,一个是文件,分别定义在console-appender.xmlfile-appender.xml中。同时对于应用的日志级别也可以通过application.properties进行定义:

logging.level.org.springframework.web=DEBUGlogging.level.org.hibernate=ERROR

这等价于在logback.xml配置appender的日志级别。

ConsoleAppender

Logback使用appender来定义日志输出,在开发过程中最常用的是将日志输出到控制台:

<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">  <encoder>    <Pattern>.%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %n</Pattern>  </encoder>  <filter class="ch.qos.logback.classic.filter.ThresholdFilter">    <level>TRACE</level>  </filter></appender>

<encoder>表示对日志进行编码:

  • %d{HH:mm:ss.SSS}——日志输出时间
  • %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
  • %-5level——日志级别,并且使用5个字符靠左对齐
  • %logger{36}——日志输出者的名字
  • %msg——日志消息
  • %n——平台的换行符

在这种格式下一条日志的输出结果如下:

0:12:51.012 [qtp231719230-45] DEBUG o.c.d.r.util.LoggingResponseFilter

RollingFileAppender

另一种常见的日志输出到文件,随着应用的运行时间越来越长,日志也会增长的越来越多,将他们输出到同一个文件并非一个好办法。RollingFileAppender用于切分文件日志:

<appender name="dailyRollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">  <File>/data/log/app.log</File>  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">    <!-- daily rollover -->    <FileNamePattern>rest-demo.%d{yyyy-MM-dd}.log</FileNamePattern>    <!-- keep 30 days' worth of history -->    <maxHistory>30</maxHistory>           </rollingPolicy>  <encoder>    <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern>  </encoder>        </appender>

其中重要的是rollingPolicy的定义,上例中<FileNamePattern>rest-demo.%d{yyyy-MM-dd}.log</FileNamePattern>定义了日志的切分方式——把每一天的日志归档到一个文件中,<maxHistory>30</maxHistory>表示只保留最近30天的日志,以防止日志填满整个磁盘空间。同理,可以使用%d{yyyy-MM-dd_HH-mm}来定义精确到分的日志切分方式。

Sentry

Sentry是一个统一的日志跟踪平台,在传统的日志管理中,都是在服务器上通过tailvim等工具查看日志,并且不同的日志位置也个不相同,而Sentry则是将这些日志(主要是错误日志)通过统一的接口收集起来,并且提供跟踪、管理的功能,使得应用程序的错误、Bug能够即时被解决。

Sentry提供了Java库——Raven Java,Java应用程序能够在捕获异常后将其发送到Sentry服务器中,另一方面它包含了各类日志框架的支持,以Logbakc为例:

<dependency>    <groupId>net.kencochrane.raven</groupId>    <artifactId>raven-logback</artifactId>    <version>6.0.0</version></dependency>

logback.xml中定义appender

<configuration>    <appender name="Sentry" class="net.kencochrane.raven.logback.SentryAppender">        <dsn>https://publicKey:secretKey@host:port/1?options</dsn>        <tags>tag1:value1,tag2:value2</tags>        <!-- Optional, allows to select the ravenFactory -->        <!--<ravenFactory>net.kencochrane.raven.DefaultRavenFactory</ravenFactory>-->    </appender>    <root level="warn">        <appender-ref ref="Sentry"/>    </root></configuration>

我们推荐在这个<appender>中加入<filter>用于过滤ERROR级别的日志。

0
0

我的同类文章

Spring Boot(51)

更多文章

Spring Boot Logback应用日志的更多相关文章

  1. Spring Boot - Logback配置日志要考虑哪些因素

    Spring Boot - Logback配置日志 出于性能等原因,Logback 目前是springboot应用日志的标配: 当然有时候在生产环境中也会考虑和三方中间件采用统一处理方式.@pdai ...

  2. 【spring boot logback】日志颜色渲染,使用logback-spring&period;xml自定义的配置文件后,日志没有颜色了

    接着spring boot日志logback解析之后,发现使用logback-spring.xml自定义的配置文件后,日志没有颜色了 怎么办? 官网处理日志链接:https://logback.qos ...

  3. 【spring boot logback】日志使用自定义的logback-spring&period;xml文件后,application&period;properties中关于日志的相关配置还会起作用么

    本篇 将针对[日志使用自定义的logback-spring.xml文件后,application.properties中关于日志的相关配置还会起作用么]这一个主题进行探索. 这个测试项目是根据[spr ...

  4. 【spring boot logback】日志logback 生成日志文件在本项目下,而不在指定的日志文件目录下&sol;指定日志文件到达最大值后不按照配置进行切割

    原本的日志文件配置如下: <?xml version="1.0" encoding="UTF-8"?> <configuration scan ...

  5. 【spring boot logback】日志logback格式解析

    日志logback格式解析 logback官网 格式解析 https://logback.qos.ch/manual/layouts.html#ClassicPatternLayout 官网格式解析有 ...

  6. Spring boot&plus; logback环境下,日志存放路径未定义的问题

    日志路径未定义 环境:Spring boot + logback 配置文件: <configuration> <springProfile name="dev"& ...

  7. 微服务日志之Spring Boot Kafka实现日志收集

    前言 承接上文( 微服务日志之.NET Core使用NLog通过Kafka实现日志收集 https://www.cnblogs.com/maxzhang1985/p/9522017.html ).NE ...

  8. spring boot整合slf4j-log日志

    原文地址:https://blog.csdn.net/u011271894/article/details/75735915 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

  9. Spring Boot logback

    前言 今天来介绍下spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日志输出格式以及输出方式如何配置? 代码中如何使用? 正文 Sp ...

随机推荐

  1. How to Remove Table Partitioning in SQL Server

    In this article we will see how we can remove partitions from a table in a database in SQL server. I ...

  2. Linux磁盘管理之设备文件详解04

    Linux一切接文件,除了普通文件和目录文件,还包括一些其它的特殊文件:块设备文件.字符设备文件.套接字文件.链接文件等.今天这里主要说一下常见的块设备文件和字符设备文件,这2类是最常见的设备文件类. ...

  3. css基本选择器

    CSS:层叠样式表 (Cascading Style Sheets) 结构层:HTML表现层: CSS行为层: DOM,JavaScript CSS语法结构:div{background:#f00;} ...

  4. MySQL 5&period;7&period;10 免安装配置

    # 配置环境:windows 64bit # 安装版本:mysql-5.7.10-win32(zip archive版本) 1. ZIP Archive版是免安装的,只需把mysql-5.7.10-w ...

  5. Spotlights

    Spotlights time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  6. Activiti获取ProcessEngine的三种方法

    1.通过ProcessEngineConfiguration获取 package cn.lonecloud.mavenActivi; import org.activiti.engine.Proces ...

  7. Unity使用C&plus;&plus;作为游戏逻辑脚本的研究

    文章申明:本文来自JacksonDunstan的博客系列文章内容摘取和翻译,版权归其所有,附上原文的链接,大家可以有空阅读原文:C++ Scripting( in Unity) 一.C#和C++的通信 ...

  8. DSAPI&period;网络&period;网卡信息属性表

    DSAPI.网络.网卡信息属性表 其中,带有ReadOnly的属性只可读不可改,不带ReadOnly的属性即可读也可直接修改,如IP地址,Mac地址等 丢弃接收数据包数: 0 丢弃发送数据包数: 0 ...

  9. Why Random Initialization in Neural Network&quest;

  10. 不使用循环或递归判断一个数是否为3的幂(leetcode 326)

    326. Power of ThreeGiven an integer, write a function to determine if it is a power of three. Follow ...