gradle 构建的 Spring Boot 使用 logback
文章讲的是配置和使用,入门请看文档先。
what
目的: 可以实现log不同级别的日志记录,例如info 在一个文件夹内,另一个级别的在另一个文件夹内。
how
配置依赖项
1 //log
2 compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
3 compile group: 'ch.qos.logback', name: 'logback-core', version: '1.2.3'
编写配置文件
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--<configuration scan="true" scanPeriod="60 seconds" >-->
3 <configuration >
4
5 <!--<!– 动态日志级别 –>-->
6 <!--<jmxConfigurator/>-->
7 <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
8 <property name="LOG_HOME" value="D:\Log"/>
9 <property name="log.level" value="debug"/>
10 <property name="log.maxHistory" value="30"/>
11
12 <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
13 <encoder>
14 <pattern>%black(Console ) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{10}) %cyan(%message%n)
15 </pattern>
16 </encoder>
17 </appender>
18
19
20 <!-- ERROR级别日志 -->
21 <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender -->
22 <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
23 <!-- 过滤器,只记录WARN级别的日志 -->
24 <!-- 果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。 -->
25 <filter class="ch.qos.logback.classic.filter.LevelFilter">
26 <!-- 设置过滤级别 -->
27 <level>ERROR</level>
28 <!-- 用于配置符合过滤条件的操作 -->
29 <onMatch>ACCEPT</onMatch>
30 <!-- 用于配置不符合过滤条件的操作 -->
31 <onMismatch>DENY</onMismatch>
32 </filter>
33 <!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责触发滚动 -->
34 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
35 <!--日志输出位置 可以是相对和绝对路径 -->
36 <fileNamePattern>
37 ${LOG_HOME}/error/%d{yyyy-MM-dd}/%i.log
38 </fileNamePattern>
39 <!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6, 则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除 -->
40 <maxHistory>${log.maxHistory}</maxHistory>
41 <TimeBasedFileNamingAndTriggeringPolicy
42 class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
43 <!-- 单个log文件超过该大小就会重新建一个log文件-/> -->
44 <MaxFileSize>2MB</MaxFileSize>
45 </TimeBasedFileNamingAndTriggeringPolicy>
46 </rollingPolicy>
47 <encoder>
48 <pattern>
49 <!-- 设置日志输出格式 -->
50 %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
51 </pattern>
52 </encoder>
53 </appender>
54
55
56 <!-- WARN级别日志 appender -->
57 <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
58 <!-- 过滤器,只记录WARN级别的日志 -->
59 <!-- 果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。 -->
60 <filter class="ch.qos.logback.classic.filter.LevelFilter">
61 <!-- 设置过滤级别 -->
62 <level>WARN</level>
63 <!-- 用于配置符合过滤条件的操作 -->
64 <onMatch>ACCEPT</onMatch>
65 <!-- 用于配置不符合过滤条件的操作 -->
66 <onMismatch>DENY</onMismatch>
67 </filter>
68 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
69 <!--日志输出位置 可相对、和绝对路径 -->
70 <fileNamePattern>${LOG_HOME}/warn/%d{yyyy-MM-dd}/%i.log</fileNamePattern>
71 <maxHistory>${log.maxHistory}</maxHistory>
72 <TimeBasedFileNamingAndTriggeringPolicy
73 class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
74 <MaxFileSize>2MB</MaxFileSize>
75 </TimeBasedFileNamingAndTriggeringPolicy>
76 </rollingPolicy>
77 <encoder>
78 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
79 </encoder>
80 </appender>
81
82
83 <!-- INFO级别日志 appender -->
84 <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
85 <filter class="ch.qos.logback.classic.filter.LevelFilter">
86 <level>INFO</level>
87 <onMatch>ACCEPT</onMatch>
88 <onMismatch>DENY</onMismatch>
89 </filter>
90 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
91 <fileNamePattern>${LOG_HOME}/info/%d{yyyy-MM-dd}/%i.log</fileNamePattern>
92 <maxHistory>${log.maxHistory}</maxHistory>
93 <TimeBasedFileNamingAndTriggeringPolicy
94 class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
95 <MaxFileSize>2MB</MaxFileSize>
96 </TimeBasedFileNamingAndTriggeringPolicy>
97 </rollingPolicy>
98 <encoder>
99 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
100 </encoder>
101 </appender>
102
103
104 <!-- DEBUG级别日志 appender -->
105 <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
106 <filter class="ch.qos.logback.classic.filter.LevelFilter">
107 <level>DEBUG</level>
108 <onMatch>ACCEPT</onMatch>
109 <onMismatch>DENY</onMismatch>
110 </filter>
111 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
112 <fileNamePattern>${LOG_HOME}/debug/%d{yyyy-MM-dd}/%i.log</fileNamePattern>
113 <maxHistory>${log.maxHistory}</maxHistory>
114 <TimeBasedFileNamingAndTriggeringPolicy
115 class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
116 <MaxFileSize>2MB</MaxFileSize>
117 </TimeBasedFileNamingAndTriggeringPolicy>
118 </rollingPolicy>
119 <encoder>
120 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
121 </encoder>
122 </appender>
123
124
125 <!-- TRACE级别日志 appender -->
126 <appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">
127 <filter class="ch.qos.logback.classic.filter.LevelFilter">
128 <level>TRACE</level>
129 <onMatch>ACCEPT</onMatch>
130 <onMismatch>DENY</onMismatch>
131 </filter>
132 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
133 <fileNamePattern>${LOG_HOME}/trace/%d{yyyy-MM-dd}/%i.log</fileNamePattern>
134 <maxHistory>${log.maxHistory}</maxHistory>
135 <TimeBasedFileNamingAndTriggeringPolicy
136 class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
137 <MaxFileSize>2MB</MaxFileSize>
138 </TimeBasedFileNamingAndTriggeringPolicy>
139 </rollingPolicy>
140 <encoder>
141 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger - %msg%n</pattern>
142 </encoder>
143 </appender>
144 <!--//原文:https://blog.csdn.net/zzzgd_666/article/details/80458444-->
145
146
147 <!--日志输出级别-->
148 <!--级别:-->
149 <!--trace-debug-info-warn-error-fetal-->
150 <!-- root级别 DEBUG -->
151 <root>
152 <!-- 打印debug级别日志及以上级别日志 -->
153 <level value="${log.level}"/>
154 <!-- 控制台输出 -->
155 <appender-ref ref="console"/>
156 <!-- 文件输出 -->
157 <appender-ref ref="ERROR"/>
158 <appender-ref ref="INFO"/>
159 <appender-ref ref="WARN"/>
160 <appender-ref ref="DEBUG"/>
161 <appender-ref ref="TRACE"/>
162 </root>
163
164 </configuration>
appender 代表的是日志记录器,表示使用何种方式来记录日志, 上面有两个,一种是 console 控制台方式的,一个是以滚动文件的形式来记录文件。
当记录的文件超过一定大小时就会创建新的文件,filter 就是过滤器,会过滤某一种级别的日志。root 元素类有个level 的子元素指定要记录何种级别的日志。
使用
1 public class LogUtil {
2 public static Logger getLogger(Class class1){
3 Logger logger = LoggerFactory.getLogger(class1);
4 return logger;
5 }
6
7 }
8
gradle 构建的 Spring Boot 使用 logback的更多相关文章
- 微服务构建: Spring Boot
在展开 Spring Cloud 的微服务架构部署之前, 我们先了解一下用于构建微服务的基础框架-Spring Boot. 由于 Spring Cloud 的构建基于 Spring Boot 实现, ...
- spring boot 中logback多环境配置
spring boot 配置logback spring boot自带了log打印功能,使用的是Commons logging 具体可以参考spring boot log 因此,我们只需要在resou ...
- 第二章 微服务构建:Spring Boot
此处介绍Spring Boot的目的除了它是Spring Cloud的基础外,也由于其自身的各项优点,如自动化配置.快速开发.轻松部署等,非常适合用作微服务架构中各项具体微服务的开发框架. 本章内容: ...
- 剑指架构师系列-spring boot的logback日志记录
Spring Boot集成了Logback日志系统. Logback的核心对象主要有3个:Logger.Appender.Layout 1.Logback Logger:日志的记录器 主要用于存放日志 ...
- Spring Boot之logback日志最佳实践
一.Spring Boot日志介绍 Spring Boot对所有内部日志记录使用了Commons Logging,但是底层日志实现是开放的.为Java Util日志记录.Log4J2和Logback提 ...
- Spring Boot与Logback的运用(自定义异常+AOP)
在开发以及调试过程中,程序员对日志的需求是非常大的,出了什么问题,都要通过日志去进行排查,但是如果日志不清或者杂乱无章,则不利于维护 这边就比较详细的列举几种类型的日志,供大家参考 首先明白logba ...
- 基于Spring Boot的Logback日志轮转配置
在生产环境下,日志是最好的问题调试和跟踪方法,因此日志的地位是十分重要的.我们平时经常使用的log4j,slf4j,logback等等,他们的配置上大同小异.这里就结合Spring Boot配置一下L ...
- spring boot(13)-logback和access日志
logback logback出自log4j的作者,性能和功能相比log4j作出了一些改进,而配置方法和log4j类似,是spring boot的默认日志组件.在application.propert ...
- spring boot 使用logback日志系统的详细说明
springboot按照profile进行打印日志 log4j logback slf4j区别? 首先谈到日志,我们可能听过log4j logback slf4j这三个名词,那么它们之间的关系是怎么样 ...
随机推荐
- UWA发布 | 2017 Unity手游体检蓝皮书 — ARPG篇
报告目录: 一.ARPG手游总体性能开销分析 二.ARPG手游CPU模块性能开销分析 三.ARPG手游内存模块性能开销分析 四.ARPG手游资源管理分析 五.UWA对于ARPG手游研发团队的建议 一. ...
- 爬虫开发6.selenuim和phantonJs处理网页动态加载数据的爬取
selenuim和phantonJs处理网页动态加载数据的爬取阅读量: 1203 动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/ ...
- Django-04模板层
你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python代码之中. def current_datetime(request): now = datet ...
- IO模型《四》多路复用IO
多路复用IO(IO multiplexing) IO multiplexing这个词可能有点陌生,但是如果我说select/epoll,大概就都能明白了.有些地方也称这种IO方式为事件驱动IO (ev ...
- ELK-Filebeat使用
Beats是用于单用途数据托运人的平台.它们以轻量级代理的形式安装,并将来自成百上千台机器的数据发送到Logstash或Elasticsearch. (画外音:通俗地理解,就是采集数据,并上报到Log ...
- Flink学习笔记:Flink API 通用基本概念
本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...
- js 时间戳的转化,js 日期转成标准字符串,日期格式的相互转化
1.时间的获取 var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1 ...
- lua小试牛刀
function function max(num1, num2) if(num1 > num2) then result = num1; else result = num2; end ret ...
- Advanced-REST-client安装
下载得到Advanced-REST-client_v3.1.9.zip:链接:http://pan.baidu.com/s/1c0vUnJi 密码:z34d这里要说明下,目前谷歌浏览器是不允许安装非谷 ...
- 基础篇:3.1)规范化:3d草绘
本章目的:3d草绘不同于cad工程图,但也有自己的规范要求.草绘要多多练习. 1.建模草图绘制 草图是大多数 3D 模型的基础.通常,创建模型的第一步是绘制草图,随后可以从草图生成特征.将一个或多个特 ...