关于springboot统一日志管理的信息

语宇社区 情感日志 123 0

日志技术-SpringBoot使用日志

tips:Ctrl + F快速拿亏定位所需内容阅读吧。

注意: SpringBoot默认的日志门面是slf4j-api,日志实现是logback-core,是 SLF4J 加 Logback 的组合。

1、快速入门

1、自定义logger对象日志级别

2、指定控制台输出消息格式

[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread]=== %m%n

[左对齐5:日志级别] 日期:年-月-日 时:分:秒 类信息 [线程信息]=== 日志信息 换行

3、指定存放日志文件的具体路径

Ⅰ 指定路径及文件名形式: logging.file.name=/logs/springboot.log;

Ⅱ 指定日志存放路径,使用默认文件名spring.log: logging.file.path=/logs/

4、指定配置

给类路径下放上每个日志框架自己的配置文件,SpringBoot就不使用默认配置。

此处我们已Logback为例,如下:

可以看到,此时控制台输出的日志为红色,日期格式也多了毫秒,符合logback.xml配置,如下:

5、使用SpringBoot解析日志配置(灵活切换环境配置)

非常关键的一点,需要使用 logback-spring.xml 、 log4j2-spring.xml 命名的配置文件才能生效。

以下案例我们以logback-spring.xml为例,如下:

在appender内的encoder属性中我们配置了 springProfile 相关的喊顷内容。

如消渗神何我们dev的配置 [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread]--- %m%n" ,如下:

6、将日志切换为log4j2(经常使用)

Ⅰ 排除 Logback 的日志实现: spring-boot-starter-logging ;

Ⅱ 使用 log4j2 的日志启动器: spring-boot-starter-log4j2 。

以上即为SpringBoot使用日志的全部内容,感谢阅读。

Spring Boot - 日志记录

[TOC]

Spring Boot 内部使用的日志框架为 Commons Logging ,但是 Commons Logging 的内部具体实现可以由用户自行指定。

默认已提供了对 Java Utils Logging , Log4J2 和 Logback 日志库的相关配置。

无论选择以上哪一个日记库,Spring Boot 都预置了将日志输出到控制台以及可选的文件上。

如果项目配置使用起步依赖(Starters),那么默认情况下,Spring Boot 使用的日记记录库为 Logback。

因此,本文主要介绍在 Spring Boot 中使用 Logback 进行日志记录。

前面已经介绍过,Spring Boot 默认使用的日志框架为 Apache Commons Logging 。

在 Spring 4.x(也即 Spring Boot 1.x )时,我们需要哗燃瞎手动进行依赖导入。

但是在 Spring 5.x(也即 Spring Boot 2.x )时,该依赖由 Spring Framework 模块 spring-jcl 提供。

当我们项目使用各种起步依赖(Starter)时, spring-jcl 模块包含在 spring-boot-starter-logging 中,理论上我们需要手动导入该依赖,如下所示:

但实际上我们无需手动导入该起步依赖,因为几乎每一个起步依赖段租(比如: spring-boot-starter , spring-boot-starter-web ...)都内置了 spring-boot-starter-logging 。

因此,当我们使用起步依赖创建 Spring Boot 项目时,日志功能开箱即可用。

且日记框架内部默认实现采用 Logback。

还有其他一些设置日志级别的方法,这里就不展开阐述了。

更多内容可参考: Log Levels , zero-configuration-logging

Spring Boot 支持多种不同的日志系统实现,可以通过导入相应的依赖库从而在运行时激活对应的日志系统,并且可以通过在 classpath 或 logging.config 属性指定一个配置文件,实现自定义系统日志配置。

对于不同的日志系统,Spring Boot 会默认加载的日志配置文件如下表所示:

注 :Spring Boot 建议我们使用带有 -spring 后缀的作为日志配置文件名称(即相较于使用 logback.xml ,更建议使用 logback-spring.xml )。

如果使用标准配置路径,Spring 无法完全控制日志初始化过程(因为 logback.xml 的加载时间非常早,导致一些扩展功能无法在其内进行配置,而此时使用 logback-spring.xml 即可解决这个问题)。

我们主要关注的是 Logback 的配置文件内容。

要对 Logback 添加配置文件,只需创建 resources/logback-spring.xml ,然后对该文件进行配置即可,其基本配置内容如下:

注 :日志配置文件路径也可以在 application.properties 中进行指定:

简单对上述 logback-spring.xml 的配置内容进行一些介绍:

