Spring Boot Logback应用日志
2015-09-08 19:57
459 查看
日志对于应用程序来说是非常重要的,Spring框架本身集成了不少其他工具,我们自身的应用也会使用到第三方库,所以我们推荐在Spring应用中使用SLF4J/Logback来记录日志。
SLF4J——Simple Logging Facade For Java,它是一个针对于各类Java日志框架的统一Facade抽象。Java日志框架众多——常用的有
Spring框架使用的是Jakarta Commons Logging API (JCL)。而SLF4J定义了统一的日志抽象接口,而真正的日志实现则是在运行时决定的——它提供了各类日志框架的binding。
Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。
Spring Boot实现了一套日志系统——它能够根据类路径上的内容来决定使用哪一种日志框架,
Boot提供的默认日志配置:
这样就定义了一个
Spring Boot的日志系统预先定义了一些系统变量:
同时默认情况下包含另个
这等价于在
Logback使用
在这种格式下一条日志的输出结果如下:
另一种常见的日志输出到文件,随着应用的运行时间越来越长,日志也会增长的越来越多,将他们输出到同一个文件并非一个好办法。
其中重要的是
Sentry是一个统一的日志跟踪平台,在传统的日志管理中,都是在服务器上通过
Sentry提供了Java库——Raven Java,Java应用程序能够在捕获异常后将其发送到Sentry服务器中,另一方面它包含了各类日志框架的支持,以Logbakc为例:
在
我们推荐在这个
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=DEBUG logging.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级别的日志。
相关文章推荐
- Spring Boot Logback应用日志
- Spring Boot Logback应用日志
- Java内存与垃圾回收调优
- java 正则表达式
- 深入学习微框架 Spring Boot
- JVM(java 虚拟机)内存设置
- JAVA 0-1000以内的数的各个数位 数之和
- "XX cannot be resolved to a type "eclipse报错及解决说明
- Java标识符命名规范
- 斐波那契数列-java编程:三种方法实现斐波那契数列
- java笔记——初识面向对象03一个文件调用另一个文件
- java 十一天 对象和行为
- JUnit---Java单元测试必备工具
- Spring中取得session,request等對象
- 浅谈面向对象
- 冒泡排序java代码
- JAVA第二周 输入字符
- JDK和eclipse下载地址
- 利用javadoc生成API文档
- java web 项目中的web.xml配置详解