文章目录

  • 默认日志Logback
  • 添加maven依赖
  • 常用日志配置(application.properties)
  • 自定义日志配置
    • 指定日志配置文件名
    • logback-spring.xml文件内容
  • logback的使用
    • 使用注解的方式
    • 使用类的方法

默认日志Logback

SLF4J——Simple Logging Facade For Java,它是一个针对于各类Java日志框架的统一Facade抽象。Java日志框架众多——常用的有java.util.logging, log4j, logback,commons-logging, Spring框架使用的是Jakarta Commons Logging API (JCL)。而SLF4J定义了统一的日志抽象接口,而真正的日志实现则是在运行时决定的——它提供了各类日志框架的binding。

Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。

默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。在运行应用程序和其他例子时,你应该已经看到很多INFO级别的日志了。


从上图可以看到,日志输出内容元素具体如下:

  • 时间日期:精确到毫秒

  • 日志级别:ERROR, WARN, INFO, DEBUG or TRACE

  • 进程ID

  • 分隔符:— 标识实际日志的开始

  • 线程名:方括号括起来(可能会截断控制台输出)

  • Logger名:通常使用源代码的类名

  • 日志内容

添加maven依赖

假如maven依赖中添加了spring-boot-starter-logging:

那么,我们的Spring Boot应用将自动使用logback作为应用日志框架,Spring Boot启动的时候,由org.springframework.boot.logging.Logging-Application-Listener根据情况初始化并使用。

但是呢,实际开发中我们不需要直接添加该依赖,你会发现spring-boot-starter其中包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback。

常用日志配置(application.properties)

// 指定当前项目日志的输出等级
logging.level.root=ERROR,WARN, INFO, DEBUG or TRACE
//com.dudu包下所有class以DEBUG级别输出
logging.level.com.dudu=DEBUG
// 将日志输出到当前项目根路径
logging.file=file_name
// 将日志输出到指定目录里的spring.log文件中,推荐采用logging.file
logging.path=directory//日志输出格式说明:
// %d 输出日期时间,
// %thread 输出当前线程名,
// %-5level输出日志级别,左对齐5个字符宽度
// %logger [50}输出全类名最长50个字符,超过按照句点分割
// %msg日志信息
// %n 换行符//修改控制台输出的日志格式
logging.pattern.console=%d (yyyy-MM-dd[%thread] %-5level %logger [50]} - %msg%n
// 修改文件中输出的日志格式
logging.pattern.file=%Md(y.y-lM-dd HHE:mm:ss.SSS) >>> [Mthread] >>> %-5level .>>>. %logger 50] >>>%msgn

自定义日志配置

由于日志服务一般都在ApplicationContext创建前就初始化了,它并不是必须通过Spring的配置文件控制。因此通过系统属性和传统的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。

根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:

  • 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特有的配置项(下面会提到)。

上面是默认的命名规则,并且放在src/main/resources下面即可。

指定日志配置文件名

如果你即想完全掌控日志配置,但又不想用logback.xml作为Logback配置的名字,可以通过logging.config属性指定自定义的名字:

logging.config=classpath:logging-config.xml

logback-spring.xml文件内容

