Spring Boot Logback应用日志
分类:
.
日志对于应用程序来说是非常重要的,Spring框架本身集成了不少其他工具,我们自身的应用也会使用到第三方库,所以我们推荐在Spring应用中使用SLF4J/Logback来记录日志。
SLF4J与Logback简介
SLF4J——Simple Logging Facade For Java,它是一个针对于各类Java日志框架的统一Facade抽象。Java日志框架众多——常用的有java.util.logging
, log4j
, logback
,commons-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
的日志,日志级别是DEBUG
,base.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.xml
和file-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是一个统一的日志跟踪平台,在传统的日志管理中,都是在服务器上通过tail
, vim
等工具查看日志,并且不同的日志位置也个不相同,而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
我的同类文章
- •SpringBoot
Quickstart2016-07-17阅读34•Spring-data-redis:
分布式队列2016-06-06阅读153•Dubbo原理解析-监控2016-05-28阅读172•Spring
Boot Admin Reference Guide2016-05-21阅读204•dubbo服务者配置说明2016-05-19阅读139•Spring
Boot 环境变量读取 和 属性对象的绑定2016-05-17阅读183
- •Spring
Cache使用详解2016-07-17阅读53•Spring
Boot使用Redis进行消息的发布订阅2016-06-06阅读150•Spring
Boot 性能优化2016-05-27阅读190•zookeeper集群搭建设置2016-05-19阅读163•Spring
Boot Memory Performance2016-05-18阅读110
Spring Boot Logback应用日志的更多相关文章
- Spring Boot - Logback配置日志要考虑哪些因素
Spring Boot - Logback配置日志 出于性能等原因,Logback 目前是springboot应用日志的标配: 当然有时候在生产环境中也会考虑和三方中间件采用统一处理方式.@pdai ...
- 【spring boot logback】日志颜色渲染,使用logback-spring.xml自定义的配置文件后,日志没有颜色了
接着spring boot日志logback解析之后,发现使用logback-spring.xml自定义的配置文件后,日志没有颜色了 怎么办? 官网处理日志链接:https://logback.qos ...
- 【spring boot logback】日志使用自定义的logback-spring.xml文件后,application.properties中关于日志的相关配置还会起作用么
本篇 将针对[日志使用自定义的logback-spring.xml文件后,application.properties中关于日志的相关配置还会起作用么]这一个主题进行探索. 这个测试项目是根据[spr ...
- 【spring boot logback】日志logback 生成日志文件在本项目下,而不在指定的日志文件目录下/指定日志文件到达最大值后不按照配置进行切割
原本的日志文件配置如下: <?xml version="1.0" encoding="UTF-8"?> <configuration scan ...
- 【spring boot logback】日志logback格式解析
日志logback格式解析 logback官网 格式解析 https://logback.qos.ch/manual/layouts.html#ClassicPatternLayout 官网格式解析有 ...
- Spring boot+ logback环境下,日志存放路径未定义的问题
日志路径未定义 环境:Spring boot + logback 配置文件: <configuration> <springProfile name="dev"& ...
- 微服务日志之Spring Boot Kafka实现日志收集
前言 承接上文( 微服务日志之.NET Core使用NLog通过Kafka实现日志收集 https://www.cnblogs.com/maxzhang1985/p/9522017.html ).NE ...
- spring boot整合slf4j-log日志
原文地址:https://blog.csdn.net/u011271894/article/details/75735915 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...
- Spring Boot logback
前言 今天来介绍下spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日志输出格式以及输出方式如何配置? 代码中如何使用? 正文 Sp ...
随机推荐
- JavaScript之JS实现动画效果
在前面的随笔中介绍了如何用DOM技术修改文档的央样式信息,用JavaScript添加样式信息可以节约我们的时间和精力,但总的来说,CSS仍是完成这类任务的最佳工具.但是有一个应用领域是目前的CSS无能 ...
- ubuntu14.04+xfce下启用fcitx,使用中文输入法
1. 安装fcitx sudo apt-get install fcitx-pinyin 2.启用fcitx 打开 setting -> Language Support -> Lang ...
- linux php文件include失败 一个很神奇的问题
1. html生成失败,权限问题 前天用php生成模板,在windows上开发,include文件,读缓存写文件,顺风顺水,晚上写完后传到linux上html生成失败,发现文件和文件夹都没生成,网上查 ...
- Java基础之"=="和 和 equals 方法的区别
一."=="操作符 ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作 ...
- Hibernate学习之关系映射(转)
一.一对多 "一对多"是最普遍的映射关系,简单来讲就如消费者与订单的关系.一对多:从消费者角的度来说一个消费者可以有多个订单,即为一对多.多对一:从订单的角度来说多个订单可以对应一 ...
- javascript函数apply和call
apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性. Function.apply(obj,args)方法能接收两个参数obj:这个对象将代替Function类里this对象args:这 ...
- 模块化定义JS,让统一文件夹内相同的变量不冲突
两种方法: 1.(function(){……编写代码……})() //先声明一个函数,声明完后直接调用 2.!function(){……编写代码……}()
- codeforces 242E. XOR on Segment 线段树
题目链接 给n个数, 两种操作, 一种是求区间内的数的和, 一种是将区间内的数异或x. 异或x没有什么思路, 单个异或肯定超时, 区间异或也没有办法做....后来才知道可以按位建线段树, 这样建20棵 ...
- MySQL 表分区A
在MySQL中表的分区类型总的来说有四种: 第一种:range分区.基于一个给定的区间范围,把数据分配到不同的分区. 第二种:list 分区.基本枚举的值列表进行分区. 第三种:hast 分区.基 ...
- NPO贴片电容容量范围对照表
NPO贴片电容简述 NPO(COG)贴片电容属于Class 1温度补偿型电容.它的容量稳定,几乎不随温度.电压.时间的变化而变化.尤其适用于高频电子电路. NPO(COG)贴片电容特性 具有最高的电容 ...