首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SpringBoot -糟糕的日志记录实践:使用系统输出流

Spring Boot是一个开源的Java框架,用于快速构建独立的、基于Spring的应用程序。它简化了Spring应用程序的配置和部署过程,提供了一种约定优于配置的方式来开发应用程序。

糟糕的日志记录实践是指在Spring Boot应用程序中使用系统输出流(System.out)进行日志记录的做法。这种做法是不推荐的,因为它存在以下问题:

  1. 缺乏灵活性:使用System.out进行日志记录意味着无法灵活地配置日志级别、输出格式等。无法根据不同的环境(如开发、测试、生产)进行不同的日志配置。
  2. 性能问题:System.out是标准输出流,它会将日志输出到控制台。这种方式会导致大量的IO操作,对性能有一定的影响。
  3. 不可扩展:使用System.out进行日志记录无法方便地扩展到其他日志框架或工具。如果需要切换到其他日志框架,就需要修改大量的代码。

相比于使用System.out进行日志记录,推荐使用Spring Boot提供的日志框架,如Logback或Log4j2。这些日志框架具有以下优势:

  1. 灵活配置:可以通过配置文件或代码来配置日志级别、输出格式、日志文件路径等。可以根据不同的环境进行不同的配置。
  2. 高性能:这些日志框架经过优化,能够提供较高的性能。它们支持异步日志记录,可以减少IO操作对性能的影响。
  3. 可扩展性:这些日志框架提供了丰富的扩展点和插件机制,可以方便地扩展到其他日志框架或工具。可以根据需求选择适合的插件,如日志文件切割、日志归档等。

在使用Spring Boot进行日志记录时,可以通过在配置文件(如application.properties或application.yml)中配置相关的日志属性,例如:

代码语言:txt
复制
# 使用Logback作为日志框架
spring.main.log-startup-info=false
logging.level.root=info
logging.file=/path/to/logfile.log

上述配置中,spring.main.log-startup-info用于控制是否在启动时输出日志信息,logging.level.root用于设置根日志级别,logging.file用于指定日志文件路径。

除了配置文件,还可以通过在代码中使用相关的注解或API来进行日志记录,例如:

代码语言:txt
复制
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@RestController
public class MyController {
    private static final Logger logger = LoggerFactory.getLogger(MyController.class);

    @GetMapping("/hello")
    public String hello() {
        logger.info("Hello, World!");
        return "Hello, World!";
    }
}

上述代码中,使用了SLF4J作为日志门面,通过LoggerFactory.getLogger方法获取Logger对象,然后使用logger.info方法记录日志。

总结起来,糟糕的日志记录实践是指在Spring Boot应用程序中使用System.out进行日志记录的做法。相比之下,推荐使用Spring Boot提供的日志框架,如Logback或Log4j2,它们具有灵活配置、高性能和可扩展性的优势。在使用Spring Boot进行日志记录时,可以通过配置文件或代码来配置日志属性,并使用相关的注解或API进行日志记录。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux下日志文件监控系统Logwatch的使用记录

在维护Linux服务器时,经常需要查看系统中各种服务的日志,以检查服务器的运行状态,如登陆历史、邮件、软件安装等日志。...那么如何主动、集中的分析这些日志,并产生报告,定时发送给管理员就会显得十分重要。对于运维人员来说,发现一款能把原始的日志文件转换成更人性化的记录摘要的工具,将会受益无穷。...logwatch的主要目的是生成更易于使用的日志摘要,并不是用来对日志进行实时的处理和监控的。...只能知道被记录下来的一段时间之内的特定事件,如果想要知道精确的时间点的信息,就不得不去查看原日志文件了。...7)Detail = High 日志详细度, 可选项 Low , Med , High , 或是 0-10数字 8)Print = No 可选项, Yes会被打印到系统标准输出, 并且不会以邮件的形式发送到

5.8K111

ELK日志监控分析系统的探索与实践(一):利用Filebeat监控Springboot日志

