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提供了默认配置.在不同的情况下,日志记录器都预先配置为使 ... 
随机推荐
- layer 父弹窗获取子弹窗内的dom节点元素和变量
			1 var body = layer.getChildFrame('body', index); //获取子弹窗的dom节点 2 3 var iframeWin = window[layero.fin ... 
- CentOS下搭建文件共享服务
			nfs部署以及优化 Server端配置 安装rpm服务包 yum install -y nfs-utils 创建数据挂载点 mkdir -p /data 编辑exports文件 vi /etc/exp ... 
- JZOJ2020年8月7日提高组反思
			JZOJ2020年8月7日提高组反思 T1 暴力枚举 枚举起点和\(p\) 然后就 过了?! 根据本人不严谨的推算 时间复杂度\(O(\dfrac{n^7}{4})\) 数据太水就过去了QAQ T2 ... 
- PyQt(Python+Qt)学习随笔:QDateEdit日期编辑部件和QTimeEdit时间编辑部件
			专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 Designer输入部件中,Date Edit和T ... 
- PyQt(Python+Qt)学习随笔:QToolBox工具箱的currentItemName和tabSpacing属性
			老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在Designer中,toolBox的属性中有currentItemName和tabSpacing属 ... 
- Python & PyQt学习随笔:PyQt主程序的基本框架
			在完成UI设计将UI通过PyUic转成Py文件后,由于这个生成的文件每次通过PyUic生成时都会被覆盖,因此应用的主程序必须另外单独编写py文件.需要将UI生成的文件import到主程序的py文件中. ... 
- Combiner-Reduce之前处理过程
			简介 Combiner是Mapper和Reducer之外的组件. Combiner是在Reducer运行之前,对Mapper数据进行处理的. Wordcount实例 WordCountMapper p ... 
- element ui的el-radio踩坑
			1.html 1 <div class="listPeopleDetail"> 2 <div class="item" v-for=" ... 
- BJWC2011 禁忌
			题目链接 题解 多模式匹配首先建 AC 自动机,看到 \(len \le 10^9\) 想到矩阵乘法优化. 朴素 DP 关于分割的最大值,可以贪心,只要走到一个能匹配串的点立刻返回根继续匹配就行,一定 ... 
- gunicorn简单配置
			Gunicorn配置 # -*- coding: utf-8 -*- import os from multiprocessing import cpu_count bind = "127. ... 