<?xml version="1.0" encoding="UTF-8"?><!-- scan="true"开启对配置信息的自动扫描(默认时间为60秒扫描一次) 注:当此文件的配置信息发生变化时,此设置的作用就体现出来了,不需要重启服务 -->
<configuration scan="true"><!-- 通过property标签,来存放key-value数据,便于后面的动态获取,提高程序的灵活性 --><property name="log-dir" value="log" /><property name="log-name" value="logFile" /><!-- >>>>>>>>>>>>>>>>>>>>>>>>>配置appender(可以配置多个)>>>>>>>>>>>>>>>>>>>>>>>>> --><!-- name:自取即可, class:加载指定类(ch.qos.logback.core.ConsoleAppender类会将日志输出到>>>控制台), patter:指定输出的日志格式 --><appender name="consoleAppender"class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L- %msg%n</pattern><!-- 日志编码 --><charset class="java.nio.charset.Charset">UTF-8</charset></encoder></appender><!-- name:自取即可, class:加载指定类(ch.qos.logback.core.rolling.RollingFileAppender类会将日志输出到>>>指定的文件中), patter:指定输出的日志格式 file:指定存放日志的文件(如果无,则自动创建) rollingPolicy:滚动策略>>>每天结束时,都会将该天的日志存为指定的格式的文件 FileNamePattern:文件的全路径名模板 (注:如果最后结尾是gz或者zip等的话,那么会自动打成相应压缩包) --><appender name="fileAppender"class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 把日志文件输出到:项目启动的目录下的log文件夹(无则自动创建)下 --><file>${log-dir}/${log-name}.log</file><!-- 把日志文件输出到:name为logFilePositionDir的property标签指定的位置下 --><!-- <file>${logFilePositionDir}/logFile.log</file> --><!-- 把日志文件输出到:当前磁盘下的log文件夹(无则自动创建)下 --><!-- <file>/log/logFile.log</file> --><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- TimeBasedRollingPolicy策略会将过时的日志,另存到指定的文件中(无该文件则创建) --><!-- 把因为 过时 或 过大  而拆分后的文件也保存到目启动的目录下的log文件夹下  --><fileNamePattern>${log-dir}/${log-name}.%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 设置过时时间(单位:<fileNamePattern>标签中%d里最小的时间单位) --><!-- 系统会删除(分离出去了的)过时了的日志文件 --><!-- 本人这里:保存以最后一次日志为准,往前7天以内的日志文件 --><MaxHistory>7</MaxHistory><!-- 滚动策略可以嵌套; 这里嵌套了一个SizeAndTimeBasedFNATP策略,主要目的是: 在每天都会拆分日志的前提下,当该天的日志大于规定大小时, 也进行拆分并以【%i】进行区分,i从0开始 --><timeBasedFileNamingAndTriggeringPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>5MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><encoder><!-- 日志输出格式 --><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L- %msg%n</pattern><!-- 日志编码 --><charset class="java.nio.charset.Charset">UTF-8</charset></encoder></appender><!-- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>使用appender>>>>>>>>>>>>>>>>>>>>>>>>>>>>> --><!--指定[哪个包]下使用[哪个appender],并设置 记录到日志文件中的日志的最下级别(低于次级别的日志信息不回输出记录到日志文件中)注:日志级别有: trace|debug|info|warn|error|fatal注:当有多处指定了要记录的日志的最下日志级别时,走优先级最高的,优先级:logback-spring.xml中 > 启动jar包时 > xxx.properties/xxx.yml中--><!--<logger name="com" level="trace">--><logger name="com"><!-- 指定使用哪个appender --><appender-ref ref="fileAppender" /></logger><!--root:logger的根节点,appender-ref:确定使用哪个appender,将日志信息显示在console注:如果不指定配置此项的话,那么SpringBoot启动后,将不会在console打印任何信息--><root><appender-ref ref="consoleAppender" /></root>
</configuration>

logback的使用

使用注解的方式

需要导入lombok

.......
import lombok.extern.slf4j.Slf4j;// 添加注解@Slf4j
@Slf4j
@Component
public class CustomerRealm extends SimpleAccountRealm {public void fun(){log.debug("未能找到与用户名" + principal.getUsername() + "相符合的账户");log.error(....);log.info(....);log.warn(....);log.trace(....);}   }

使用类的方法

import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import com.alibaba.fastjson.JSON;
import com.aspire.mapper.JavaAnnotationMapper;
import com.aspire.model.Employee;
import com.aspire.util.ExceptionUtil;@RunWith(SpringRunner.class)
@SpringBootTest(classes = { AbcLogbackDemoApplication.class })
public class AbcLogbackDemoApplicationTests {/** 自动装配 */@AutowiredJavaAnnotationMapper javaAnnotationMapper;/** Logger实例 */static final Logger logger = LoggerFactory.getLogger(AbcLogbackDemoApplicationTests.class);/*** logback测试** @date 2018年7月26日 下午4:12:56*/@Testpublic void logbackTest() {logger.info("进入logbackTest方法了!");try {Employee employee = new Employee("邓某", 24, "男");logger.info("employee对象的相应参数为:" + JSON.toJSONString(employee));javaAnnotationMapper.singleInsertAutoGetKey(employee);Integer id = employee.getId();logger.info("向表中插入employee对象的数据后,自动获取到的主键为:" + id);// System.out.println(1 / 0);} catch (Exception e) {logger.error("出错咯!错误信息:" + e.getMessage(), e.getCause());// 打印出错误堆栈信息e.printStackTrace();}logger.info("SpringBoot使用logback示例。");logger.info("logbackTest方法执行完毕!");}}

springboot中日志使用相关推荐

