springboot日志输出到文件

2023-05-16

      今天来谈一谈日志,主要是说一说springboot的日志,因为最近在学习springboot。首先在写代码的时候,要养成记日志的习惯,这点真的很重要,因为之前吃了很多亏。过去我对日志很不在意,该有的日志没有,不该有的日志却随意输出。新换的工作,上司对日志有严格的要求,也就慢慢开始注意了。

一般而言,一个接口或者说一段程序,其入口要有日志,记录传入的数据是什么;部分重要的处理逻辑要有日志输出;程序出口也要有日志,记录其最终的处理结果。这样在解决生产上的问题时,可以很快的定位问题的位置,是传入数据的问题还是我们代码逻辑写错了,总比凭空想象的好,要相信计算机,日志是不会骗人的。

还有一点,在生产上严禁使用System.out输出,性能太低,原因是System.out输出会导致线程等待(同步),而使用Logger输出线程不等待日志的输出(异步),而继续执行。

接下来看一看springboot的日志配置,说一下把日志记录到文件中的配置方式。

工具/原料

  • springboot

  • 日志

方法/步骤

  1. springboot推荐的日志类库是slf4j、日志系统为logback,确实我回头一看项目中使用的都是slf4j,说明这个东西确实有他的优点。

    上文中也说了一点,slf4j有个接口叫Logger,提供了丰富的日志输出方法,包含了所有日志级别的输出。使用方式也是特别的简单,用slf4j的工厂类获取一个logger ,然后就可以输出日志了,默认情况下,日志只会输出到控制台。

  2. 通过在application.properties文件中配置logging.file、logging.path可以控制日志文件的输出路径和文件名。

    不过有些细节需要注意,否则配置不生效,我测试了几种情况。

  3. 如果,两者都配置了:logging.file=myLog.log、logging.path=D:/data/mylog,注意windos的路径(后面配置文件中也是/),此时并不会在d盘下生成日志文件,只会在项目的根目录下创建一个myLog.log的文件(workspace中,此项目的根目录)。

    其原因是,没有logback-spring.xml配置文件,系统只认识logging.file,不认识logging.path。

  4. 所以要配置logback-spring.xml,spring boot会默认加载此文件,为什么不配置logback.xml,因为logback.xml会先application.properties加载,而logback-spring.xml会后于application.properties加载,这样我们在application.properties文中设置日志文件名称和文件路径才能生效。

  5. 且看logback-spring.xml的配置详情。注意${LOG_PATH}和${LOG_FILE}分别是获取配置文件中的路径和文件名称,必须使用这两个全局的配置去获取。然后重启项目,发现在配置的目录下,有了相应的日志文件。

     

  6. 日志文件的配置结构:

    (1)FILE_LOG_PATTERN:日志输出格式变量,在控制台输出和文件中输出的append中都引用了此变量。(2)consoleLog:定义一个控制台的appender(3)fileLog:定义一个日志文件的appender,这就是文件输出的详细配置,<File>是日志文件的输出地址:必须要为${LOG_PATH}/${LOG_FILE},这样我们在application.properties中的配置才有效。level标签:如果我们设置了level为info,只会输出info的日志信息,其他日志级别的日志就会过滤掉,建议不配置level属性。

    (4)logger:其name就是项目中对应的包路径,appender-ref是appender的引用,在本配置文件中,意思就是com.example.xyx.MySpringBootTest包下文件的日志,按照fileLog的配置去输出,即按照FILE_LOG_PATTERN的格式,输出到D:/data/mylog/myLog.log文件中。

    标签level="debug"是设置日志级别:作用是debug级别及其以上级别的日志会输出(debug、info、warn、error,,,),注意此处的level是一个下线,比其日志级别高的日志信息也会输出,很重要。

    additivity="false"是配置此logger是否提交给其他的logger或者root节点,如果true,则root也会执行或者其他的可以拦截到的logger节点,且logger的level优先级高;否则不会执行,在本配置文件中即控制台不会输出com.example.xyx.MySpringBootTest包下文件的日志。

    (5)root:根节点,在logback-spring.xml中只引用了控制台日志输出配置,不会输出到文件,如果想输出到文件,可以写再写一个引用。level=info,在控制台输出into级别及其以上级别的日志。会拦截所有包下的日志,但是其输出会受到logger的影响,即注意logger中的additivity属性,如果为false,com.example.xyx.MySpringBootTest包下的日志不会输出到控制台。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot日志输出到文件 的相关文章

