springboot日志输出到文件
今天来谈一谈日志,主要是说一说springboot的日志,因为最近在学习springboot。首先在写代码的时候,要养成记日志的习惯,这点真的很重要,因为之前吃了很多亏。过去我对日志很不在意,该有的日志没有,不该有的日志却随意输出。新换的工作,上司对日志有严格的要求,也就慢慢开始注意了。
一般而言,一个接口或者说一段程序,其入口要有日志,记录传入的数据是什么;部分重要的处理逻辑要有日志输出;程序出口也要有日志,记录其最终的处理结果。这样在解决生产上的问题时,可以很快的定位问题的位置,是传入数据的问题还是我们代码逻辑写错了,总比凭空想象的好,要相信计算机,日志是不会骗人的。
还有一点,在生产上严禁使用System.out输出,性能太低,原因是System.out输出会导致线程等待(同步),而使用Logger输出线程不等待日志的输出(异步),而继续执行。
接下来看一看springboot的日志配置,说一下把日志记录到文件中的配置方式。
工具/原料
springboot
日志
方法/步骤
springboot推荐的日志类库是slf4j、日志系统为logback,确实我回头一看项目中使用的都是slf4j,说明这个东西确实有他的优点。
上文中也说了一点,slf4j有个接口叫Logger,提供了丰富的日志输出方法,包含了所有日志级别的输出。使用方式也是特别的简单,用slf4j的工厂类获取一个logger ,然后就可以输出日志了,默认情况下,日志只会输出到控制台。
通过在application.properties文件中配置logging.file、logging.path可以控制日志文件的输出路径和文件名。
不过有些细节需要注意,否则配置不生效,我测试了几种情况。
如果,两者都配置了:logging.file=myLog.log、logging.path=D:/data/mylog,注意windos的路径(后面配置文件中也是/),此时并不会在d盘下生成日志文件,只会在项目的根目录下创建一个myLog.log的文件(workspace中,此项目的根目录)。
其原因是,没有logback-spring.xml配置文件,系统只认识logging.file,不认识logging.path。
所以要配置logback-spring.xml,spring boot会默认加载此文件,为什么不配置logback.xml,因为logback.xml会先application.properties加载,而logback-spring.xml会后于application.properties加载,这样我们在application.properties文中设置日志文件名称和文件路径才能生效。
且看logback-spring.xml的配置详情。注意${LOG_PATH}和${LOG_FILE}分别是获取配置文件中的路径和文件名称,必须使用这两个全局的配置去获取。然后重启项目,发现在配置的目录下,有了相应的日志文件。
日志文件的配置结构:
(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包下的日志不会输出到控制台。
springboot日志输出到文件的更多相关文章
- ELK实战(Springboot日志输出查找)
需求 把分布式系统,集群日志集中处理快速查询 搭建ELK并与springboot日志输出结合 搭建ELK 基于我前面的elasticsearch搭建博客文档docker-compose.yml基础上进 ...
- MY_Log,无缝替换原生Log,支持日志输出到文件、FirePHP
自己扩展了一个MY_Log, 用法类似于log4j,目前支持将日志输出到文件.FirePHP.如果你需要将日志输出到其他地方,比如邮件.数据库等,可以很方便地进行扩展. 用法很简单,大家一看就知道.1 ...
- ASP.NET Core 2.1 : 十二.内置日志、使用Nlog将日志输出到文件
应用离不开日志,虽然现在使用VS有强大的调试功能,开发过程中不复杂的情况懒得输出日志了(想起print和echo的有木有),但在一些复杂的过程中以及应用日常运行中的日志还是非常有用. ASP.NET ...
- SpringBoot日志输出至Logstash
1.springboot项目pom.xml文件下添加如下配置 2.resources目录下创建logback-spring.xml文件 <?xml version="1.0" ...
- log4j日志输出到文件的配置
1.Maven的dependency 2.log4j.properties的配置 3.Junit的Test类 4.web.xml的配置(非必要) 5.spring的db.config的配置(非必要) ...
- SpringBoot日志输出定义
在application.yml配置文件中添加 logging: level: root: INFO #根日志输出级别 com.juyss.dao: DEBUG #自定义包的日志输出级别 file: ...
- python logging日志输出个文件中
# -*- coding:utf-8 -*- import logging # 引入logging模块 import os.path import time # 第一步,创建一个logger logg ...
- IDEA eclipse 控制台日志输出到文件
eclipse IDEA
- SpringBoot系列——Logback日志,输出到文件以及实时输出到web页面
前言 SpringBoot对所有内部日志使用通用日志记录,但保留底层日志实现.为Java Util Logging.Log4J2和Logback提供了默认配置.在不同的情况下,日志记录器都预先配置为使 ...
随机推荐
- python基本输入输出函数
python程序设计中有三个重要的基本输入.输出函数,用于输入.转换和输出,分别是input(),eval(),print() 1,input()函数 """ input ...
- CentOS下Mysql的操作
重启Mysql的各种方法 1.通过rpm包安装的MySQL service mysqld restart /etc/inint.d/mysqld start 2.从源码包安装的MySQL // lin ...
- Struts2中的开启AsyncContext的方法
//获取到requestHttpServletRequest req = ServletActionContext.getRequest();//设置属性org.apache.catalina.ASY ...
- 函数与函数式编程(生成器 && 列表解析 && map函数 && filter函数)-(四)
在学习python的过程中,无意中看到了函数式编程.在了解的过程中,明白了函数与函数式的区别,函数式编程的几种方式. 函数定义:函数是逻辑结构化和过程化的一种编程方法. 过程定义:过程就是简单特殊没有 ...
- Scrum冲刺_Day02
一.团队展示: 1.项目:light_note备忘录 2.队名:删库跑路队 3.团队成员 队员(不分先后) 项目角色 黄敦鸿 后端工程师.测试 黄华 后端工程师.测试 黄骏鹏 后端工程师.测试 黄源钦 ...
- 半夜删你代码队 Day5冲刺
一.每日站立式会议 1.站立式会议 成员 昨日完成工作 今日计划工作 遇到的困难 陈惠霖 跟进作业 完成注册界面 相关界面设计内容知识不充足 侯晓龙 开始双人合作 开始与数据库结合 无 周楚池 初步完 ...
- 微信公众测试号中的url和token
我设置的前提条件: 已购买阿里云服务器,开通了80端口,且网站已备案. 1.在网站文件中新建index.php文件.该文件内容如下: 把 define("TOKEN", " ...
- POWER BI 基于 ODBC 数据源的配置刷新-以Amazon Redshift为例
POWER BI 基于 ODBC 数据源的配置刷新-以Amazon Redshift为例 Powerbi 有多种数据源连接,可以使用它们连接到不同数据源. 如果在 Power BI Desktop 的 ...
- 6个JS特效教程,学完即精通
6个JS特效教程,学完即精通 JavaScript特效教程,学完你就能写任何特效.本课程将JavaScript.BOM.DOM.jQuery和Ajax课程中的各种网页特效提取出了再进行汇总.内容涵盖了 ...
- MySQL事务提交流程
有binlog的CR方式(重点核心!!): 有binlog情况下,commit动作开始时,会有一个Redo XID 的动作记录写到redo,然后写data到binlog,binlog写成功后,会将bi ...