更多 Logback 配置文件内容,请参考: A Guide To Logback

可以通过在日志配置文件中使用标签 springProfile 来创建不同的环境日志配置。

比如,我们可以通过定义生产环境 prod ,测试环境 test 和开发环乱空境 dev 来实现不同的日志输出,如下所示:

然后,启动服务的时候,设置相应环境的 profile 即可。

比如,可以直接通过命令指定运行环境 profile,如下:

Spring Boot 多环境配置内容,可参考: Spring Boot - 多环境配置

springboot 动态日志管理(actuator)

引入依赖

配置文件添加

management.endpoints.web.exposure.include= loggers

之后访问

即可看或搭到每个文件的日志级别

查看配梁某个目录的日志级别

]( {目录名}

可以配置指定目录的衫卖拿日志级别

post请求修改指定目录日志级别:

{目录名}

请求提

再次查看此目录的日志级别发现已被修改

]( {目录名}

SpringBoot接入轻量级分布式日志框架(GrayLog)

在文章正式开始之前,我分享下我以前负责过的一个系统,它的架构如下:

每次当我查问题的时候,我都能把问题初步定位在 逻辑层 ,但为了能给业务方交代,我需要 给证据 业务方面(日志信息就是铁证)。

一个请求肯定是被这8台机器内的某一台处理,但具体是哪一台,我不知道。所以,我需要上每台机器上 grep 一把日志,然后才能找出对应的日志证明我的分析。

有的时候,可能 接入层 也需要一起参与进去,就排查一个问题,人都傻了了(翻看日志的时间占用了太久了)。

后来啊,看了同事的骚操作(在 item2 编写脚本: 快速登录堡垒机 (免去输入账号和密码信息),根据应用服务器数量来切割窗口并且切禅陵颤换到对应的日志目录)。说白了就是 一键登录 多台应用服务器。嗯,这查日志的速度比起以前又快了好多。

再后来,公司运维侧又主力推在 Web页面 上登录应用服务器( 自动登录堡垒机 ),这能省去编写脚本( 支持批量操作 )。但从当时的体验上,没有问题 item2 访问得流畅(总感觉卡卡的)。

不过还有问题,因为我们在很多时候是不知道在 info / warn / error 哪个文件下。很多时候只能一个一个文件去查,虽然说可以直接查 通配符汪唤 一把查,如果日志过大,带来停顿时间也挺烦的。

系统一旦被问到业务问题,查日志的频率实在是太高了。于是我在某个Q规划的时候是想自己把日志信息写入到 搜索引擎 ,顺便学习下搜索引擎的知识。然后这个规划被组内的某个大佬看到了,在底下评论: 要不来试试Graylog ?

原来组内本身就在维护了一个 日志框架 ,只是我不知道...于是我接入了 Graylog 日志,工作效率杠杠提高了, 凭借这个事情吹了一个Q 。

自从接入了之后,我就没登录过应用服务器了,有次差点连 grep 都不会写了。

说起ELK,即便没用过肯定也听说过这玩意了,在后端是真的流行。这次austin接入一个比较轻量级的ELK框架: Graylog

这个框架我感觉蛮好用的,作为 使用方 接入起来 异常简单 (我估摸运维应该也挺简单的,很多用Graylog是直接发UDP到Server,不用在机器上装agent收集日志)

官方文档:

据我了解,有相当多的企业使用它来 查看日志和业务监控告警 ,这篇文章我就直接让你们体验体验吧。

老样子,直接上docker-compose,如果一直跟着我的步伐,应该对着不陌生贺败了。 docker-compose.yml 的内容其实我也是抄官网的,这里还是贴下吧(就不用你们翻了)

这个文件里唯一需要改动的就是 ip (本来的端口是 9000 的,我由于已经占用了 9000 端口了,所以我这里把端口改成了 9009 ,你们可以随意)

嗯,写完 docker-compose.yml 文件,直接 docker-compose up -d 它就启动起来咯。

启动以后,我们就可以通过 ip:port 访问对应的Graylog后台地址了,默认的账号和密码是 admin/admin

随后,我们配置下 inputs 的配置,找到 GELF UDP ,然后点击 Launch new input ,只需要填写 Title 字段,保存就完事了(其他不用动)。

嗯,到这里,我们的GrayLog设置就完成了。

还记得我们 austin 项目使用的日志框架吗?没错,就是logback。我们要把日志数据写入Graylog很简单,只需要两步:

1、引入依赖:

2、在 logback.xml 配置graylog相关的信息:

在这个配置信息里,唯一要改的也只是 ip 的地址,到这里接入就完毕了,我们再打开控制台,就能看到日志的信息啦。

懂点GrayLog查询语法:这块我日常来来去去其实就用几个,我来展示下我平时用的吧。如果觉得不够,再去官网文档捞一把就完事了:

1、根据字段精确查询: full_message:"13788888888"

2、查询错误日志信息: level_name:"ERROR"

3、组合多字段查询: level_name:"INFO" AND full_message:"13788888888"

在接入的时候,仔细的小伙伴可能会发现我这边在Input的时候选择的是 GELF ,然后在引入Maven依赖的时候也有 GELF 的字样。那 GELF 是啥意思呢?

这块在官网也有给出对应的解释: The Graylog Extended Log Format (GELF) is a log format that avoids the shortcomings of classic plain syslog

详细资料:

GELF 是一种日志格式,能避免传统意义上的 syslogs 的一些问题,而我们引入的Maven依赖则是把日志格式化成 GELF 格式然后append到GrayLog上。

前几天有个老哥在GitHub给我提了个 pull request 关于 swagger 的,我昨天把他 merge 了,也升级了下 swagger 的版本。

之前我没用过 swagger 类似的文档工具,就这次 pull request 我也去体验了下 swagger 。

在初次的体验感觉是不错的:它能把项目的所有接口的 文档信息 都能在一个页面上 统一管理 ,并且就能直接通过 样例参数 直接发送请求。通过注解的方式来进行编写文档,也不用担心代码改了然后忘了更新文档这事。

但是,后来我配置好对应的参数信息文档,再在 swagger-ui 体验了下, 发现是真滴丑 ,看到这 ui 我还是阶段性放弃吧。

swagger 的竞品还有好几个,我看 ui 貌似都要比 swagger 好看。不过,austin项目的 主要接口就只有一个 ,我作为熟练掌握的 markdown 工程师能轻松胜任文档工作,就没再继续体验别的竞品了。

Spring Boot中的日志配置

在默认情况下Spring Boot只会在控制台输出日志。

如果不用复杂的功能,只是希望能在文件中输出同样辩昌的日志。

只需要在application.properity加入如下配置:

要想更加激灶配定制化地进行日志输出,需要自己写logback.xml配置文件,在resources目录下新建logback.xml文件,spring-boot会自动读取该文件,而弃用默认配置。

一种配置,如下所示。其中配置了控制台、文件两种日志输出方式。并且文件时按天另存为新文件,并个性化设明指置了日志输出格式。同时也做到了给具体包设置不同的日志级别。

springboot怎么设置日志

spring boot内部使用Commons Logging来记录日志,但也保留外部接口可以让一些日志框架来进行实现,例如Java Util Logging,Log4J2还有Logback。如果你想用某一种日志框架来进行实现的话,就必须先配置,默认情况下,spring boot使用Logback作为日志实现的框架。

1.配置控制台日志的debug级别

默认情况下,spring boot从控制台打印出来的日志级别只有ERROR, WARN 还有INFO,如果你想要打印debug级别的日志,可以通过application.properites配置debug=true

debug=true1

在生产环境环境下,你可以通过命令行进行配置日志的debug级别

java -jar C:\Users\Administrator\Desktop\xx\demo.jar --debug1

3.配置logging.level.*来具体输出哪些包的日志级别

logging.level.root=INFO

logging.level.org.springframework.web=DEBUG

logging.level.org.hibernate=ERROR123

2.将日志输出到文件中

默认情况下spring boot是不将日志输出到日志文件中,但你可以通过在application.properites文件中配置logging.file文件名称和logging.path文件路径,将日志输出到文件中

logging.path=F:\\demo

logging.file=demo.log

logging.level.root=info123

这里需要注意几点:

这里若不配置具体的包的日志级别,日志文件信息将为空

若只配置logging.path,那么将会在F:\demo文件夹生成一个日志文件为spring.log

若只配置logging.file,那将会早神在项目的当前路径下生成一个demo.log日志文件

logging.path和logging.file同时配置,不会有在这个路径有F:\demo\demo.log日志生成,logging.path和logging.file不会进行叠加

logging.path和logging.file的value都可闹羡以是相对路径或者绝对路径

这就是基础的日志配置,液睁拍可以直接在application.properties配置,我们还可以在classpath路径下,通过定义具体的日志文件来配置

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~