spring boot logback_SpringBoot集成logback后访问日志端点
问题描述
使用SpringBootAdmin(sba)监控Springboot服务时,配置了logback日志框架,按天滚动生成日志,此时在sba的日志监控页面出现404,如下图所示:
解决方案
查看浏览器控制台以及查询sba文档可知,此处日志的显示主要是由spirngBoot的端点/actuator/logprofile控制日志显示的,因此从访问/actuator/logprofile端点开始解决。
创建一个测试项目
环境
IDEA JDK 1.8 SpringBoot 2.3.3
引入meven依赖
<dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-actuatorartifactId>dependency><dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-webartifactId>dependency>
引入web依赖是由于/actuator/logfile端点只有在web下才会生效
修改application.yml文件
spring: application: name: actuator-logfilelogging: level: root: info com.lzm: debug pattern: file: "%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID}){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx" file: # path: ./logs/${spring.application.name} # path和name设置一个即可,name的优先级高 name: ./logs/${spring.application.name}.logmanagement: endpoints: web: exposure: include: "*" # <1>
<1>处的代码表示开放所有的web端点,不开放的话会导致访问不到/actuator/logfile端点
访问/actuator/logfile端点
启动测试项目,浏览器输入/actuator/logfile,出现如下所示结果:
此时/actuator/logfile端点可以正常访问。
添加logback
引入logback文件如下
<?xml version="1.0" encoding="UTF-8"?><configuration scan="true" scanPeriod="10 seconds"> <contextName>logbackcontextName> <property name="log.path" value="logs" /> <property name="log.name" value="actuator-logfile" /> <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" /> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%npattern> encoder> appender> <appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/${log.name}.logfile> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern> <charset>UTF-8charset> encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/${log.name}.%d{yyyy-MM-dd}.logfileNamePattern> <maxHistory>1maxHistory> rollingPolicy> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUGlevel> filter> appender> <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/${log.name}-error.logfile> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern> <charset>UTF-8charset> encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/${log.name}-error.%d{yyyy-MM-dd}.logfileNamePattern> <maxHistory>1maxHistory> rollingPolicy> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERRORlevel> <onMatch>ACCEPTonMatch> <onMismatch>DENYonMismatch> filter> appender> <springProfile name="dev"> <root level="debug"> <appender-ref ref="CONSOLE" /> <appender-ref ref="LOG_FILE" /> <appender-ref ref="ERROR_FILE" /> root> springProfile> <springProfile name="prod"> <root level="info"> <appender-ref ref="LOG_FILE" /> <appender-ref ref="ERROR_FILE" /> root> springProfile> <include resource="org/springframework/boot/logging/logback/console-appender.xml" /> <logger name="jdbc.sqlonly" level="OFF">logger> <logger name="jdbc.audit" level="INFO">logger> <logger name="jdbc.resultset" level="OFF">logger> <logger name="jdbc.connection" level="OFF">logger> <logger name="jdbc.sqltiming" level="OFF"> <appender-ref ref="CONSOLE" /> logger> <logger name="org.springframework.web.servlet" level="info" /> <logger name="org.springframework.data.mongodb.core" level="DEBUG"/>configuration>
修改logging配置
logging: level: root: info pattern: file: "%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID}){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx"# file: <1># path: ./logs/${spring.application.name}# name: ./logs/${spring.application.name}.log config: classpath:logback-custom.xml <2>
<1>处注释掉是由于使用了logback之后,file.path或者file.name已经失效了 <2>指定logback的配置文件
访问/actuator/logfile,出现如下界面:
此时竟然访问不到,这是什么鬼?
解决方案:
添加logback之后,需要额外添加一个配置,指定生成的日志文件才可以,配置如下:
management: endpoint: logfile: external-file: logs/${spring.application.name}.log
但是有个问题,logback中配置的是滚动生成日志文件,每天生成的日志文件都带有后缀,因此需要在logback配置中显式指名生成的文件名称:
`<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/${log.name}.logfile> <1> appender>
添加上述配置后,虽然当天的日志文件不带有日志后缀,但是第二天生成新的日志文件之后,今天的就会带有日期后缀,不影响日志查看的同时也能满足端点访问。
总结
使用logback时,要指定具体的日志文件后才能给logfile端点访问到,否则不能正确访问。
具体的测试代码已上传gitee(https://gitee.com/liaidai/springboot-actuator-logfile)
spring boot logback_SpringBoot集成logback后访问日志端点相关推荐
- Spring Boot:(六)默认日志logback配置解析
Spring Boot:(六)默认日志logback配置解析 前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日 ...
- Spring Boot + MDC 实现全链路调用日志跟踪
写在前面 通过本文将了解到什么是MDC.MDC应用中存在的问题.如何解决存在的问题 MDC介绍 简介: MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j .l ...
- Spring Boot整合ELK 处理为服务日志,妙!
你知道的越多,不知道的就越多,业余的像一棵小草! 成功路上并不拥挤,因为坚持的人不多. 编辑:业余草 developer.ibm.com 推荐:https://www.xttblog.com/?p=5 ...
- Spring Boot + Shiro 集成
2019独角兽企业重金招聘Python工程师标准>>> Spring Boot + Shiro 集成 Shiro 是一个流行的 Java 安全框架. 其实 Spring 有一个 Sp ...
- 学习Spring Boot:(四)应用日志
前言 应用日志是一个系统非常重要的一部分,后来不管是开发还是线上,日志都起到至关重要的作用.这次使用的是 Logback 日志框架. 正文 Spring Boot在所有内部日志中使用Commons L ...
- Spring Boot 快速集成第三方登录功能
Spring Boot 快速集成第三方登录功能 前言 此 demo 主要演示 Spring Boot 项目如何使用 史上最全的第三方登录工具 - JustAuth 实现第三方登录,包括 QQ 登录.G ...
- 【Spring Boot组件集成实战】集成Kaptcha谷歌验证码
更多精彩内容,请访问 Spring Boot组件集成实战专栏 ! 推荐项目:一套基于Spring Boot+Layui的内容管理系统/快速开发脚手架(含完整的开发文档.演示网址等) 文章目录 1. 验 ...
- SpringBoot2.x系列教程(六十六)Spring Boot快速集成RocketMQ实战教程
前言 RocketMQ是目前主流的消息中间件之一,并且自身就支持分布式功能.最初由阿里巴巴团队开发,并且经历过双十一等海量消息场景的考验,后捐赠给Apache开源基金会,这也是为什么我们经常听说Roc ...
- Spring Boot 工程集成全局唯一ID生成器 Vesta
2019独角兽企业重金招聘Python工程师标准>>> 本文内容脑图如下: 文章共 760字,阅读大约需要 2分钟 ! 概 述 在前一篇文章 <Spring Boot工程集成全 ...
最新文章
- 35 w年薪,入职CV算法岗,我一个双非本科生如何做到的?
- 查看 -- tree
- 伯克利论断:Serverless 才是云时代的主宰
- springboot自定义配置文件
- 【Android RTMP】RTMPDump 封装 RTMPPacket 数据包 ( 关键帧数据格式 | 非关键帧数据格式 | x264 编码后的数据处理 | 封装 H.264 视频数据帧 )
- 《那些年啊,那些事——一个程序员的奋斗史》——38
- 辰星计划2021 | 旷视春季实习生招募—空中宣讲会第二弹来了!
- 创建office一直转圈_Windows写字板出现广告条幅:推荐用户使用在线版Office
- Redis 6.0 源码阅读笔记(1) -- Redis 服务端启动及命令执行
- android学习心得之Activity
- 【Codeforces Round #576 (Div. 2)】Rectangle Painting 1【记忆化搜索】
- 关于TCP/IP协议
- Unity中使用VideoPlayer控制播放暂停进度条
- 数学建模常用的四大模型
- 远程连接服务器的命令工具,windows系统如何实现远程命令?远程命令工具您选哪个?...
- testflight怎么做版本更新_TestFlight
- python实现屏幕截图
- 关于win11兼容性视图模式
- 统筹规划题:“服装店4个小组15天最多做多少套衣服裤子”的思路
- 星河万里 一路“童”行
热门文章
- 又一所“双一流”清退超33名博士生!今年已有超1300名硕博研究生被清退
- OCRNet: 目标区域上下文信息的特征表达 | ECCV 2020
- 华为为什么要“囤”700名数学家?中科院院士告诉你!
- flannel原理初探针对0.1.0版本
- Vue之Todolist案例和ES6语法
- 一文看懂自动驾驶关键技术
- 链表问题9——复制含有随机指针节点的链表(进阶)
- 基于docker+gunicorn部署sanic项目
- FBI很气愤:黑了CIA的熊孩子又回来了
- Entity Framework中的Migration问题