SpringBoot使用logback示例

SpringBoot会默认使用logback作为日志框架。

SpringBoot会默认加载classpath:logback-spring.xml或者classpath:logback-spring.groovy文件作为日志配置文件。

注:也可以在系统配置文件中指定SpringBoot加载哪一个文件作为日志配置文件: 在application.properties文件中增加:

logging.config=classpath:xxx.xml 即可指定xxx.xml为日志配置文件

 注:如果是SpringBoot的项目的话,直接把logback-spring.xml配置文件放在src/main/resources文件夹下即可,如:

SpringBoot使用logback的基本步骤

第一步:在pom.xml中引入SpringBoot的基本依赖

注:只要引入了spring-boot-starter-parent依赖,那么其会自动引入logback的相关依赖。

第二步:新建logback-spring.xml文件,放在classpath路径下(我们一般把其放在项目中的src/main/resources文件夹,该文件夹也对应classpath路径)即可

注:logback-spring.xml如何配置,见下文。

 

logback-spring.xml配置说明

声明:下面的配置较基本,如果实际运用时,感觉下述配置不满足需求,那么请查阅相关文档了解更多。

logback-spring.xml配置示例


 
 
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- scan="true"开启对配置信息的自动扫描(默认时间为60秒扫描一次) 注:当此文件的配置信息发生变化时,此设置的作用就体现出来了,不需要重启服务 -->
  3. <configuration scan="true">
  4. <!-- 通过property标签,来存放key-value数据,便于后面的动态获取,提高程序的灵活性 -->
  5. <property name="logFilePositionDir"
  6. value= "C:/Users/dengshuai.ASPIRE/Desktop/log" />
  7. <!-- >>>>>>>>>>>>>>>>>>>>>>>>>配置appender(可以配置多个)>>>>>>>>>>>>>>>>>>>>>>>>> -->
  8. <!--
  9. name:自取即可,
  10. class:加载指定类(ch.qos.logback.core.ConsoleAppender类会将日志输出到>>>控制台),
  11. patter:指定输出的日志格式
  12. -->
  13. <appender name="consoleAppender"
  14. class= "ch.qos.logback.core.ConsoleAppender">
  15. <encoder>
  16. <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L- %msg%n
  17. </pattern>
  18. </encoder>
  19. </appender>
  20. <!--
  21. name:自取即可,
  22. class:加载指定类(ch.qos.logback.core.rolling.RollingFileAppender类会将日志输出到>>>指定的文件中),
  23. patter:指定输出的日志格式 file:指定存放日志的文件(如果无,则自动创建) rollingPolicy:滚动策略>>>每天结束时,都会将该天的日志存为指定的格式的文件
  24. FileNamePattern:文件的全路径名模板 (注:如果最后结尾是gz或者zip等的话,那么会自动打成相应压缩包)
  25. -->
  26. <appender name="fileAppender"
  27. class= "ch.qos.logback.core.rolling.RollingFileAppender">
  28. <!-- 把日志文件输出到:项目启动的目录下的log文件夹(无则自动创建)下 -->
  29. <file>log/logFile.log </file>
  30. <!-- 把日志文件输出到:name为logFilePositionDir的property标签指定的位置下 -->
  31. <!-- <file>${logFilePositionDir}/logFile.log</file> -->
  32. <!-- 把日志文件输出到:当前磁盘下的log文件夹(无则自动创建)下 -->
  33. <!-- <file>/log/logFile.log</file> -->
  34. <rollingPolicy
  35. class= "ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  36. <!-- TimeBasedRollingPolicy策略会将过时的日志,另存到指定的文件中(无该文件则创建) -->
  37. <!-- 把因 过时 或 过大 而拆分后的文件也保存到目启动的目录下的log文件夹下 -->
  38. <fileNamePattern>log/logFile.%d{yyyy-MM-dd}.%i.log
  39. </fileNamePattern>
  40. <!-- 设置过时时间(单位:<fileNamePattern>标签中%d里最小的时间单位) -->
  41. <!-- 系统会删除(分离出去了的)过时了的日志文件 -->
  42. <!-- 本人这里:保存以最后一次日志为准,往前7天以内的日志文件 -->
  43. <MaxHistory>
  44. 7
  45. </MaxHistory>
  46. <!-- 滚动策略可以嵌套;
  47. 这里嵌套了一个SizeAndTimeBasedFNATP策略,
  48. 主要目的是: 在每天都会拆分日志的前提下,
  49. 当该天的日志大于规定大小时,
  50. 也进行拆分并以【%i】进行区分,i从0开始
  51. -->
  52. <timeBasedFileNamingAndTriggeringPolicy
  53. class= "ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  54. <maxFileSize>10KB </maxFileSize>
  55. </timeBasedFileNamingAndTriggeringPolicy>
  56. </rollingPolicy>
  57. <encoder>
  58. <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L- %msg%n
  59. </pattern>
  60. </encoder>
  61. </appender>
  62. <!-- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>使用appender>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
  63. <!-- 指定[哪个包]下使用[哪个appender],并[设定日志级别] -->
  64. <!-- 日志级别: trace|debug|info|warn|error|fatal -->
  65. <logger name="com" level="trace">
  66. <!-- 指定使用哪个appender -->
  67. <appender-ref ref="fileAppender" />
  68. </logger>
  69. <!-- root:logger的根节点,appender-ref:确定使用哪个appender,将日志信息显示在console -->
  70. <!--
  71. 注:如果不指定appender或则指定的是输出到文件的appender的话,
  72. 那么SpringBoot启动后,将不会在console打印任何信息
  73. -->
  74. <root level="info">
  75. <appender-ref ref="consoleAppender" />
  76. </root>
  77. </configuration>

