Spring Boot 2.X(十四):日志功能 Logback
Logback 简介
Logback 是由 SLF4J 作者开发的新一代日志框架,用于替代 log4j。
主要特点是效率更高,架构设计够通用,适用于不同的环境。
Logback 分为三个模块:logback-core,logback-classic和logback-access。
logback-core 模块是其他两个模块的基础。
logback-classic 模块是 core 的扩展,是log4j的改进版。logback-classic 本身实现了 SLF4J API,因此可以很容易的在 logback 和其他日志框架之间来回切换,例如 log4j、java.util.logging(JUL)。
logback-access 模块集成了 Servlet 容器,提供了 HTTP 访问日志的功能。
github:https://github.com/qos-ch/logback
Logback 使用
1.使用 logback-spring.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 定义日志根目录 -->
<property name="LOG_PATH" value="/usr/local/log/" />
<!-- 定义应用名称 -->
<property name="APP_NAME" value="springboot-logback" />
<!-- 应用名称 -->
<contextName>${APP_NAME}</contextName>
<!-- 引用 Spring Boot 中默认的 logback 配置 -->
<!-- <include resource="org/springframework/boot/logging/logback/base.xml" /> -->
<!-- 可以动态修改日志输出等级 -->
<jmxConfigurator />
<!--输出到控制台-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<encoder>
<pattern>%d [%t] %5p %c:%L - %m%n</pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 时间滚动输出 level为 INFO 日志 -->
<appender name="INFO_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}${APP_NAME}-info.log</File>
<encoder>
<pattern>%d [%t] %5p %c:%L - %m%n</pattern>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录,日志按天分类压缩保存-->
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<FileNamePattern>${LOG_PATH}${APP_NAME}/info/%d{yyyy-MM-dd}-%i.log.gz
</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
</appender>
<!-- 时间滚动输出 level为 ERROR 日志 -->
<appender name="ERROR_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}${APP_NAME}-error.log</File>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>error</level>
</filter>
<encoder>
<pattern>%d [%t] %5p %c:%L - %m%n</pattern>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录,日志按天分类压缩保存-->
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>256MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<FileNamePattern>${LOG_PATH}${APP_NAME}/error/%d{yyyy-MM-dd}-%i.log.gz
</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
</appender>
<!-- 设置需要打印日志的包及输出级别 -->
<logger name="org.springframework.web" level="INFO" />
<logger name="cn.zwqh.springboot.controller" level="TRACE" />
<!--
使用mybatis的时候,sql语句只有在 debug 级别下才会打印
-->
<logger name="cn.zwqh.springboot.dao" level="debug" />
<!--
root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
不能设置为INHERITED或者同义词NULL。默认是DEBUG
可以包含零个或多个元素,标识这个appender将会添加到这个logger。
-->
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</configuration>
2.使用 logback.groovy 配置
使用 groovy 配置需要添加依赖
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.17</version>
</dependency>
import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.classic.filter.ThresholdFilter
import ch.qos.logback.core.ConsoleAppender
import ch.qos.logback.core.rolling.RollingFileAppender
import ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP
import ch.qos.logback.core.rolling.TimeBasedRollingPolicy
import java.nio.charset.Charset
import static ch.qos.logback.classic.Level.DEBUG
import static ch.qos.logback.classic.Level.ERROR
import static ch.qos.logback.classic.Level.INFO
import static ch.qos.logback.classic.Level.TRACE
scan("60 seconds")
def LOG_PATH = "/usr/local/log/"
def APP_NAME = "springboot-logback"
context.name = "${APP_NAME}"
jmxConfigurator()
appender("CONSOLE", ConsoleAppender) {
filter(ThresholdFilter) {
level = DEBUG
}
encoder(PatternLayoutEncoder) {
pattern = "%d [%t] %5p %c:%L - %m%n"
charset = Charset.forName("UTF-8")
}
}
appender("INFO_FILE", RollingFileAppender) {
file = "${LOG_PATH}${APP_NAME}-info.log"
encoder(PatternLayoutEncoder) {
pattern = "%d [%t] %5p %c:%L - %m%n"
charset = Charset.forName("UTF-8")
}
rollingPolicy(TimeBasedRollingPolicy) {
timeBasedFileNamingAndTriggeringPolicy(SizeAndTimeBasedFNATP) {
maxFileSize = "100MB"
}
fileNamePattern = "${LOG_PATH}${APP_NAME}/info/%d{yyyy-MM-dd}-%i.log.gz"
maxHistory = 30
}
}
appender("ERROR_FILE", RollingFileAppender) {
file = "${LOG_PATH}${APP_NAME}-error.log"
filter(ThresholdFilter) {
level = ERROR
}
encoder(PatternLayoutEncoder) {
pattern = "%d [%t] %5p %c:%L - %m%n"
charset = Charset.forName("UTF-8")
}
rollingPolicy(TimeBasedRollingPolicy) {
timeBasedFileNamingAndTriggeringPolicy(SizeAndTimeBasedFNATP) {
maxFileSize = "256MB"
}
fileNamePattern = "${LOG_PATH}${APP_NAME}/error/%d{yyyy-MM-dd}-%i.log.gz"
maxHistory = 30
}
}
logger("org.springframework.web", INFO)
logger("cn.zwqh.springboot.controller", TRACE)
logger("cn.zwqh.springboot.dao", DEBUG)
root(INFO, ["CONSOLE", "INFO_FILE", "ERROR_FILE"])
详细的 logback.groovy 语法可以参考 http://logback.qos.ch/manual/groovy.html 。logback 也提供了 logback.xml 转 logback.groovy 的在线工具,地址:http://logback.qos.ch/translator/asGroovy.html (include 标签未作解析,所以转换前把该标签去除,否则会报错)
logback.xml 配置说明
configuration
配置文件的根节点,主要包含以下三个属性:
- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
contextName
设置日志上下文名称,后面输出格式中可以通过定义 %contextName 来打印日志上下文名称。
property
配置文件的变量定义,name 代表变量的名称,value 代表变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${name}”来使用变量。
jmxConfigurator
开启 JMX 的功能,可以从默认配置文件,指定文件或URL重新配置登录,列出记录器并修改记录器级别。
JMX(Java Management Extensions,即 Java 管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX 可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。相关文档:http://logback.qos.ch/manual/jmxConfig.html
appender
日志输出组件,主要负责日志的输出以及格式化日志。常用的属性有name和class。
- name:appender组件的名称,后面给logger指定appender使用。
- class:appender的具体实现类。常用的有 ConsoleAppender、FileAppender、RollingFileAppender。
appender的具体实现类:
- ConsoleAppender:向控制台输出日志内容的组件,只要定义好encoder节点就可以使用。
- FileAppender:向文件输出日志内容的组件,用法也很简单,不过由于没有日志滚动策略,一般很少使用。
- RollingFileAppender:向文件输出日志内容的组件,同时可以配置日志文件滚动策略,在日志达到一定条件后生成一个新的日志文件。
Threshold filter
Logback 定义的日志打印级别的过滤器。可以过滤掉指定级别以下的日志不输出到文件。
encoder charset
表示对日志进行编码。
encoder pattern
- %d{HH:mm:ss.SSS} —— 日志输出时间。
- %thread —— 输出日志的进程名称,用方括号括起来。这个信息在 Web 应用以及异步任务处理中很有用。
- %-5level —— 日志级别,使用5个字符靠左对齐。
- %logger{36} —— 日志输出者的名字。
- %msg —— 日志消息。
- %n —— 换行符。
rollingPolicy
日志记录器的滚动策略。
- FileNamePattern:定义日志的切分方式,本文把每一天的日志归档到一个文件。
- MaxHistory:表示日志保留的天数,本文设置为30天。
logger
用来设置某一个包或者具体的某一个类的日志打印级别、以及指定。
- name:用来指定受此logger约束的某一个包或者具体的某一个类。
- level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前logger将会继承上级的级别。
使用mybatis的时候,sql语句只有在 debug 级别下才会打印
root
必选节点,用来指定最基础的日志输出级别,只有一个level属性
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。默认是 DEBUG 可以包含零个或多个元素,标识这个appender将会添加到这个logger。
示例代码
非特殊说明,本文版权归 朝雾轻寒 所有,转载请注明出处.
原文标题:Spring Boot 2.X(十四):日志功能 Logback
原文地址:https://www.zwqh.top/article/info/23
如果文章对您有帮助,请扫码关注下我的公众号,文章持续更新中...
Spring Boot 2.X(十四):日志功能 Logback的更多相关文章
- spring boot 常见三十四问
Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家. 问题一 Spring Boot.Spring MVC 和 Spring 有什么区别 ...
- Spring Boot系列教程十四:Spring boot同时支持HTTP和HTTPS
自签证书 openssl生成服务端证书,不使用CA证书直接生成 -in server.csr -signkey server.key -out server.crt # 5.server证书转换成ke ...
- Spring Boot教程(十四)快速入门
快速入门 本章主要目标完成Spring Boot基础项目的构建,并且实现一个简单的Http请求处理,通过这个例子对Spring Boot有一个初步的了解,并体验其结构简单.开发快速的特性. 系统要求: ...
- 学习Spring Boot:(十四)spring-shiro的密码加密
前言 前面配置了怎么使用 shiro ,这次研究下怎么使用spring shiro的密码加密,并且需要在新增.更新用户的时候,实现生成盐,加密后的密码进行入库操作. 正文 配置凭证匹配器 @Bean ...
- spring boot实战(第十二篇)整合RabbitMQ
前言 最近几篇文章将围绕消息中间件RabbitMQ展开,对于RabbitMQ基本概念这里不阐述,主要讲解RabbitMQ的基本用法.Java客户端API介绍.spring Boot与RabbitMQ整 ...
- Spring Boot 2.X(十二):定时任务
简介 定时任务是后端开发中常见的需求,主要应用场景有定期数据报表.定时消息通知.异步的后台业务逻辑处理.日志分析处理.垃圾数据清理.定时更新缓存等等. Spring Boot 集成了一整套的定时任务工 ...
- Spring Boot 2.X(十六):应用监控之 Spring Boot Actuator 使用及配置
Actuator 简介 Actuator 是 Spring Boot 提供的对应用系统的自省和监控功能.通过 Actuator,可以使用数据化的指标去度量应用的运行情况,比如查看服务器的磁盘.内存.C ...
- spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求
spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求 有半年多没有更新了,按照常规剧本,应该会说项目很忙,工作很忙,没空更新,吧啦吧啦,相关的话吧, 但是细想想 ...
- Java Spring Boot VS .NetCore (四)数据库操作 Spring Data JPA vs EFCore
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
随机推荐
- SpringBootSecurity学习(11)网页版登录之URL动态权限
动态权限 前面讨论用户登录认证的时候,根据用户名查询用户会将用户拥有的角色一起查询出来,自动实现判断当前登录用户拥有哪些角色.可以说用户与角色之间的动态配置和判断security做的非常不错.不过在配 ...
- MySQL-Access denied for user 'username'@'localhost' (using password: YES) 解决
使用navicat新建MySQL用户保存时提示 Access denied for user 'username'@'localhost' (using password: YES): 解决方法: 请 ...
- centos 下安装 Let’s Encrypt 永久免费 SSL 证书
功能 https证书,免费版,每三个月续签一次,可以用过脚本自动续签 安装 ssh登录到域名配置所在的主机(nginx,apache等) 安装git yum -y install git 输入 git ...
- Kubernetes 系列(七):持久化存储StorageClass
前面的课程中我们学习了 PV 和 PVC 的使用方法,但是前面的 PV 都是静态的,什么意思?就是我要使用的一个 PVC 的话就必须手动去创建一个 PV,我们也说过这种方式在很大程度上并不能满足我们的 ...
- 学习VBA
学习VBA VBA 就是 (Visual basic for Application) 用的比较多的是在Excel中处理数据,可以方便快捷地使用编程方式来对数据进行操作. VBA 数据类型 Integ ...
- mybatis - 通用mapper
title: 玩转spring-boot-mybatis date: 2019-03-11 19:36:57 type: "mybatis" categories: mybatis ...
- python句柄部分操作
```python3# 通过窗口类名.窗口标题获取控件句柄hwnd = win32gui.FindWindow("ClassName", "TitleName" ...
- Eclipse的Debug各种视图介绍(二)
本文链接:https://blog.csdn.net/u011781521/article/details/55000066 http://blog.csdn.net/u010075335/ar ...
- FFmpeg(六) 播放视频之GLSurfaceView显示RGB数据
一.播放视频说明 1.两种方式播放视频 ①shader播放YUV,后面再介绍. ②RGB直接显示数据,简单.性能差,用到FFmpeg的格式转换,没有shader效率高.本文介绍这个方式. 2.GLSu ...
- Solidity 编程实例--投票
Voting 投票 思路是为每张选票创建一个合约,每个投票选项提供一个短名称.合约创建者作为会长将会给每个投票参与人各自的地址投票权. 地址后面的人们可以选择自己投票或者委托信任的代表人替他们投票.在 ...