Spring Boot集成了Logback日志系统。

Logback的核心对象主要有3个:Logger、Appender、Layout

1、Logback

Logger:日志的记录器 主要用于存放日志对象,也可以定义日志类型、级别。

级别:ERROR、WARE、INFO、DEBUG和TRACE。没有FATAL,归纳到了ERROR级别里。ERROR、WARN and INFO level messages are logged by default.

在Spring Boot中,最好定义为logback-spring.xml。if you ue standard configuration locations,Spring cannot completely control log initialization.(指的就是配置文件名为logback.xml)

  1. //接口定义
  2. public interface SendMessage {
  3. public void send();
  4. }
  1. //Stg环境实现类
  2. @Component
  3. @Profile("stg")
  4. public class StgSendMessage implements SendMessage {
  5.  
  6. @Override
  7. public void send() {
  8. System.out.println(">>>>>>>>Stg Send()<<<<<<<<");
  9. }
  10. }
  1. //Dev 环境实现类
  2. @Component
  3. @Profile("dev")
  4. public class DevSendMessage implements SendMessage {
  5. @Override
  6. public void send() {
  7. System.out.println(">>>>>>>>Dev Send()<<<<<<<<");
  8. }
  9. }

在启动类中配置,如下:

  1. @RestController
  2. @SpringBootApplication
  3. public class SampleLogbackApplication {
  4.  
  5. private static final Logger logger = LoggerFactory.getLogger(SampleLogbackApplication.class);
  6.  
  7. @Autowired
  8. private SendMessage sendMessage;
  9.  
  10. @PostConstruct
  11. public void logSomething() {
  12. sendMessage.send();
  13. }
  14.  
  15. public static void main(String[] args) throws Exception {
  16. SpringApplication.run(SampleLogbackApplication.class, args);
  17. }
  18.  
  19. }

对不同的环境进行不同的日志配置,如下: 

  1. <springProfile name="dev">
  2. <logger name="sample.logback.web.TestProfileCtrl" level="TRACE" />
  3. </springProfile>
  4.  
  5. <springProfile name="stg">
  6. <logger name="sample.logback.web.TestProfileCtrl" level="WARE" />
  7. </springProfile>

在启动程序的时候通过添加 –spring.profiles.active={profile} 来指定具体使用的配置。例如:

  1. java -jar demo.jar spring.profiles.active=dev

Spring Boot 会先加载默认的配置文件,然后使用具体指定的profile中的配置去覆盖默认配置。

spring.profiles.active 默认指定dev环境,如果我们在运行时指定 –spring.profiles.active=stg 那么将应用stg环境,最终 server.port 的值为8082

2、Appender