给出上述配置在指定文件夹位置生成的log文件示例:

注:最新的日志,都在logFile.log文件中。

注:虽然我们限制了单个log文件的大小,但是其并不是严格的,即:一般会在超过界限大小不多后,进行日志文件的拆分。

注:上述配置有两个“淘汰”,第一个是“非当天的日志,淘汰”;第二个是“超过了指定大小的日志,淘汰”;由于本人测试时间的原因,这里只体现了第二个;其实第一个也是有效的。

代码中使用logback的示例


 
 
  1. import org.junit.Test;
  2. import org.junit.runner.RunWith;
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.test.context.junit4.SpringRunner;
  8. import com.alibaba.fastjson.JSON;
  9. import com.aspire.mapper.JavaAnnotationMapper;
  10. import com.aspire.model.Employee;
  11. import com.aspire.util.ExceptionUtil;
  12. @RunWith(SpringRunner.class)
  13. @SpringBootTest(classes = { AbcLogbackDemoApplication.class })
  14. public class AbcLogbackDemoApplicationTests {
  15. /** 自动装配 */
  16. @Autowired
  17. JavaAnnotationMapper javaAnnotationMapper;
  18. /** Logger实例 */
  19. static final Logger logger = LoggerFactory.getLogger(AbcLogbackDemoApplicationTests.class);
  20. /**
  21. * logback测试
  22. *
  23. * @date 2018年7月26日 下午4:12:56
  24. */
  25. @Test
  26. public void logbackTest() {
  27. logger.info( "进入logbackTest方法了!");
  28. try {
  29. Employee employee = new Employee( "邓某", 24, "男");
  30. logger.info( "employee对象的相应参数为:" + JSON.toJSONString(employee));
  31. javaAnnotationMapper.singleInsertAutoGetKey(employee);
  32. Integer id = employee.getId();
  33. logger.info( "向表中插入employee对象的数据后,自动获取到的主键为:" + id);
  34. // System.out.println(1 / 0);
  35. } catch (Exception e) {
  36. logger.error( "出错咯!错误信息:" + e.getMessage(), e.getCause());
  37. // 打印出错误堆栈信息
  38. e.printStackTrace();
  39. }
  40. logger.info( "SpringBoot使用logback示例。");
  41. logger.info( "logbackTest方法执行完毕!");
  42. }
  43. }

注:SpringBoot中使用logback时,e.printStackTrace();既能将错误栈信息输出到console,又能将错误信息输出到logback中。

注:如果有的日志框架不能将e.printStackTrace()的信息打印到日志文件中,那么我们可以使用下面这个工具类,将错误栈信息转化为字符串,然后手动打印到日志文件中。

给出将e.printStackTrace()的信息转化为字符串的工具类


 
 
  1. import java.io.IOException;
  2. import java.io.PrintWriter;
  3. import java.io.StringWriter;
  4. /**
  5. * 异常工具类
  6. *
  7. * @author JustryDeng
  8. * @date 2018年7月27日 上午1:32:44
  9. */
  10. public class ExceptionUtil {
  11. /**
  12. * 将异常堆栈 信息 转换为字符串
  13. *
  14. * @param e
  15. * 异常
  16. * @return 该异常的错误堆栈信息
  17. * @date 2018年7月27日 上午1:35:27
  18. */
  19. public static String getStackTraceMessage(Exception e) {
  20. StringWriter sw = null;
  21. PrintWriter pw = null;
  22. try {
  23. sw = new StringWriter();
  24. pw = new PrintWriter(sw);
  25. // 将异常的的堆栈信息输出到printWriter中
  26. e.printStackTrace(pw);
  27. pw.flush();
  28. sw.flush();
  29. } finally {
  30. if (sw != null) {
  31. try {
  32. sw.close();
  33. } catch (IOException e1) {
  34. e1.printStackTrace();
  35. }
  36. }
  37. if (pw != null) {
  38. pw.close();
  39. }
  40. }
  41. return sw.toString();
  42. }
  43. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值