2015-09-08 19:57

7673人阅读
评论(0)

收藏

举报

.

分类:

Spring Boot(51)

.

目录(?)[+]

日志对于应用程序来说是非常重要的,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.xml自定义的配置文件后,日志没有颜色了

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

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

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

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

    原本的日志文件配置如下: <?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+ 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. HTML5的绘图的支持

    一.简单介绍canvas元素 <canvas.../>是HTML5新增的一个元素,该元素用于绘制图形.实际上<canvas../>只是相当于一张画布. 它除了可以指定通用属性外 ...

  2. C++中#include <xxx.h>和#include "xxx.h"的区别(尖括号和双引号的区别)

    第一种方式:采用< >方式,表示让编译器在编译器的预设标准路径下去搜索相应的头文件,如果找不到则报错. 例如:VS2015的安装目录\Microsoft Visual Studio 14. ...

  3. 利用mapreduce清洗日志内存不足问题

    package com.libc; import java.io.IOException; import java.io.UnsupportedEncodingException; import ja ...

  4. iOS App集成Apple Pay教程(附示例代码)

    苹果在本周一发布了iOS 8.1版本,并正式开放了Apple Pay支付系统.Apple Pay是一个基于NFC的支付系统,不久将被数以万计的线下零售商店予以支持.即便这项科技并不是彻底的突破性进展, ...

  5. wcf xml消息客户端cookie

    public override bool Login(string userName, string password) { using (HttpClient client = new HttpCl ...

  6. SQL Server中 sysobjects、syscolumns、systypes

    1.sysobjects    系统对象表. 保存当前数据库的对象,如约束.默认值.日志.规则.存储过程等 在大多数情况下,对你最有用的两个列是Sysobjects.name和Sysobjects.x ...

  7. QT国际化

    写的比较简洁 语言文件: ts:编辑翻译用的,是xml,可以用linguist(qt语言专家)或者Editplus进行翻译 qm:这种文件是ts的release版,无法编辑,发布的时候用这个 操作: ...

  8. BZOJ 2879: [Noi2012]美食节( 费用流 + 动态加边 )

    倒着做菜..然后考虑为当前的人做菜对后面的人的影响就可以了..要动态加边 --------------------------------------------------------------- ...

  9. SGU 248. Integer Linear Programming( 背包dp )

    看了半天...发现就是个背包...然后就不打算敲了. 看了一眼forum..顿时吓傻..其他人用了gcd啊什么的各种奇怪的东西..然后还是敲了个背包结果就AC了= =既然写了代码就扔上来吧... -- ...

  10. JAVA并发,经典死锁案例-哲学家就餐

    转自:http://blog.csdn.net/tayanxunhua/article/details/38691005 死锁经典案例:哲学家就餐. 这个案例会导致死锁. 通过修改<Java编程 ...