默认情况下,spring boot使用的是LogBack日志系统。在spring-boot-starter-web和spring-boot-starter中都已经默认依赖了logging的工具包。

如果要使用指定版本的logging或其他的日志工具,需要先在starter-web和starter中将spring-boot-starter-logging排除。

使用LogBack

当我们在项目中添加了spring-boot-starter-web或spring-boot-starter依赖时,项目会自动关联依赖logging。即默认配置了LogBack,因此可以直接在项目中使用LoggerFactory来创建logger对象(注意:在LogBack中使用的是LoggerFactory)。

private static final Logger log = LoggerFactory.getLogger(Logger.class);

使用方法与其他日志一致

log.info("info");
log.war("war");
log.error("error");

在不添加配置的情况下,默认的logback日志范围是info。同时我们可以在application.properties中进行相应的配置(测试代码配置了该属性,但不论是logback或log4j2均无效,需要待查原因,考虑可能是未添加日志配置文件原因)

##配置日志级别
##root为根目录,即配置项目的所有日志
logging.level.root=warn
##配置com.yxf.demo包下的日志
logging.level.com.yxf.demo=WARN

默认情况下,日志只会输出在控制台,在application.properties中可以进行相应的配置。需要注意的是,如果我们没有添加logback-spring.xml配置文件,项目只会识别logging.file属性,不会识别logging.path属性,即如下配置,项目日志会生成在当前项目根目录下,而不会生成在d盘,文件名为springbootdemo.log。

logging.path=D://t
logging.file=springbootdemo.log

配置输出格式

logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n //配置控制台打印格式
logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n //控制日志文件输出格式

上面配置中,各个符号对应的含义

%d{HH:mm:ss.SSS}——日志输出时间
%t——输出日志的线程(thread)名字,这在Web应用以及异步任务处理中很有用
%-5level——日志级别,并且使用5个字符靠左对齐
%logger ——logger的名称,rootlogger没有名称,因此不会有输出
%msg——日志消息msg
%n——平台的换行符
%class{36}——类全名
%l——行号
%m——方法名
%f——类文件名
%I——包括类名、文件名、方法名、行数

最后,以上均是在springboot的application.properties配置文件中进行的日志配置,如果我们在单独的配置文件中配置,可以将文件命名为logback-spring.xml,项目会在加载springboot的配置文件后自动加载该文件,但是千万不能命名为logback.xml,因为虽然也会被项目自动加载,但是会在加载springboot的配置文件之前就加载,此时springboot里的配置将会无效。

使用Log4j2

如果使用非LogBack的日志系统,首先需要从相关依赖中剔除logging的依赖,并添加要使用的日志系统的相关依赖,如log4j2。

      <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>   <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
  </dependency>

如果不使用log4j2的配置文件,直接在application中配置,可以参考上面logback,相关配置参数一致。

如果使用log4j2的配置文件,将文件命名为log4j2.xml或log4j2-spring.xml,项目会对其自动加载。其他命名则需要在application中配置logging.config=classpath:**.xml。

log4j2的logger获取为LogManager,如下

Logger log = LogManager.getLogger();

剩余关于log4j2配置文件的配置,如下

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<Appenders>
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout charset="UTF-8" pattern="[%-5p] %d %c - %m%n" />
</Console> <File name="File" fileName="/Users/jackie/workspace/rome/springboot.log">
<PatternLayout pattern="%m%n" />
</File>
</Appenders> <Loggers>
<root level="info">
<AppenderRef ref="CONSOLE" />
<AppenderRef ref="File" />
</root>
</Loggers>
</configuration>

<configuration>:log4j2.xml的最外层标签,所有的配置均在该标签内。

  status:设置log4j2自身内部信息输出,可以设置trace、info、error等,也可以不设置。如果设置为trace,可以看到log4j自身内部的信息输出。

  monitorInterval:设置log4j2自动检测配置、重新配置的时间,单位为秒。

<appenders>:输出源,可以配置一个或多个。

  <Console>:输出控制台配置。

    name:该输出源的名称。

    target:配置控制台的输出方式,可以是SYSTEM_ERR、SYSTEM_OUT等等。

    <thresholdFilter>:配置输出范围。

      level:输出的最低范围,可以为trace、debug、info、warn、error、fatal等。

      onMatch:配置达到level的日志信息如何处理,可以为ACCEPT(接收并打印)或DENY(不打印)。

      onMismatch:配置未达到level的日志信息如何处理,可以为ACCEPT(接收并打印)或DENY(不打印)。

    <PatternLayout>:日志输出格式。

      pattern:日志输出格式。

  <File>:文件输出配置

    name:该输出源的名称。

    filename:输出文件的路径与文件名。

    append:配置为false,每次运行项目时自动清空之前日志,配置为true,不会清空之前日志。

    <ThresholdFilter>、<PatternLayout>:如上。

  <RollingFile>:配置文件输出,当文件大小达到指定数额时,自动存入年-月文件夹下并压缩,作为存档。

    name:该输出源的名称。

    filename:输出文件的路径与文件名。

    filePattern:配置压缩文件路径与文件名,如log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.zip

    <PatternLayout>:如上。

    <SizeBasedTriggeringPolicy size="10MB"/> :配置文件大小。

    <TimeBasedTriggeringPolicy interval="1" />:配置文件更新时间,如果filePattern最小单位为月(如%d{yyyy-MM}),则单位为月,如果最小单位为日(如%d{MM-dd}),则单位为日。

    <DefaultRolloverStrategy max="20">:配置文件夹中最大的文件数,默认为7个文件。

  <RollingRandomAccessFile>:注意该方式采用异步操作,存在有缓冲区,日志不是实时地打印

