日志级别从低到高分为:java
TRACE < DEBUG < INFO < WARN < ERROR < FATAL。
若是设置为 INFO ,则低于 INFO 的信息都不会输出其余的依次类推spring
默认状况下,Spring Boot会用Logback来记录内部日志,并用INFO级别输出到控制台你不用作任何设置tomcat
从上图能够看到,日志输出内容元素具体以下:springboot
时间日期:精确到毫秒app
日志级别:异步
进程IDmaven
分隔符:--- 标识实际日志的开始测试
线程名:方括号括起来(可能会截断控制台输出)编码
Logger名:一般使用源代码的类名spa
日志内容
之后开发的时候,日志记录方法的调用,不该该来直接调用日志的实现类,而是调用日志抽象层里面的方法
这和咱们单独使用日志jar包有所不一样
package com.fashvn.ctmsdata.logtest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LogTest { private static final Logger logger=LoggerFactory.getLogger(LogTest.class); public static void main(String[] args) { logger.error("简单的日志记录测试:{}+{}={}",1,2,3); } }
上面那种方式每次都要重复添加记录器那一行代码这里能够基于注解方式可是须要使用lombok前提你IDEA配置了lombok插件而后maven添加了lombok依赖才能够
package com.fashvn.ctmsdata.logtest; import lombok.extern.slf4j.Slf4j; @Slf4j public class LogTest { public static void main(String[] args) { log.error("简单的日志记录测试:{}+{}={}", 1, 2, 3); } }
如今你就能够愉快的在本身程序了使用日志了
您还能够经过启动您的应用程序 --debug 标志来启用“调试”模式(开发的时候推荐开启),如下两种方式皆可:
$ java -jar springTest.jar --debug
如何你的日志记录需求简单你能够经过springboot提供的属性进行日志的简单配置复杂日志记录功能须要单独定义配置文件
logging: # 将日志输出到文件 注意name和path同时使用只会生效后一个配置 file: # 日志名称能够是相对路径和绝对路径 name: #日志路径 能够是相对路径和绝对路径,帮咱们自动生成spring.log的日志文件 path: # 日志文件大小默认是10M单位是KB max-size: # 天天切割打包日志的数量默认是7 max-history: #日志格式 pattern: #输出到日志文件日志格式 file: #输出到控制台日志格式 # %clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx} console: #时间格式 默认 yyyy-MM-dd HH:mm:ss.SSS dateformat: #日志等级对齐方式 默认%5p日志级别输出右对齐 level: #切割文件名称 默认是${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz 如过单个日志文件超过定义的大小就切割打包 rolling-file-name: #须要记录日志的等级 level: # 根目录因此class日志记录等级 root: debug # 自定义对应包下class 日志等级 com.fashvn.ctmsdata: debug
根据不一样的日志系统,你能够按以下规则组织配置文件名,就能被正确加载:
Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
Log4j2:log4j2-spring.xml, log4j2.xml
JDK (Java Util Logging):logging.properties
Spring Boot官方推荐优先使用带有-spring的文件名做为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring boot能够为它添加一些spring boot特有的配置项
若是你即想彻底掌控日志配置,但又不想用logback.xml做为Logback配置的名字,application.yml能够经过logging.config属性指定自定义的名字
logging.config=classpath:logging-config.xml
虽然通常并不须要改变配置文件的名字,可是若是你想针对不一样运行时Profile使用不一样的日志配置,这个功能会颇有用。
通常不须要这个属性,而是直接在logback-spring.xml中使用springProfile配置,不须要logging.config指定不一样环境使用不一样配置文件
<?xml version="1.0" encoding="UTF-8"?> <!-- scan true:配置文件若是发生改变,将会被从新加载,默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,若是没有给出时间单位,默认单位是毫秒。默认的时间间隔为1分钟,当scan为true时,此属性生效。 debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false --> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!--设置上下文名称 每一个logger都关联到logger上下文,默认上下文名称为“default”。 但可使用设置成其余名字,用于区分不一样应用程序的记录。一旦设置,不能修改, 能够经过%contextName来打印日志上下文名称,通常来讲咱们不用这个属性,无关紧要。 --> <contextName>logback-demo</contextName> <!--设置变量 用来定义变量值的标签, 有两个属性,name和value; 其中name的值是变量的名称,value的值时变量定义的值。 经过定义的值会被插入到logger上下文中。定义变量后,可使“${}”来使用变量。 --> <property name="logback.logdir" value="/Users/inke/dev/log/tomcat"/> <property name="logback.appname" value="app"/> <!--appender用来格式化日志输出节点 有俩个属性name和class class用来指定哪一种输出策略 经常使用就是控制台输出策略和文件输出策略。 --> <!--输出到控制台 ConsoleAppender 能够看到layout和encoder,均可以将事件转换为格式化后的日志记录,可是控制台输出使用layout,文件输出使用encoder,具体缘由能够看 https://blog.csdn.net/cw_hello1/article/details/51969554 --> <appender name="consoleLog1" class="ch.qos.logback.core.ConsoleAppender"> <!--展现格式 layout--> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d -1 %msg%n</pattern> </layout> </appender> <!--输出到控制台 ConsoleAppender--> <appender name="consoleLog2" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d -2 %msg%n</pattern> </encoder> </appender> <!--输出到控制台 ConsoleAppender %d{HH: mm:ss.SSS}——日志输出时间 %thread——输出日志的进程名字,这在Web应用以及异步任务处理中颇有用 %-5level——日志级别,而且使用5个字符靠左对齐 %logger{36}——日志输出者的名字 %msg——日志消息 %n——平台的换行符 ThresholdFilter为系统定义的拦截器, 例如咱们用ThresholdFilter来过滤掉ERROR级别如下的日志不输出到文件中。若是不用记得注释掉,否则你控制台会发现没日志~ --> <appender name="consoleLog3" class="ch.qos.logback.core.ConsoleAppender"> <!--展现格式 layout--> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> </pattern> </layout> <!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> --> </appender> <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--若是只是想要 Info 级别的日志,只是过滤 info 仍是会输出 Error 日志,由于 Error 的级别高, 因此咱们使用下面的策略,能够避免输出 Error 的日志--> <!--只是不想要error其余都要--> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!--过滤 Error--> <level>ERROR</level> <!--匹配到就禁止--> <onMatch>DENY</onMatch> <!--没有匹配到就容许--> <onMismatch>ACCEPT</onMismatch> </filter> <!--日志名称,若是没有File 属性,那么只会使用FileNamePattern的文件路径规则 若是同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天 的日志更名为今天的日期。即,<File> 的日志都是当天的。 --> <File>${logback.logdir}/info.${logback.appname}.log</File> <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间--> <FileNamePattern>${logback.logdir}/info.${logback.appname}.%d{yyyy-MM-dd}.log</FileNamePattern> <!--只保留最近90天的日志--> <maxHistory>90</maxHistory> <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志--> <!--<totalSizeCap>1GB</totalSizeCap>--> </rollingPolicy> <!--日志输出编码格式化--> <encoder> <charset>UTF-8</charset> <pattern>%d [%thread] %-5level %logger{36} %line - %msg%n</pattern> </encoder> </appender> <!--输出到文件 另外一种常见的日志输出到文件,随着应用的运行时间愈来愈长,日志也会增加的愈来愈多, 将他们输出到同一个文件并不是一个好办法。RollingFileAppender用于切分文件日志: --> <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--若是只是想要 Error 级别的日志,那么须要过滤一下,默认是 info 级别的,ThresholdFilter--> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>Error</level> </filter> <!--日志名称,若是没有File 属性,那么只会使用FileNamePattern的文件路径规则 若是同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天 的日志更名为今天的日期。即,<File> 的日志都是当天的。 --> <File>${logback.logdir}/error.${logback.appname}.log</File> <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间--> <FileNamePattern>${logback.logdir}/error.${logback.appname}.%d{yyyy-MM-dd}.log</FileNamePattern> <!--只保留最近90天的日志--> <maxHistory>90</maxHistory> <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志--> <!--<totalSizeCap>1GB</totalSizeCap>--> </rollingPolicy> <!--日志输出编码格式化--> <encoder> <charset>UTF-8</charset> <pattern>%d [%thread] %-5level %logger{36} %line - %msg%n</pattern> </encoder> </appender> <!--必选节点 root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。 level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。默认是DEBUG。 能够包含零个或多个元素,标识这个appender将会添加到这个loger。 --> <!--指定最基础的日志输出级别--> <root level="INFO"> <!--appender将会添加到这个loger--> <appender-ref ref="consoleLog1"/> <appender-ref ref="consoleLog2"/> <appender-ref ref="consoleLog3"/> </root> </configuration>