随机推荐

  • 中国移动提出的ABCDNETS和DSSN数联网技术介绍

    一 引言 在2023年4月14日 xff0c 中国移动召开 数据要素流通与治理产业高峰论坛上 xff0c 中国移动发布了 数联网 xff08 DSSN xff09 白皮书 xff0c 同时发布了全球首创的数联网 DSSN 服务平台等产品 x
  • 第十章 Vxworks嵌入式软件

    1 VxWork2概述和Vxworks特点 最优秀的特点 xff1a 可靠性和实时性 占有率排名第一 应用领域 xff1a 通信 xff0c 军事 xff0c 航空 xff0c 航天 向后兼容 xff0c 兼容5 X 存储保护技术 基于标准
  • Kotlin:如何在PreferenceFragment中自定义视图

    前几天项目开发中需要用kotlin做一个类似Android原生settings的页面 xff0c 只不过ui相较preference自带的控件有些变化 xff0c 特别是ListPreference的数据更新问题 xff0c 困扰了好久 x
  • Codewars 刷题笔记(Python)3.Friend or Foe

    题目 Make a program that filters a list of strings and returns a list with only your friends name in it If a name has exac
  • Xshell调用图形化界面-(用于图像化安装Oracle)

    前言 xff1a 想要安装Oracle数据库 xff0c 但是Xshell无法调起图形化界面 先使用测试工具xclock进行测试 xff0c 提示命令找不到 xff1a root 64 iZm5efqp4uqpnio9zmnp5rZ xcl
  • openEuler 22.03 KVM虚拟机桥接联网

    最近需要将一个系统移植到欧拉上运行 xff0c 实现思路就是在欧拉上搭建KVM平台 xff0c 再在KVM上运行我们的系统 xff0c 让电脑主机 xff08 Windows xff09 可以访问该系统 其间遇到过一些问题 xff0c 但是
  • 非分区表与分区表相互转换

    1 非分区表转分区表 1 普通表 table T1 OBJECT ID NUMBER not null OBJECT NAME VARCHAR2 128 OWNER VARCHAR2 30 STATUS VARCHAR2 7 分区表 cre
  • 【软工】程序编码

    目录 前言正文 程序设计语言 分类 选择原则 程序编码总原则 好程序的标准 结构化程序设计 主要内容 主要原则 程序设计风格 源程序文档化 数据说明 语句结构 输入输出方法 程序设计质量评价 正确性结构清晰性易修改性 易读性 简单性 程序复
  • TP-LINK TL-WDN6200 USB无线网卡驱动程序安装方法

    前一阵在某东入手一个TP LINK的USB无线网卡 xff08 完整型号 xff1a TP LINK TL WDN6200 1200M千兆高速双频无线网卡USB 台式机笔记本随身wifi接收器 xff09 xff0c 由于装了win10 4
  • Windows Server 2019 免密登录

    Windows Server 2019 免密登录
  • CentOS 7 为firewalld添加开放端口及相关资料

    目录 一 运行 停止 禁用firewalld 1 1启动 xff1a 1 2 查看状态 xff1a 1 3 停止 xff1a 1 4禁用 xff1a 二 查看firewall是否运行 下面两个命令都可以 三 查看default zone和a
  • MicroStrategy的面经(from bbs.byr..

    搜了一下论坛 xff0c 发现基本上没有MicroStrategy的面经 xff0c 既然有幸参加了他们的面试 xff0c 这里把面试过程给大家描述一下 xff0c 希望对后来的人有点帮助吧 1 公司介绍 xff1a 中文叫凌策软件 xff
  • 程序员迷茫:30岁以上的“大龄程码农”出路在哪?java码农该怎么办?

    程序员生存 成功 制胜的法则源自IT精英的职业发展秘诀热爱工作 xff0c 享受生活 为什么程序员过了30就不行了 xff1f 我们被固定在 敲代码 的坑里 xff0c 一干就是10年 xff0c 再干别的早已不会 敲代码已经成了一项流水线
  • Ubuntu添加和设置开机自动启动程序的方法

    ubuntu 18 04 设置开机启动脚本 ubuntu 18 04 设置开机启动脚本 参阅下列链接 https askubuntu com questions 886620 how can i execute command on sta
  • Codewars 刷题笔记(Python)5.Disemvowel Trolls

    题目 Trolls are attacking your comment section A common way to deal with this situation is to remove all of the vowels fro
  • 华为笔试题(4)

    一 计算n x m的棋盘格子 xff08 n为横向的格子数 xff0c m为竖向的格子数 xff09 沿着各自边缘线从左上角走到右下角 xff0c 总共有多少种走法 xff0c 要求不能走回头路 xff0c 即 xff1a 只能往右和往下走
  • ubuntu 16.04 LTS + xgboost 0.7 + GPU support

    记录下安装xgboost 踩过的坑 xff0c 也是为了日后万一再需要 xff0c 可以翻看 cpu版的安装倒是很容易的 xff1a sudo pip install xgboost gpu版 xff1a 为了避免import的时候把旧版的
  • mariaDB JSON函数

    官方文档 xff1a https mariadb com kb en json search
  • #最详细# Github Page 个人博客绑定二级域名

    文章目录 1 必要条件 xff1a 2 操作步骤 xff1a 3 操作3 1 在阿里云控制台添加子域名解析记录3 2 在 Github 中修改配置 1 必要条件 xff1a 已申请个人域名已配置好Github Page 2 操作步骤 xff
  • springboot日志输出到文件

    今天来谈一谈日志 xff0c 主要是说一说springboot的日志 xff0c 因为最近在学习springboot 首先在写代码的时候 xff0c 要养成记日志的习惯 xff0c 这点真的很重要 xff0c 因为之前吃了很多亏 过去我对日