【SSM基础】Logback日志管理
【SSM基础】Logback日志管理
其他文章: bookcase微服务实战
1、前言
这篇我们说下日志管理,业界常用的日志管理一共有几种: java.util.Logging,Log4j,Log4j2,Logback,Slf4j。
各个日志管理的关系。具体可以查看博客: https://www.cnblogs.com/suger43894/p/9543685.html
其中 java.util.Logging是原生的日志工具,log4j 框架比较旧, logback是在log4j的优化,log4j2是对log4j的重构并吸收了logback的功能。 slf4j 是对常用的几种日志的门面封装。
logback 官网是这样介绍的,Logback 旨在作为流行的 log4j 项目的继承者。它是由 log4j 的创始人 Ceki Gülcü 设计的。
2、应用
Logback 的基本架构足够通用,可以在不同的情况下应用。目前,logback分为三个模块,logback-core、logback-classic和logback-access。
核心模块为其他两个模块奠定了基础。经典模块扩展了核心。经典模块对应于 log4j 的显着改进版本。Logback-classic 原生实现了SLF4J API,因此您可以轻松地在 logback 和其他日志系统之间来回切换,例如 JDK
1.4 中引入的 log4j 或 java.util.logging (JUL)。第三个模块access与 Servlet 容器集成以提供 HTTP 访问日志功能。
2.1、基本应用
- 添加依赖
Logback也是SpringBoot的默认日志框架,可以直接使用,具体spring-boot-starter中依赖为:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId><version>2.3.7.RELEASE</version><scope>compile</scope>
</dependency>
- 日志测试
@RestController
@RequestMapping("/book")
@Api(value = "书籍管理", tags = "书籍管理")
@RequiredArgsConstructor
public class BookController {private static Logger logger = LoggerFactory.getLogger(BookController.class);private final IBookService bookService;@GetMapping(value = "/getByName")@ApiOperation(value = "根据名称查询书籍信息", notes = "根据名称查询书籍信息")@ApiImplicitParams({@ApiImplicitParam(name = "name", value = "书籍名称", required = true)})public IPage<Book> getBookById(@RequestParam String name) {logger.info("logger.info");logger.warn("logger.warn");logger.error("logger.error");logger.trace("logger.trace");logger.debug("logger.debug");return bookService.selectBooksByName(name);}
}
通过swagger 访问之前的数据,就可以看到打印的日志:
2022-04-07 15:26:16.314 INFO 16212 --- [nio-8081-exec-9] com.fans.bk1.controller.BookController : logger.info
2022-04-07 15:26:16.314 WARN 16212 --- [nio-8081-exec-9] com.fans.bk1.controller.BookController : logger.warn
2022-04-07 15:26:16.314 ERROR 16212 --- [nio-8081-exec-9] com.fans.bk1.controller.BookController : logger.error
日志级别分别对应 trace > debug > info > warn > error,具体可以查看class : ch.qos.logback.classic.Level
这里可以得到结论,springboot 默认的日志级别是info级别。
private static Logger logger = LoggerFactory.getLogger(BookController.class);
也可以使用lombok注解@slf4j代替。lombok 使用的时候使用log 命名当前class Logger对象。
注意:
例如使用的时候我们可以通过 log.info 输出日志,这个时候可以编写String.format方式的写法:
第二种写法是第一种效率的30倍。
The following two lines will yield the exact same output. However, in case of a disabled logging statement,the second variant will outperform the first variant by a factor of at least 30.logger.debug("The new entry is "+entry+".");
logger.debug("The new entry is {}.", entry);
所以我们日常种添加日志要使用{} 代替要输入的变量,并通过逗号依次输入。
2.2、扩展应用
开发工作中的日志基本工作日志已经足够使用,我们可以通过日志进行开发中的问题定位。
但是我们还有一些需求是默认配置无法实现的:
- 开发过程中想要打印出SQL,如何配置。
- 我们完成开发部署到服务器,需要定位运行中的异常问题,这个时候需要日志输出到文件中。
- 服务器中日志过多,占用磁盘过多的空间,日志需要进行压缩。
- 我们想调用自定义的服务,或者第三方服务,例如通过kafka写入ES集群,用于大数据分析。
以上logback 都可以实现,当logback进行扫描的时候,会先找classpath下,logback-test.xml,然后找logback.xml。
而SpringBoot进行封装的时候,我们可以通过logback-spring.xml进行配置。其中的内容是相同的。
此处展示当前配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 定义日志文件名称,与工程名一致 --><property name="APP_NAME" value="bookcase" /><!-- 定义日志的根目录 --><property name="LOG_HOME" value="./logs" /><!-- 正常文件输出设置 --><!-- 样例:[ INFO ] [2019-01-19 15:15:59] org.apache.tomcat.util.net.NioSelectorPool [179] - Using a shared selector for servlet[ %-5level] [%date{yyyy-MM-dd HH:mm:ss}] %logger{96} [%line] %msg%n、level日志级别 时间 打印日志所处包.类 出现代码行 日志信息--><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><File>${LOG_HOME}/${APP_NAME}.log</File><!-- 配置日志所生成的目录以及生成文件名的规则 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><FileNamePattern>${LOG_HOME}/${APP_NAME}/${APP_NAME}-%d{yyyy-MM-dd}-%i.zip</FileNamePattern><maxFileSize>10MB</maxFileSize><!-- 日志文件过大会使的编辑器打开非常慢,因此设置日志最大50MB --><maxHistory>30</maxHistory><!-- 保存30天 --><totalSizeCap>10GB</totalSizeCap><!-- 总日志大小 --></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>[ %-5level ] [%date{yyyy-MM-dd HH:mm:ss}] [%thread-%logger{96}-%mdc{client}-%line line] - %msg%n</pattern><charset>UTF-8</charset> <!-- 此处设置字符集,防止中文乱码 --></encoder><!-- 不接受错误日志 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>DENY</onMatch><onMismatch>NEUTRAL</onMismatch></filter><!-- 不接受警告日志--><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>WARN</level><onMatch>DENY</onMatch><onMismatch>NEUTRAL</onMismatch></filter><!--如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。--><prudent>false</prudent></appender><!-- 异常文件输出设置,将异常堆栈另外保存一份到单独的文件中,方便查找 --><appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"><File>${LOG_HOME}/${APP_NAME}.error.log</File><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><FileNamePattern>${LOG_HOME}/${APP_NAME}/${APP_NAME}.error-%d{yyyy-MM-dd}-%i.zip</FileNamePattern><maxFileSize>50MB</maxFileSize><maxHistory>30</maxHistory><totalSizeCap>10GB</totalSizeCap><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><!-- 文件达到 最大128MB时会被压缩和切割 --><maxFileSize>128 MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>[ %-5level ] [%date{yyyy-MM-dd HH:mm:ss}] [%thread-%logger{96}-%mdc{client}-%line line] - %msg%n</pattern><charset>UTF-8</charset> <!-- 此处设置字符集 --></encoder><!-- 过滤器,可以过滤掉不符合条件的日志,INFO及以上的日志被处理,其它的拒绝,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日志将立即被抛弃不再经过其他过滤器;返回NEUTRAL,有序列表里的下个过滤器过接着处理日志;返回ACCEPT,日志会被立即处理,不再经过剩余过滤器。--><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只接受错误日志 --><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>NEUTRAL</onMismatch></filter><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只接受警告日志 --><level>WARN</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!--控制台输出的格式设置 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><!-- 控制台输出的日志 的格式 --><encoder><pattern>[%(%-5level)] %([%date{yyyy-MM-dd HH:mm:ss}]) %([%logger{0}]) - %msg%n</pattern><charset>UTF-8</charset> <!-- 此处设置字符集 --></encoder><!-- 只是DEBUG级别以上的日志才显示 --><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>DEBUG</level></filter></appender><!-- <logger name="com.fans.bk1.mapper" level="DEBUG" />--><root level="debug"><appender-ref ref="CONSOLE" /></root><root level="info"><appender-ref ref="FILE" /><appender-ref ref="FILE_ERROR" /></root>
</configuration>
- xml 标签解析
- configuration 是文档配置根节点,scan=true 当配置文件发生变动,会重新加载,时间范围是scanPeriod,debug: 当此属性设置为true时,将打印出logback内部日志信息,默认false。
- property 配置key-value 常量,可以通过${key}在当前文档种引用value。
- root 是根节点,属性level设置日志级别,当子节点未设置级别时使用。通过appender-ref 指向子节点。
- appender 时输出日志指向地址,可以是console,file等,这里只列常用的console和file。输出的时候异常日志和正常日志分开,并根据文件时间和大小进行分割文件。具体可以参考上述示例。
- logger 节点可以自定义级别,其中属性name的值可以是class或者package,level属性设置class或package的日志级别。logger可以和root一样包含appender-ref标签。
3、总结
简单开发测试使用默认级别即可,正式项目中还是需要配置自定义配置文件。
需要配置自定义包级别,可以使用logger标签。
编写日志的时候使用 {} 代替变量输入。
【SSM基础】Logback日志管理相关推荐
- SSM配置logback日志
SSM配置logback日志 添加logback,slf4j依赖 <!--日志--> <dependency><groupId>org.slf4j</grou ...
- SpringBoot基础篇日志管理之logback配置文件
1.美图 2.概述 SpringBoot默认选用logback进行日志管理,前一篇讲述了默认配置日志的参数,然而这些内容比较初级,并不一定能满足我们更加特殊的需求(比如输出到多个不同的配置文件,不同的 ...
- Linux基础:日志管理
一.日志管理简介 1. 日志服务: 在CentOS 6.x中日志服务已经由rsyslogd取 代了原先的syslogd服务.rsyslogd日志服 务更加先进,功能更多.但是不论该服务 的使用,还是日 ...
- SpringBoot基础篇日志管理之默认配置
1.美图 2.概述 创建一个SpringBoot项目,根据官方文档的说明,默认选择的是Logback来记录日志:logback也是相对来说用的比较多的框架了,下文全都默认以logback作为日志输出框 ...
- java 如何去掉http debug日志_Spring Boot手把手教学(3):从零配置logback日志
前言 使用logback我们可以自定义控制台日志输出,可以实现对不同日志不同级别打印到不同的文件中,可以对日志进行归档保存,并定时删除: 对于一个应用来讲,一个好的日志系统,对于对问题的追溯有很大的帮 ...
- Spring Boot 2.x的默认日志管理与Logback配置详解
前沿技术早知道,弯道超车有希望 积累超车资本,从关注DD开始 Spring Boot在所有内部日志中使用Commons Logging,但是对底层日志的实现是开放的.在Spring Boot生态中,为 ...
- logback日志pattern_Logback日志基础及自定义配置代码实例
Logback日志基础配置 logback日志配置有很多介绍,但是有几个非常基础的,容易忽略的.下面是最简单的一个配置,注意加粗的描述 ${log.path}/errorlog.log %d{yyyy ...
- LINUX学习基础篇(三十五)日志管理
LINUX学习基础篇(三十五)日志管理 日志管理 系统中常见的日志文件 日志文件格式 rsyslogd服务的配置文件 日志轮替 logrotate配置文件 配置文件夹 /etc/logrotate.d ...
- java程序日志管理
初入软件开发这一行的人,可能对日志管理的概念并不是很明确,大概是由于经验所限,以至于根本还考虑不到这个问题. 而从某种意义上来说,日志管理实际上也不需要初入这一行的人来管,他们只需要负责实现自己的主要 ...
最新文章
- 大量数据转移_大量数据
- 吴恩达深度学习 —— 2.16 关于python/numpy向量的说明
- nagios监控oralce数据库的表空间大小
- 微型计算机原理设计存储系统,微机原理存储器设计讨论报告
- 进程管理工具 htop
- C语言中数组变量和指针变量
- VSCode调试Python时终端输出中文乱码解决方法2
- css中正确设置微软雅黑字体
- 收款收据设计html,统一收款收据打印软件怎么制作收据 制作打印的方法
- 终端数据防泄漏解决方案
- C/C++ getcwd 获取项目的运行路径
- PAT乙级—1053. 住房空置率 (20)-native
- 基于Spring+SpringMVC+MyBatis博客系统的开发教程(十六)
- 大型网站具备的9大特点
- setsockopt用法描述
- 关于如何通过信息系统监理师的自我心得
- Ubuntu 20.04安装使用Rime双拼输入法
- OV2SLAM 安装运行
- 最新传奇木马及其防范全攻略
- 需求调研报告模板_2020年全球TAC薄膜行业市场现状调研报告-国内需求增速超世界水平...