不同的服务部署在不同的服务器上,需要在Xshell等工具上打开多个窗口来回切换查看 查看日志需要会一些的常用的Linux命令 刚好前段时间学习和研究过ELK日志分析系统的相关知识,不仅可以用来分析Nginx...、Apache、MySQL等工具和服务的日志,还可以用于分析Springboot项目生成的服务日志,另外结合Metricbeat工具也可以用来监控服务器内存、CPU、磁盘等相关指标。...,创建索引 Kibana日志面板使用 一、什么是ELK ELK 是elastic公司提供的一套完整的日志收集、展示解决方案,是三个产品的首字母缩写,分别是ElasticSearch、Logstash...事件日志 Auditbeat 审计数据 Heartbeat 运行心跳监控 二、ELK收集Springboot项目日志的实现原理 Springboot服务产生的日志,会将日志数据保存到磁盘中的.log文件中...Kibana调用Elasticsearch进行日志数据的查询; ELK+Filebeat可用于Springboot及微服务日志的监控,Filebeat部署在需要采集日志的各个服务器上,负责监听指定log

1.7K21
  • 使用 e.printStackTrace() 输出日志是怎样让系统崩掉的!

    使用 e.printStackTrace() 输出日志是怎样让系统崩掉的! 从方法 printStackTrace 自注释上来看,该方法是输出打印异常的堆栈跟踪信息的。...由于,我们从学习 Hello World 的那一天开始,老师就是使用 printStackTrace 输出错误日志的,导致很多人一直错误的使用它并沿用至今!...2、增加内存,增加非堆内存,增加字符串常量池的内存。 3、禁止使用 e.printStackTrace() 输出日志。 4、提升系统的容错能力。...除此之外,e.printStackTrace() 是将日志输出到控制台,如果我想将日志输出到文件,或者第三方服务器上,它就无能为力了。...而如果你的系统中大量的使用了 e.printStackTrace(),那么改动的时间和代价就太大了! 另外,也有不少人喜欢使用 System.out.println() 输出日志。

    3.7K10

    使用Hue创建Ssh的Oozie工作流时重定向输出日志报错分析

    Ssh的Oozie工作流》。...但当重定向输出日志时,会出现异常。...Ssh Action的Oozie工作流创建如下: 运行异常日志如下,提示:代码块部分可以左右滑动查看噢 2.解决方法 通过上述方式创建Ssh Action工作流主要是由于”>> /tmp/out.log...在使用Hue创建Ssh Action的Oozie工作流直接在Ssh command中输入命令重定向会导致运行失败,可以使用在执行命令的目标服务使用Shell脚本的方式实现该功能。...这里Fayson在做测试的时候发现,在命令行前面添加”;”也可以实现重定向输出日志,实现如下(这种实现方式比较诡异,仅供参考): 为天地立心,为生民立命,为往圣继绝学,为万世开太平。

    1.2K100

    那个藏得最深的Bug,怎么把我折磨疯的?

    好事发生  这里先给大家推荐一篇实用的好文章:《SpringBoot多租户架构,轻松驾驭复杂业务场景!》...来自作者:bug菌  这篇文章作者详细解读SpringBoot多租户架构在复杂业务场景下的应用。...根据用户反馈的时间点和操作步骤,我开始翻阅系统的运行日志。很快,我发现了以下情况: 所有操作记录都显示正常:从前端发起请求,到后端写入数据库,每一步都没有异常。...程序代码逻辑看上去没有问题,日志也没提示任何错误,难道是某种神秘力量在作祟?更糟糕的是,用户反馈的问题并不是每次都能复现,像个幽灵一般,毫无规律可循。  ...日志优化:记录每次缓存更新和持久化操作,便于定位类似问题。 压测覆盖:在测试环境中加入高并发场景模拟,防止类似Bug再次出现。

    12531

    SpringBoot之SpringBoot整合logback

    --本文主要输出日志为控制台日志,系统日志,sql日志,异常日志--> 输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,,,, --> 记录事件进行格式化。负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。--> 记录事件进行格式化。负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。--> 的,所以在使用的时候需要先集成lombok,如果不知道如何集成的小伙伴可以看一下我的《SpringBoot之SpringBoot整合lombok》 在方法中就可以直接使用log日志对象了...比如我刚才访问的地址输出的 彼岸舞 也存放到了里面,接下来 我访问一下Mapper中的方法 访问的时候报错了 ? 那么看一下,有没有记录到error中呢 ?

    2.6K30

    基于 Orbit 的云原生应用交付基础原则与良好实践

    图5-11 日志 把日志当做事件流 日志使得应用程序运行的动作变得透明。在基于服务器的环境中,日志通常被写在硬盘的一个文件里,但这只是一种输出格式。...日志应该是事件流的汇总,将所有运行中进程和后端服务的输出流按照时间顺序收集起来。尽管在回溯问题时可能需要看很多行,日志最原始的格式确实是一个事件一行。...日志没有确定开始和结束,但随着应用在运行会持续的增加。 12-factor 应用本身从不考虑存储自己的输出流。 不应该试图去写或者管理日志文件。...相反,每一个运行的进程都会直接的标准输出(stdout)事件流。开发环境中,开发人员可以通过这些数据流,实时在终端看到应用的活动。...在“把日志当做事件流”的良好实践中(图5-12),应该使用 logstash 或 Loki 等工具以事件流的方式对日志进行输出,并将输出的事件流发送到 Splunk,ElasticSeach 等日志索引及分析系统中

    22020

    基于 Orbit 的云原生应用交付基础原则与良好实践

    日志:把日志当做事件流 日志使得应用程序运行的动作变得透明。在基于服务器的环境中,日志通常被写在硬盘的一个文件里,但这只是一种输出格式。...日志应该是事件流的汇总,将所有运行中进程和后端服务的输出流按照时间顺序收集起来。尽管在回溯问题时可能需要看很多行,日志最原始的格式确实是一个事件一行。...日志没有确定开始和结束,但随着应用在运行会持续的增加。 12-factor 应用本身从不考虑存储自己的输出流。 不应该试图去写或者管理日志文件。...相反,每一个运行的进程都会直接的标准输出(stdout)事件流。开发环境中,开发人员可以通过这些数据流,实时在终端看到应用的活动。...在“把日志当做事件流”的良好实践中(图5-12),应该使用 logstash 或 Loki 等工具以事件流的方式对日志进行输出,并将输出的事件流发送到 Splunk,ElasticSeach 等日志索引及分析系统中

    25250

    Springboot 整合 log4j2 日志详解

    在 18 年大环境下,更多的企业使用 Springboot 和 Springcloud 来搭建他们的企业微服务项目,此篇文章是博主在实践中用 Springboot 整合 log4j2 日志的总结。...前面介绍的几种日志框架一样,每一种日志框架都有自己单独的 API,要使用对应的框架就要使用其对应的 API,这就大大的增加应用程序代码对于日志框架的耦合性。...; 在这列举一下一些网上其他博文中对它们的性能评测: 可以看到在同步日志模式下,Logback 的性能是最糟糕的. log4j2 的性能无论在同步日志模式还是异步日志模式下都是最佳的. log4j2 优越的性能其原因在于...--监控系统信息--> 的appender里输出,而不会在 父Logger 的appender里输出。...日志级别 机制:如果一条日志信息的级别大于等于配置文件的级别,就记录。

    1.2K10

    SpringBoot3中的属性绑定注解和YMAL配置文件、日志

    SpringBoot 提供了默认的控制台输出配置,也可以配置输出为文件。logback是默认使用的。虽然日志框架很多,但是不用慌,使用 SpringBoot 的默认配置就能工作的很好。...、默认使用了logback + slf4j 组合作为默认底层日志4、日志是系统一启动就要用,xxxAutoConfiguration是系统启动好了以后放好的组件,后来用的。...:致命错误日志,比如jvm系统崩溃OFF:关闭所有日志记录不指定级别的所有类,都使用root指定的级别作为默认级别...工作实践导入任何第三方框架,先排除它的日志包,因为SpringBoot底层控制好了日志修改 application.properties 配置文件,就可以调整日志的所有行为。...之类的中间件,这和SpringBoot没关系,都是日志框架自己的配置,修改配置文件即可业务中使用slf4j-api记录日志。

    67820

    SpringBoot图文教程2—日志的使用「logback」「log4j」

    航海日志,黑匣子都是日志记录系统,通过航海日志,黑匣子可以 记录系统中的操作 记录系统的运行状况 系统错误时候,根据日志分析原因 而我们的应用程序,作为一种“极其精密,极其高端(省略一万字)”的东西,也需要类似航海日志和黑匣子的日志记录的功能...,记录系统运行的信息,出现故障后分析原因,而在实际开发中完成这个功能的就是日志框架。...日志框架 本节内容为slf4j log4j 等日志框架的介绍,可以直接跳过至 SpringBoot 项目集成日志 全面有效的日志信息记录可以帮助我们全面的监控应用程序的状态,可以通过日志系统监控服务器的状态...,记录操作行为以及操作轨迹数据,系统发生错误,事后进行故障分析,快速定位问题。...举个例子,日志系统在我们的项目中就像 城市的道路监控系统 ,城市的道路监控系统能够通过摄像头和其他仪器 记录下来每个红绿灯路口的情况,通过这些信息,可以实时监控各个路口的情况,还可以事后追责。 ?

    67020

    第八章:使用拦截器记录你的SpringBoot的请求日志本章目标构建项目配置拦截器初尝试运行项目总结

    如果你得系统还有其他个性化的配置,也可以完成记录。 本章目标 通过SpringBoot整合与拦截器整合完成请求日志的记录,本章节日志记录使用SpringDataJPA与MySQL数据库记录。...图6 上面的三个方法在前面章节:第六章:如何在SpringBoot项目中使用拦截器已经讲过了,这里就不多做解释了,有需要的请去看下我的第六章讲解。...图10 可以看到我们上面记录了我们日志实体内的大部分参数,当用户发送请求时在进入SpringMVC的控制器之前会进入preHandle方法,然后记录下我们的请求日志内容,并将请求日志的实体写入到请求对象内...总结 上述内容就是本章的全部讲解,本章主要讲解了SpringBoot项目如何配置日志拦截器,将用户的请求参数写入到数据库内,使用SpringDataJPA以及Druid连接池完成数据的持久化操作。...当前如果要在企业级大型项目使用,还请定期清理请求日志。

    1.6K20

    SpringBoot整合日志框架

    文章目录 1、日志框架 2、SLF4j使用 1、如何在系统中使用SLF4j https://www.slf4j.org 2、遗留问题 3、SpringBoot日志关系 4、日志使用; 1、默认配置...以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法; 给系统里面导入slf4j的jar和 logback的实现jar import org.slf4j.Logger...)、MyBatis、xxxx 统一日志记录,即使是别的框架和我一起统一使用slf4j进行输出?... 底层依赖关系 总结: ​ 1)、SpringBoot底层也是使用slf4j+logback的方式进行日志记录 ​ 2)、SpringBoot...能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可; 4、日志使用; 1、默认配置 SpringBoot默认帮我们配置好了日志

    70920

    SpringBoot —— 日志基本操作

    —— 日志基本操作 @(SpringBoot —— 日志基本操作) 一、日志的作用 ---- 日志(log)作用: 1.编程期调试代码 2.运营期记录信息: 记录日常运营重要信息(峰值流量、平均响应时长...…) 记录应用报错信息(错误堆栈) 记录运维过程数据(扩容、宕机、报警…) 二、日志级别 ---- TRACE: 运行堆栈信息,使用率低 DEBUG: 程序员调试代码使用 INFO: 记录运维过程数据...WARN: 记录运维过程报警数据 ERROR: 记录错误堆栈信息 FATAL: 灾难信息,合并计入ERROR 三、日志的使用 ---- 控制层组件中,创建记录日志的对象,并记录日志信息: 日志默认使用info...use log"; } } 显示debug级别日志信息的方案: 在SpringBoot配置文件application.yml中设置: 方式一: # 方式一:开启debug模式,输出调试信息,常用于检查系统运行状况...debug: true 方式二(推荐): # 方式一:开启debug模式,输出调试信息,常用于检查系统运行状况 #debug: true # 方式二:设置日志级别,root表示根节点,即整体应用日志级别

    19210

    第十一节:Springboot整合log4j2日志

    在线文档Swagger2入门 第十节:SpringBoot中的日志管理 SpringBoot默认使用的是logback, 但是还有一个性能更高的日志实现框架log4j2....为什么选用log4j2 相比与其他的日志系统,log4j2丢数据这种情况少;disruptor技术,在多线程环境下,性能高于logback等10倍以上;利用jdk1.5并发的特性,减少了死锁的发生; 下面是来自网络上一张性能对比图片...img 同步日志模式下, Logback的性能是最糟糕的,log4j2的性能无论在同步日志模式还是异步日志模式下都是最佳的 log4j2性能高的主要原因是它用了一个LMAX无锁的线程间通信库. pom.xml...--监控系统信息--> 的appender里输出,而不会在 父Logger 的appender里输出。...loggers logger 用来单独指定日志格式 Root 用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出. level Root的属性

    37820

    Springboot 集成 Activiti7 常见问题

    Activiti 是一个工作流引擎, activiti 可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言(BPMN2.0)进行定义,业务系统按照预先定义的流程进行执行,实现了业务系统的业务流程由...activiti 进行管理,减少业务系统由于流程变更进行系统升级改造的工作量,从而提高系统的健壮性,同时也减少了系统开发维护成本。...目前主流的工作流框架: Activiti、Flowable、FixFlow、Camunda 毕设打算基于最新版本Activiti7工作流 + Springboot做一个项目,遇到一些常见问题记录一下:...解决方案:因为Springboot集成Activiti7默认没有开启历史表的生成。...3、查看 Activiti 系统默认sql语句打印日志信息 解决方案:在logback.xml日志中配置日志级别: <logger name="org.activiti.engine.impl.persistence.entity

    94510

    微服务架构Day02-SpringBoot日志slf4j

    的使用 如何在系统中使用slf4j: 1.日志记录方法的调用,不应该调用日志实现类,应该调用日志抽象层里面的方法。...给系统导入slf4j的jar和Logback的实现jar。 2.每一个日志的实现框架都有自己的配置文件。使用slf4j以后,配置文件还是使用日志实现框架的配置文件。...问题:使用slf4j+logback需要统一转换日志记录,别的框架使用其它日志框架的需要一起使用slf4j进行输出: 1.将系统中的其他框架日志先替换出去, 2.用面向slf4j的jar替换原有的日志框架...SpringBoot日志关系 SpringBoot底层也是使用slf4j+logback的方式进行日志记录 SpringBoot将其它日志都替换成slf4j 如果需要引入其它框架,一定要把这个框架的默认日志框架依赖移除...SpringBoot能自动适配所有的日志,而且底层使用的是slf4j+logback的方式记录日志,引入其它框架的时候,只需要将这个框架依赖的日志框架排除掉即可。

    49220

    SpringBoot 笔记 ( 三 ):日志系统

    框架来记录系统的一些运行时信息,但是随着日志框架的增长,和接口的不一致,导致了使用上的差别很大,​这里采用了一个类似于数据库驱动的模式,数据库驱动是 Java 提供的一个 API,然后真正的实现是需要各个数据库厂商去完成的...使用 1、如何在系统中使用SLF4j https://www.slf4j.org 以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法; 给系统里面导入slf4j...如何让系统中所有的日志都统一到slf4j; 将系统中其他日志框架先排除出去 用中间包来替换原有的日志框架 我们导入slf4j其他的实现 3、SpringBoot日志关系 使用slf4j+logback的方式进行日志记录 ​ 2)、SpringBoot也把其他的日志都替换成了slf4j; ​ 3)、中间替换包,使用中间替换包才能把其他的日志框架替换掉。...能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可 4、日志使用; 1、默认配置 SpringBoot默认帮我们配置好了日志

    2K50
    领券