首页
学习
活动
专区
工具
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.6K111

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.4K21
  • 使用 e.printStackTrace() 输出日志是怎样让系统崩掉

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

    3.6K10

    使用Hue创建SshOozie工作时重定向输出日志报错分析

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

    1.2K100

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

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

    21420

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

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

    24650

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

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

    65620

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

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

    64820

    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表示根节点,即整体应用日志级别

    19110

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

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

    1.6K20

    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

    SpringBoot整合日志框架

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

    70020

    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

    90310

    微服务架构Day02-SpringBoot日志slf4j

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

    48520

    SpringBoot之基本配置

    底层是 Spring 框架,Spring 框架默认是用JCL; ==SpringBoot 选用 SLF4j 和 Logback;== 2、使用 SLF4j 使用 ① 如何在系统使用 SLF4j https...://www.slf4j.org ​ 以后开发时候,日志记录方法调用,不应该来直接调用日志实现类,而是调用日志抽象层里面的方法; ​ 给系统里面导入 slf4j jar 和 logback 实现...统一日志记录,即使是别的框架和我一起使用 slf4j 进行输出: 20200827115306.png ==让系统中所有的日志都统一到 slf4j:== 将系统其他日志框架先排除出去; 用中间包啦替换原有的日志框架...SpringBoot底层也是使用slf4j+ logback方式进行日志记录SpringBoot 也是其他日志都替换成 slf4j; 中间替换包 @SuppressWarnings("rawtypes...能自动依赖所有的日志,而且底层使用 slf4j + logback 方式记录日志,引入其他框架时候,只需要把这个框架依赖日志框架排除掉即可;== 4、日志使用SpringBoot 默认帮我们配置好了日志

    77110

    SpringBoot——日志【六】

    如何在系统使用SLF4J 以后开发时候,日志记录方法调用,不应该来直接调用日志实现类,而是调用日志抽象层里面的方法; 给系统里面导入slf4jjar和logback实现jar import...如何让系统中所有的日志都统一到slf4j中 1、将系统中其他日志框架先排除出去; 2、用中间包来替换原有的日志框架; 3、我们导入slf4j其他实现 3....底层也是使用slf4j+logback方式进行日志记录 SpringBoot也把其他日志都替换成了slf4j; 中间替换包 @SuppressWarnings("rawtypes") public...能自动适配所有的日志,而且底层使用slf4j+logback方式记录日志,引入其他框架时候,只需要把这个框架依赖日志框架排除掉即可 日志使用 1、默认配置 SpringBoot默认帮我们配置好了日志...输出日志到my.log文件 (none) 指定目录 /var/log 输出到指定目录 spring.log 文件中 2、指定配置 给类路径下放上每个日志框架自己配置文件即可;SpringBoot

    9010
    领券