<loggers>:输出对象。

  <root level="trace">:默认的logger

    <appender-ref ref="console" />:配置该logger的输出源,ref是上面所配的输出源的name值。只有配置了的输出源才会生效。

  <logger>:配置logger。

    name:该logger的名称。

    level:

    additivity:可加性,可以设置为true或false。如果为true,会继承root及父logger下的输出源。如果为false,则不会继承其他logger。

    <appender-ref ref="console" />:配置该logger的输出源,ref是上面所配的输出源的name值。只有配置了的输出源才会生效。

注意:

1.我们通过LogManager.getLogger();获取logger,会根据配置文件中<logger>的name属性来寻找使用哪一个Logger配置,一般是定义指定的包下的日志放在单独的文件中。如果使用getClass(),name匹配获得的类全名。如果使用字符串,name匹配字符串。如果不指定参数,或者匹配不到指定的logger,则默认获取root。(如果指定参数为字符串,则会根据字符串匹配logger的name值,匹配上,则使用logger的配置,否则仍使用root配置。如果指定参数为类对象,如xxx.class,则会根据类全名,即包名+类名,来匹配logger的name值,匹配上,则使用logger的配置,否则仍使用root配置。)

2.logger具有继承性,所有的logger默认继承root,可以通过属性additivity=false,设置不继承。同时name值com.yxf.demo1的logger,会默认继承name值为com.yxf的logger。也可以通过属性additivity来配置是否继承。

3.配置appender只输出某一级别的日志,可以如下

        <RollingFile name="infoRollingFile" fileName="${LOG_HOME}/%d{yyyy-MM-dd}log.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/sgylog-%d{yyyy-MM-dd}-%i.log.zip">
<PatternLayout pattern="${LOG_FORMAT}"></PatternLayout>
<filters>
<!-- 接收info及以上日志 -->
<ThresholdFilter level="info"></ThresholdFilter>
<!-- 不接收error及以上日志,两者搭配后即只输出info和warn两个级别的日志 -->
<ThresholdFilter level="error" onMatch="DENY" onMismatch="ACCEPT"></ThresholdFilter>
</filters>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
</RollingFile>

参考地址:https://www.cnblogs.com/hlhdidi/p/6749572.html

下面记录一下我目前使用的日志配置

<configuration>
<properties>
<!--日志目录-->
<property name="LOG_HOME">d://log</property>
<!--日志格式-->
<property name="LOG_FORMAT">%d{HH:mm:ss} %-5level %class{36} %L %M - %msg%n</property>
</properties> <appenders>
<!--控制台输处-->
<Console name="Console" target="SYSTEM_OUT">
<!--输出级别info及以上-->
<thresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"></thresholdFilter>
<PatternLayout pattern="${LOG_FORMAT}"></PatternLayout>
</Console> <!--文件输出-->
<File name="file" fileName="${LOG_HOME}/error.log">
<Filters>
<!--输出级别info及以上-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"></ThresholdFilter>
</Filters>
<PatternLayout pattern="${LOG_FORMAT}"></PatternLayout>
</File> <!--文件输出,输出级别为info和warn,按日,按大小生成压缩包-->
<RollingFile name="infoRollingFile" fileName="${LOG_HOME}/info.log"
filePattern="${LOG_HOME}/info/$${date:yyyy-MM}/sgyInfo-%d{yyyy-MM-dd}-%i.log.zip">
<PatternLayout pattern="${LOG_FORMAT}"></PatternLayout>
<filters>
<!--限制输出级别为info和warn-->
<ThresholdFilter level="info"></ThresholdFilter>
<ThresholdFilter level="error" onMatch="DENY" onMismatch="ACCEPT"></ThresholdFilter>
</filters>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
</RollingFile> <!--文件输出,输出级别为error及以上,因为异常不是每天发生,因此只按大小生成压缩包-->
<RollingFile name="errorRollingFile" fileName="${LOG_HOME}/error.log"
filePattern="${LOG_HOME}/error/$${date:yyyy-MM}/sgyError-%d{yyyy-MM-dd}-%i.log.zip">
<!--输出级别为error及以上-->
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"></ThresholdFilter>
<PatternLayout pattern="${LOG_FORMAT}"></PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
</RollingFile>
</appenders> <loggers>
<root level="info">
<appender-ref ref="Console" />
<appender-ref ref="infoRollingFile"/>
</root>
<Logger name="info" additivity="false">
<appender-ref ref="infoRollingFile"/>
</Logger>
<Logger name="error" additivity="false">
<appender-ref ref="errorRollingFile"/>
</Logger>
</loggers>
</configuration>