用于指定日志输出的目的地,目的地可以是控制台、文件、远程套接字服务器、 MySQL等数据库、 JMS和远程UNIX Syslog守护进程等。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <include resource="org/springframework/boot/logging/logback/base.xml" />
  4.  
  5. <!-- <logger name="sample.logback" level="DEBUG" /> -->
  6.  
  7. <!-- 控制台输出 -->
  8. <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
  9. <encoder>
  10. <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
  11. </encoder>
  12. </appender>
  13.  
  14. <!-- 时间滚动输出 level为 DEBUG 日志 -->
  15. <appender name="file—debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
  16. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  17. <level>DEBUG</level>
  18. <onMatch>ACCEPT</onMatch>
  19. <onMismatch>DENY </onMismatch>
  20. </filter>
  21. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  22. <FileNamePattern>D:/logs/debug.%d{yyyy-MM-dd}.log</FileNamePattern>
  23. <MaxHistory>30</MaxHistory>
  24. </rollingPolicy>
  25. <encoder>
  26. <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
  27. </encoder>
  28. </appender>
  29.  
  30. <!-- 时间滚动输出 level为 ERROR 日志 -->
  31. <appender name="file—error"
  32. class="ch.qos.logback.core.rolling.RollingFileAppender">
  33. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  34. <level>ERROR</level>
  35. <onMatch>ACCEPT</onMatch>
  36. <onMismatch>DENY </onMismatch>
  37. </filter>
  38. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  39. <FileNamePattern>D:/logs/error.%d{yyyy-MM-dd}.log</FileNamePattern>
  40. <MaxHistory>30</MaxHistory>
  41. </rollingPolicy>
  42. <encoder>
  43. <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
  44. </encoder>
  45. </appender>
  46.  
  47. <!-- 特定过滤含有某字符串的日志 -->
  48. <appender name="file-str" class="ch.qos.logback.core.rolling.RollingFileAppender">
  49. <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
  50. <evaluator>
  51. <expression>return message.contains("str");</expression>
  52. </evaluator>
  53. <onMatch>ACCEPT</onMatch>
  54. <onMismatch>DENY</onMismatch>
  55. </filter>
  56. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  57. <FileNamePattern>D:/logs/contains.%d{yyyy-MM-dd}.log</FileNamePattern>
  58. <MaxHistory>30</MaxHistory>
  59. </rollingPolicy>
  60. <encoder>
  61. <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
  62. </encoder>
  63. </appender>
  64.  
  65. <!-- 数据库输出 -->
  66. <!-- <appender name="db" class="ch.qos.logback.classic.db.DBAppender">
  67. <connectionSource
  68. class="ch.qos.logback.core.db.DriverManagerConnectionSource">
  69. <driverClass>com.mysql.jdbc.Driver</driverClass>
  70. <url>jdbc:mysql://host_name:3306/log_db</url>
  71. <user>root</user>
  72. <password>123qwe</password>
  73. </connectionSource>
  74. </appender> -->
  75.  
  76. <logger name="java.sql.Connection">
  77. <level value="DEBUG" />
  78. </logger>
  79. <logger name="java.sql.Statement">
  80. <level value="DEBUG" />
  81. </logger>
  82. <logger name="sample.logback.SampleLogbackApplication">
  83. <level value="DEBUG" />
  84. </logger>
  85. <logger name="sample.logback.web.TestCtrl">
  86. <level value="INFO" />
  87. </logger>
  88.  
  89. <root level="DEBUG">
  90. <appender-ref ref="stdout" />
  91. <appender-ref ref="file—debug" />
  92. <appender-ref ref="file—error" />
  93. <appender-ref ref="file-str" />
  94. <!--<appender-ref ref="db" /> -->
  95. </root>
  96.  
  97. </configuration>

如上,日志有记录输出到控制台的,也有记录到文件或者数据库中的。

不过Spring Boot中的pom.xml配置文件主要依赖的包如下:

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-web</artifactId>
  9. </dependency>
  10. <dependency>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-starter-test</artifactId>
  13. <scope>test</scope>
  14. </dependency>
  15. <dependency>
  16. <groupId>org.codehaus.janino</groupId>
  17. <artifactId>janino</artifactId>
  18. <version>2.5.16</version>
  19. </dependency>
  20. </dependencies>

3、Layout

负责把事件转换成字符串,格式化的日志信息的输出。

  1. <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
  2. <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  3. <level>TRACE</level>
  4. </filter>
  5. <encoder>
  6. <Pattern>.%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %n</Pattern>
  7. </encoder>
  8. </appender>

<Pattern>节点中定义了输出的格式,解释如下:

<encoder>表示对日志进行编码:

  • %d{HH:mm:ss.SSS}——日志输出时间
  • %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
  • %-5level——日志级别,并且使用5个字符靠左对齐
  • %logger{36}——日志输出者的名字
  • %msg——日志消息
  • %n——平台的换行符

参考博文:

(1)Javaeye  http://aub.iteye.com/blog/1101260

(2)Spring Boot Doc https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html#boot-features-logging-format

