在SpringBoot中添加Logback日志处理
前言
SpringBoot项目中在官方文档中说明,默认已经依赖了一些日志框架。而其中推荐使用的就是Logback,所以这一次我将在我的模版中加入Logback日志的配置,说明一下,SpringBoot已经依赖了Logback所以不需要手动添加依赖。
已经加入我的github模版中:https://github.com/LinkinStars/springBootTemplate
如何配置
1、在resources目录下新建logback-spring.xml
只要你的名字是logback-spring.xml的话SpringBoot会自动识别和读取它的,所以你就不需要在application.yml进行其他的配置了。
配置文件具体如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<!-- 项目名称 -->
<property name="PROJECT_NAME" value="springBootTemplate" /> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="${catalina.base}/logs" /> <!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<withJansi>true</withJansi>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %highlight([%-5level] %logger{50} - %msg%n)</pattern>
<charset>UTF-8</charset>
</encoder>
</appender> <!-- 系统错误日志文件 -->
<appender name="SYSTEM_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器,只打印ERROR级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/${PROJECT_NAME}.system_error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>15</MaxHistory>
<!--日志文件最大的大小-->
<MaxFileSize>10MB</MaxFileSize>
</rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<logger name="system_error" additivity="true">
<appender-ref ref="SYSTEM_FILE"/>
</logger> <!-- 自己打印的日志文件,用于记录重要日志信息 -->
<appender name="MY_INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器,只打印ERROR级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/${PROJECT_NAME}.my_info.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>15</MaxHistory>
<!--日志文件最大的大小-->
<MaxFileSize>10MB</MaxFileSize>
</rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<logger name="my_info" additivity="true">
<appender-ref ref="MY_INFO_FILE"/>
</logger> <!-- 开发环境下的日志配置 -->
<springProfile name="dev">
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="SYSTEM_FILE" />
</root>
</springProfile> <!-- 生产环境下的日志配置 -->
<springProfile name="prod">
<root level="INFO">
<appender-ref ref="SYSTEM_FILE" />
</root>
</springProfile>
</configuration>
2、其实至此为止你已经可以正常使用你的日志工具了,但是既然是我的模版,我需要给它添加我使用的工具类,从而方便日志的打印
package com.linkinstars.springBootTemplate.utils; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* @Description: 日志工具类
* @Author: LinkinStar
*/
public class LogUtil { /**
* 将信息打印到自定义日志(my_info.log)中
* @param message 需要被打印的信息
*/
public static void printLog(String message){
Logger logger = LoggerFactory.getLogger("my_info"); StringBuffer logOut = new StringBuffer();
logOut.append("\n");
logOut.append(message);
logOut.append("\n"); logger.info(logOut.toString());
} /**
* 将信息打印到自定义日志(system_error.log)中
* @param e 异常信息
*/
public static void printLog(Exception e, Class<?> clazz){
Logger logger = LoggerFactory.getLogger(clazz); StringBuffer logOut = new StringBuffer();
logOut.append("\n");
logOut.append(e.toString());
logOut.append("\n"); StackTraceElement[] errorList = e.getStackTrace();
for (StackTraceElement stackTraceElement : errorList) {
logOut.append(stackTraceElement.toString());
logOut.append("\n");
} logOut.append("\n");
logOut.append("\n"); logger.error(logOut.toString());
} }
这个工具类会根据之后的情况发生改变暂时只是用例
3、日志打印的说明
首先在配置文件中<springProfile name="prod">
当我们在修改
spring:
# 选择加载不同环境的配置文件
profiles:
active: dev
同样的logback这里的配置文件也会读取相应的配置,比如你使用dev那么就会读取dev下的配置,如果你使用prod就会使用prod下的配置。
也就是说等到项目需要上线的时候,你只需修改springBoot的配置文件就可以了,不需要对logback进行修改,就可以实现在生产环境下和开发环境下打印不同的日志级别
在控制台打印的信息经过处理显示的颜色会有不同的区分,很容易发现问题。
还有是日志文件的分类
通过我的工具类中会分离我打印的日志
我将我所需要的重要日志信息打印在my_info文件中去,而重要的错误信息存放在system_error文件中
其他的配置请参考logback配置文件详解等
参考文档
logback官方给出的配置文件说明https://logback.qos.ch/manual/layouts.html#conversionWord
所参考的博客配置:http://blog.csdn.net/tigerd1995/article/details/50845999
在SpringBoot中添加Logback日志处理的更多相关文章
- 在SpringBoot项目中添加logback的MDC
在SpringBoot项目中添加logback的MDC 先看下MDC是什么 Mapped Diagnostic Context,用于打LOG时跟踪一个“会话“.一个”事务“.举例,有一个web ...
- springboot项目配置logback日志系统
记录springboot项目配置logback日志文件管理: logback依赖jar包 SpringBoot项目配置logback理论上需要添加logback-classic依赖jar包: < ...
- SpringBoot(三) - Slf4j+logback 日志,异步请求,定时任务
1.Slf4j+logback 日志 SpringBoot框架的默认日志实现:slf4j + logback: 默认日志级别:info,对应了实际生产环境日志级别: 1.1 日志级别 # 常见的日志框 ...
- 在SpringBoot中使用logback优化异常堆栈的输出
一.背景 在我们在编写程序的过程中,无法保证自己的代码不抛出异常.当我们抛出异常的时候,通常会将整个异常堆栈的信息使用日志记录下来.通常一整个异常堆栈的信息是比较多的,而且存在一些没用的信息.那么我们 ...
- SpringBoot整合Slf4j+logback日志框架
一.Slf4j简单介绍与优势 1.介绍 Slf4j的全称是Simple Loging Facade For Java(Java简单日志门面),它仅仅是一个为Java程序提供日志输出的统一接口,并不是一 ...
- springboo 添加logback日志
springboot默认引入logback相关的jar包 1.在 Application.properties里添加 logging.config=classpath:logback-spring.x ...
- SpringBoot 异步输出 Logback 日志
一.介绍 1.1 Logback Logback是由log4j创始人设计的另一个开源日志组件,它分为下面下个模块: logback-core:其它两个模块的基础模块 logback-classic:它 ...
- Spring Boot中使用logback日志框架
说明:Spring Boot在最新的版本中默认使用了logback框架.一般来说使用时只需在classpath下创建logback.xml即可,而官方推荐使用logback-spring.xml替代, ...
- springboot中使用logback
原文地址:https://blog.csdn.net/tianyaleixiaowu/article/details/73321610 Springboot默认集成的就是logback,logback ...
随机推荐
- vim批量注释
vim批量注释 法一.在vim中 :20,30 s/^/#/g 20-30行 用 # 注释掉.(python是用#注释地---) :20,30 s/^#//g 20-30行 取消注释 法二. 1.多行 ...
- sed运用
流编辑器sed sed简介 sed是stream editor的缩写,一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern ...
- Linux学习笔记一
本文记录了Linux中常用的一些东西. 命令生效顺序 第一顺位执行绝对路径或者相对路径的命令 第二顺位执行别名 第三顺位执行Bash的内部命令 第四顺位执行按照$PATH环境变量设置定义的目录顺序的第 ...
- useradd和adduser
1.Ubuntu中,adduser是一个脚本,而useradd是一个二进制程序,前者对后者进行了封装,更加智能. 2.Centos中,adduser和useradd完全相同,adduser是一个符号链 ...
- 使用open-falcon监控Nginx
一.介绍 前段时间部署试用了open-falcon v0.2,官方文档很详细,难度也不是很大.监控Nginx也参考了文档推荐的方式,文档地址:http://book.open-falcon.org/z ...
- windows下安装Python2和Python3共存
一.Python安装 1.下载安装包 https://www.python.org/ftp/python/2.7.14/python-2.7.14.amd64.msi # 2.7安装包 https:/ ...
- ldconfig几个需要注意的地方
1. 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到 2. 想往上面两个目录以外加东西的时候, ...
- iOS-时间戳(或date)转字符串
1.时间戳转字符串 ///时间戳转化为字符转0000-00-00 00:00 + (NSString *)time_timestampToString:(NSInteger)timestamp{ NS ...
- BZOJ 2754: [SCOI2012]喵星球上的点名 [AC自动机+map+暴力]
2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1902 Solved: 837[Submit][St ...
- 51Nod 欢乐手速场1 B 序列变换[容斥原理 莫比乌斯函数]
序列变换 alpq654321 (命题人) 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 lyk有两序列a和b. lyk想知道存在多少对x,y,满足以下两个条件. 1:gcd( ...