l

springboot日志配置的更多相关文章

  1. SpringBoot Logback配置,SpringBoot日志配置

    SpringBoot Logback配置,SpringBoot日志配置  SpringBoot springProfile属性配置 ================================ © ...

  2. Springboot日志配置探索(主要看logback)(一)

    这篇博客是springboot日志配置探索的第一篇,主要讲默认配置下springboot的logback日志框架的配置(即直接使用是怎样的) 首先,是一个SpringBoot的有关日志的说明文档:ht ...

  3. 功能:SpringBoot日志配置详情

    SpringBoot日志配置详情 一.介绍 在所有的项目中,日志是必不可少的,为了高效清晰的查找日志,可以配置日志输出的等级和格式. 在配置后,可以自定义输出日志到指定目录,可以按照天数来分割日志,可 ...

  4. (转)Springboot日志配置(超详细,推荐)

    Spring Boot-日志配置(超详细) 更新日志: 20170810 更新通过 application.yml传递参数到 logback 中. Spring Boot-日志配置超详细 默认日志 L ...

  5. SpringBoot日志配置(详解) 涉及控制台输出日志、生成日志文件、日志级别修改、hibernate日志不输出

    写在前面 本篇主要讲述日志配置,看完本篇可以解决下述问题, 控制台输出日志.生成日志文件.日志级别修改.hibernate日志不输出 Git Demo Path:https://github.com/ ...

  6. Springboot日志配置探索(主要看logback)(二)

    这篇博客主要是讲在Springboot中扩展的日志框架的配置,也是主要讲logback 8 继续看文档,这里讲到: springboot里面还有几个日志系统框架可以选择使用,你可以通过在classpa ...

  7. springboot 日志配置

    maven依赖中添加了 spring-boot-starter-logging : <dependency> <groupId>org.springframework.boot ...

  8. 微服务-springboot日志配置

    springboot 默认会加载classpath:logback-spring.xml文件. springProfile 中的name名字对应application-xx.properties 中的 ...

  9. ELK springboot日志收集

    一.安装elasticsearch 可以查看前篇博客 elasticsearch安装.elasticsearch-head 安装 二.安装 配置 logstash 1.安装logstash 下载地址: ...

随机推荐

  1. Content-Length mismatch, received 431737 bytes out of the expected 760836

    可能原因是 composer 的安装包网址是国外镜像所致,被长城防火墙屏蔽了.可执行以下命令来解决:composer config -g repo.packagist composer https:/ ...

  2. poj 2074

    哎怎么说,感觉现在处理平面上点线的题已经比较熟练了. 这题就离散化然后搞个前缀和就没了. 准备开始进一步的自闭了. 下面是disguss的一些样例... 其实是我自己写错了个地方,本来能1A的. #i ...

  3. 在eclipse中使用Tomcat时出现Could not publish server ...错误

    在使用eclipse加载tomcat服务器运行项目时遇到问题:    在Tomcat的安装目录下的\conf\server.xml中将<Context>标签所对应的重复名称项目删除   这 ...

  4. bash 脚本。find 命令,xargs

    rm 排除指定文件或文件夹 rm -r !(.git) find 命令两个用法 find <指定目录> <指定条件> <指定动作> $ find . -name ' ...

  5. 19. vue的原理

    vue:原理1 => Object.defineProperty 当你把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性,并使用 Obj ...

  6. A Java back-end engineer's study notes

    loveincode's notes 学习工作中的一些记录,收藏. 人气很高的链接库 计算机基础相关笔记 操作系统 , 编译原理 , 计算机网络 , 互联网协议... 常用数据结构与算法 Java 实 ...

  7. Java设计模式系列 — 构造器模式

    想象下你有一个类,像下图所示有许多属性.假设你想让你的类不可变(顺便说一下,除非有一个好的理由不这样做,否则你应该坚持.但是我们会以另一种方式来达到要求.) public class User { p ...

  8. xcode代码提示没了

    defaults write com.apple.dt.XCode IDEIndexDisable 0 https://www.jianshu.com/p/57a14bed9d1b

  9. 并行开发-Paraller

    并行开发的概念 并行开发要做的事情就是将任务分摊给硬件线程去并行执行来达到负载和加速,传统的代码都是串行的,就一个主线程,当我们为了实现加速而开了很多工作线程,这些工作线程就是软件线程 Paralle ...

  10. 最全的MonkeyRunner自动化测试从入门到精通(4)

    Android Sdk环境变量配置步骤一:我们进行再eclipse中下载sdk来进行使用. 在安装ADT插件完成之后,在eclipse的菜单界面会多一个ADT的管理器,如下图,点击进入到安卓API安装 ...