剑指架构师系列-spring boot的logback日志记录的更多相关文章

  1. 剑指架构师系列-Nginx的安装与使用

    Nginx可以干许多事情,在这里我们主要使用Nginx的反向代理与负载均衡功能. 1.Nginx的下载安装 在安装Nginx前需要安装如下软件: GCC  Nginx是C写的,需要用GCC编译 PCR ...

  2. 剑指架构师系列-Redis集群部署

    初步搭建Redis集群 克隆已经安装Redis的虚拟机,我们使用这两个虚拟机中的Redis来搭建集群. master:192.168.2.129 端口:7001 slave:192.168.2.132 ...

  3. 剑指架构师系列-Redis安装与使用

    1.安装Redis 我们在VMware中安装CentOS 64位系统后,在用户目录下下载安装Redis. 下载redis目前最稳定版本也是功能最完善,集群支持最好并加入了sentinel(哨兵-高可用 ...

  4. 剑指架构师系列-持续集成之Maven实现项目的编译、发布和部署

    Maven组织项目进行编译.部署 Maven项目基本的结构说明如下: mazhi  // 控制所有荐的编译.部署.发布 mazhi-app-parent  // 项目的父项目,有一些公共的设置可以被子 ...

  5. 剑指架构师系列-持续集成之Maven+Nexus+Jenkins+git+Spring boot

    1.Nexus与Maven 先说一下这个Maven是什么呢?大家都知道,Java社区发展的非常强大,封装各种功能的Jar包满天飞,那么如何才能方便的引入我们项目,为我所用呢?答案就是Maven,只需要 ...

  6. 剑指架构师系列-InnoDB存储引擎、Spring事务与缓存

    事务与锁是不同的.事务具有ACID属性: 原子性:持久性:由redo log重做日志来保证事务的原子性和持久性,一致性:undo log用来保证事务的一致性隔离性:一个事务在操作过程中看到了其他事务的 ...

  7. 剑指架构师系列-ActiveMQ队列的使用

    安装ActiveMQ只需要下载包后解压,然后就可以启动与关闭ActiveMQ了,如下: ./activemq start ./activemq stop 访问管理页面: http://10.10.20 ...

  8. 剑指架构师系列-ftp服务器

    1.安装FTP 我们在开发项目时,肯定需要专门的一台ftp服务器来存在上传的静态资源,今天我们就在CentOS下搭建一个ftp服务器. 1.安装vsftpd组件,安装完后,有/etc/vsftpd/v ...

  9. 剑指架构师系列-tomcat6通过IO复用实现connector

    由于tomcat6的配置文件如下: <Connector port="80" protocol="org.apache.coyote.http11.Http11Ni ...

随机推荐

  1. hdu1443 Joseph---约瑟夫环

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1443 题目大意: 一共有2k个人,分别为k个好人和k个坏人,现在我们需要每隔m个人把坏人挑出来,但是 ...

  2. 判断字符串的后缀.endswith()

    可以用str.endswith('.jpg')来判断字符串是否以jpg结尾,返回True或者False

  3. Http协议消息报头

    哎.不知道怎么写Http协议... 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议. HTTP基于TCP/IP通信协议来传递数据 ...

  4. 使用一个Python脚本来运行一个简单的Django项目

    创建视图 Django是一个模型-模板-视图(model-template-view,MTV)框架. 视图部分通常检查看HTTP给出的请求和查询或者结构,这些信息是发送到表示层的数据. 我们在 hel ...

  5. Oracle SQL Developer 免费的DB2客户端

    问题地址:https://stackoverflow.com/questions/8600735/is-there-any-opensource-db2-client 软件地址:http://www. ...

  6. Oracle表空间的管理方式

    解释说明:表空间是一个逻辑概念:=> oracle 逻辑概念段区块管理方式: number one => tablespace number two=> segments Oracl ...

  7. 常见web安全隐患及解决方案

    Abstract 有关于WEB服务以及web应用的一些安全隐患总结资料. 1. 常见web安全隐患 1.1.       完全信赖用户提交内容 开发人员决不能相信一个来自外部的数据.不管它来自用户提交 ...

  8. ASwipeLayout一个强大的侧滑菜单控件

    Android中侧滑的场景有很大,大部分是基于RecyclerView,但是有些时候你可以动态地addView到一个布局当中,也希望它实现侧滑,所以就产生了ASwipeLayout,该控件不仅支持在R ...

  9. [AHOI2005]洗牌

    题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打 ...

  10. [USACO13OPEN]照片Photo

    题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows (1 <= N < ...