  1. springboot中日志配置

    logback.xml <?xml version="1.0" encoding="UTF-8"?> <configuration debug ...

  2. 【Springboot】日志

    springBoot日志 1.目前市面上的日志框架: 日志门面 (日志的抽象层):                JCL(Jakarta Commons Logging)                ...

  3. SpringBoot与日志

    文章目录 一.日志框架 二.SLF4J 的使用 2.1 使用 log4J 2.2 slf4j 与实现框架图总览 2.3 统一日志记录 三.SpringBoot 日志关系 四.SpringBoot 中日 ...

  4. SpringBoot中的SFL4J日志

    SpringBoot:底层是Spring框架,Spring框架默认使用的是JCL日志的抽象层 SpringBoot选用SLF4J和logback 如何系统地在系统中使用SLF4J 在开发的使用,日志记 ...

  5. 超简单的Springboot中的日志管理配置

    本案例中可以了解,怎么配置日志的输出路径,输出格式(比如说zip格式),按日期进行划分(今天的日志输出为一个文件,明天的日志输出到另一个文件),在按日期划分的同时又按文件大小划分(比如说每天的日志记录 ...

  6. springboot中怎么进行统一日志处理?

    一.springboot的日志级别 日志级别从低到高有:OFF.FATAL.ERROR.WARN.INFO.DEBUG.ALL 高级别包含了低级别,级别越高打印信息越先详细,默认情况下,spring ...

  7. 【SpringBoot】72、SpringBoot中接入轻量级分布式日志框架Graylog

    1.Graylog简介 Graylog 是一个开源的日志聚合.分析.审计.展现和预警工具.在功能上来说,和 ELK 类似,但又比 ELK 要简单很多.依靠着更加简洁,高效,部署使用简单的优势很快受到许 ...

  8. 无法控制SpringBoot 中的DEBUG日志

    最近写的代码中,用到了 SpringBoot 和 log4j 日志,由于SpringBoot 中有自带的日志系统,所以log4j.properties 无法控制 SpringBoot 中的日志信息,老 ...

  9. springboot中配置logback实现打印控制台、写出文件,控制日志级别的方式

    介绍 官方简介 Logback是由log4j创始人设计的又一个开源日志组件. logback当前分成三个模块:logback-core,logback- classic和logback-access. ...

  10. SpringBoot中使用mybatis/ibatis日志打印sql

    SpringBoot中使用mybatis/ibatis时日志打印sql 控制台打印mybatis/ibatis对应的sql 主机的日志文件中打印mybatis/ibatis对应的sql 控制台打印my ...

最新文章

  1. 混合app用百分比还是rem_一次搞懂前端所有CSS长度单位,px、em、rem、rpx、%....
  2. document.getElementByName()的用法
  3. Runner站立会议08
  4. 配置 postCSS 自动添加 css 的兼容前缀||打包样式表中的图片和字体文件||打包处理 js 文件中的高级语法
  5. Java小结(四)——折半查找、选择排序、冒泡排序
  6. java springboot+maven发送邮件
  7. String到底是值类型还是引用类型(C#)
  8. 02-print的用法
  9. PHP常用时间函数总结
  10. Python的矩阵分块
  11. Google Chrome Top60 实用插件集合
  12. 马克思主义基本原理概论-考点串讲
  13. google浏览器Chrome部署HttpWatch
  14. 服务器协议失败,Chrome中的HTTPS服务器“不支持的协议错误”
  15. STM32开发笔记106:解决ST-LINK的Old ST-LINK firmware/ST-LINK already usde问题
  16. 分享58个述职报告PPT模板,总有一款适合你
  17. 小程序云开发教程七:贴子的详情及评论功能
  18. Codevs2404糖果——差分约束系统整理
  19. PowerVM 高级功能——N_PIV
  20. 【记录】U盘安装Ubuntu20.04系统

热门文章

  1. VEH Hook 及 检测
  2. 华为与Emulex、Oracle合作发布数据完整性解决方案
  3. IP地址和交换机原理
  4. feiyanghaotian(飞扬浩天)的csdn博客
  5. 三分钟看懂神经网络机器翻译
  6. Python 鞭炮题
  7. OpenGL学习笔记:1、配置GLFW+GLAD+SOIL+GLM+ASSIMP
  8. Ubuntu 修改鼠标中键功能
  9. [转载]fft-matlab 补零对结果影响的讨论
  10. 操作系统——第二章课堂测验