springboot集成logback日志 通用logback.xml模板详解
先看Spring Boot中依赖的logback,log4j,slf4j相关Jar包
1.最简单的默认打印控制台日志
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ImportDemoController {
Logger logger= LoggerFactory.getLogger(ImportDemoController.class);@Autowiredprivate User user;@Autowiredprivate ImportDemo importDemo;@Autowiredprivate User01 user01;@Autowiredprivate UserFactoryBean userFactoryBean;@Autowiredprivate UserLazy userLazy;@RequestMapping("/importDemo")public String demo() throws Exception {logger.info("ImportDemoController 开始>>>");importDemo.doSomething();user01.username = "user01";String s = user.username;String s1 = user01.username;String s4 = userFactoryBean.getObject().username;String s5=userLazy.username;logger.info("ImportDemoController 结束<<<");return "ImportDemo@SpringBoot " + s + " " + s1 + " " + s4+ " " + s5;}
}
注意需要引入:org.slf4j相关包。
2.修改日志级别
日志级别 trace<debug<info<warn<error<fatal
默认级别为info,默认打印info及其以上级别的日志,默认不打印debug日志,
public String demo() throws Exception {logger.debug("ImportDemoController 开始>>>");importDemo.doSomething();user01.username = "user01";String s = user.username;String s1 = user01.username;String s4 = userFactoryBean.getObject().username;String s5=userLazy.username;logger.debug("ImportDemoController 结束<<<");return "ImportDemo@SpringBoot " + s + " " + s1 + " " + s4+ " " + s5;}
修改Spring Boot配置文件即可打印debug日志
application.properties
logging.level.root=debug
logging.level设置日志级别,后面跟生效的区域,比如root表示整个项目,也可以设置为某个包下,也可以具体到某个类名(日志级别的值不区分大小写) https://www.cnblogs.com/yanguobin/p/11487667.html
logging.level.root=info就是默认的情况,你改为我上面那样就打印出debug了,开发环境打印,线上是不允许的。
3.使用logback.xml配置文件实现更精细的配置
logback.xml和application.properties放在同一层目录即可,这个logback.xml非常好,源自网络,只要简单修改存储路径和对应的包空间就可以直接在项目中使用了
<?xml version="1.0" encoding="UTF-8"?>
<!-- 配置文件每隔1分钟,就检查更新 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 定义参数常量,便于后面直接用${name}来获取value值 --><property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-5level] %logger{50} - %msg%n"/><!--<property name="log.filePath" value="${catalina.base}/logs/webapps"/>--><property name="log.filePath" value="D:/logs/webapps"/><property name="log.maxHistory" value="30"/><!-- ch.qos.logback.core.ConsoleAppender 控制台输出 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><!-- 过去使用layout,现在都推荐使用encoder作用一:将日志信息转换(格式化)为字符串作用二:然后写入到文件中--><encoder><pattern>${log.pattern}</pattern></encoder></appender><!-- ch.qos.logback.core.rolling.RollingFileAppender 文件日志输出到文件 --><!-- 1.打印debug级别日志的设置 --><appender name="debugAppender"class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 例如当天,也就是今天是2020-2-10,那么在这天生成的日志文件路径为${log.filePath}/debug.log接着到了明天,也就是2019-2-11,这天生成的日志文件路径为${log.filePath}/debug.log,但昨天2020-2-10,生成的日志文件路径就变为${log.filePath}/debug/debug-2020-2-10.log.gz(压缩文件) --><!-- 当天生成的日志文件的路径 --><file>${log.filePath}/debug.log</file><!-- 设置基于时间(每天)的滚动策略,也就是将日志内容按照日期来写入到相应的文件中--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 当天之前的每天生成的日志文件的路径 --><fileNamePattern>${log.filePath}/debug/debug-%d{yyyy-MM-dd}.log.gz</fileNamePattern><!-- 最大历史保存文件的数量,只保存最近30天的日志文件,超出的会被删除--><maxHistory>${log.maxHistory}</maxHistory></rollingPolicy><!-- 过去使用layout,现在都推荐使用encoder作用一:将日志信息转换(格式化)为字符串作用二:然后写入到文件中--><encoder><pattern>${log.pattern}</pattern></encoder><!-- 过滤掉非debug级别的信息 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>debug</level><onMatch>ACCEPT</onMatch><!-- 作用是拒绝写入所有与<level>不匹配的日志信息,也就是非debug级别的日志信息都不会被写入到日志文件中 --><onMismatch>DENY</onMismatch></filter></appender><!-- 2.打印info级别日志的设置 --><appender name="infoAppender"class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 当天生成的日志文件的路径 --><file>${log.filePath}/info.log</file><!-- 设置基于时间(每天)的滚动策略,也就是将日志内容按照日期来写入到相应的文件中--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 当天之前的每天生成的日志文件的路径 --><fileNamePattern>${log.filePath}/info/info-%d{yyyy-MM-dd}.log.gz</fileNamePattern><!-- 最大历史保存文件的数量,只保存最近30天的日志文件,超出的会被删除--><maxHistory>${log.maxHistory}</maxHistory></rollingPolicy><!-- 过去使用layout,现在都推荐使用encoder作用一:将日志信息转换(格式化)为字符串作用二:然后写入到文件中--><encoder><pattern>${log.pattern}</pattern></encoder><!-- 过滤掉非info级别的信息 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>info</level><onMatch>ACCEPT</onMatch><!-- 作用是拒绝写入所有与<level>不匹配的日志信息,也就是非info级别的日志信息都不会被写入到日志文件中 --><onMismatch>DENY</onMismatch></filter></appender><!-- 3.打印error级别日志的设置 --><appender name="errorAppender"class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 当天生成的日志文件的路径 --><file>${log.filePath}/error.log</file><!-- 设置基于时间(每天)的滚动策略,也就是将日志内容按照日期来写入到相应的文件中--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 当天之前的每天生成的日志文件的路径 --><fileNamePattern>${log.filePath}/error/error-%d{yyyy-MM-dd}.log.gz</fileNamePattern><!-- 最大历史保存文件的数量,只保存最近30天的日志文件,超出的会被删除--><maxHistory>${log.maxHistory}</maxHistory></rollingPolicy><!-- 过去使用layout,现在都推荐使用encoder作用一:将日志信息转换(格式化)为字符串作用二:然后写入到文件中--><encoder><pattern>${log.pattern}</pattern></encoder><!-- 过滤掉非error级别的信息 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>error</level><onMatch>ACCEPT</onMatch><!-- 作用是拒绝写入所有与<level>不匹配的日志信息,也就是非error级别的日志信息都不会被写入到日志文件中 --><onMismatch>DENY</onMismatch></filter></appender><!-- 监听com.paopaoedu.springboot包下所有类产生的日志信息不设置additivity属性,那么默认additivity = true,表示会继承父级(在这里它的父级只有root一个),也就是会将日志信息也输出在控制台,但级别会覆盖父级的级别,也就是在控制台会输出debug级别及以上的日志信息 --><logger name="com.paopaoedu.springboot" level="debug"><!-- 表示按照debugAppender的设置去打印日志 --><appender-ref ref="debugAppender"/><!-- 表示按照infoAppender的设置去打印日志 --><appender-ref ref="infoAppender"/><!-- 表示按照errorAppender的设置去打印日志 --><appender-ref ref="errorAppender"/></logger><!-- 也是一种<logger>,是所有<logger>的父级 --><!-- 不设置additivity属性,或者设置additivity = true的<logger>,会继承root的子标签<appender-ref ref="console" />的设置,将它自己设置的level属性级别及以上的日志打印到控制台 --><root level="info"><!-- 表示按照console的设置去输出日志到控制台 --><appender-ref ref="console"/></root>
</configuration>
我的配置是写在D盘log目录下,可以根据需要设置。
相关文章:
【MATLAB】单元数组类型
1、概述 单元(Cell)数组是一种无所不包的广义数组。 组成单元数组的每个元素成为一个单元。 每一个单元可以包括任意数组,如数值数组,字符串数组,结构体数组或另外一个单元数组。 单元数组用花括号来创建“{ }”。…

UNITY3D拓展编辑器 - 目录
前文:最近在自学UNITY3D拓展器,对以上功能点做一些认知范围内的总结.目录:1. 属性编辑器http://weizeteng.blog.51cto.com/5604545/17744312. 工具编辑器3. 场景编辑器转载于:https://blog.51cto.com/weizeteng/1774390

程序员的你还沉浸在大公司就是螺丝钉?小公司锻炼人?错了!看完即懂
刚毕业那会经历过很多所谓创业公司,和很多朋友经历过画大饼,洗脑以及公司上市原始股这样的承诺。当你正在趟过这些谎言你就会发现,在这个世界上能信这些鬼话的也只有涉世未深的毕业生了。小公司里真的就是十几二十几个精英带你一路向前&#…

深入Jetty源码之Servlet框架及实现(AsyncContext、RequestDispatcher、HttpSession)
概述 Servlet是Server Applet的缩写,即在服务器端运行的小程序,而Servlet框架则是对HTTP服务器(Servlet Container)和用户小程序中间层的标准化和抽象。这一层抽象隔离了HTTP服务器的实现细节,而Servlet规范定义了各个类的行为,从…

SpringBoot conditional注解和自定义conditional注解使用
conditional注解是Springboot starter的基石,自动装配的时候会根据条件确定是否需要注入这个类。 含义:基于条件的注解。 作用:根据是否满足某个特定条件来决定是否创建某个特定的Bean。 意义:Springboot实现自动配置的关键基础…
TOPSIS算法及代码
TOPSIS的全称是“逼近于理想值的排序方法” 根据多项指标、对多个方案进行比较选择的分析方法,这种方法的中心思想在于首先确定各项指标的正理想值和负理想值,所谓正理想值是一设想的最好值(方案),它的的各个属性值都…

django框架的基础知识点《贰》
状态保持-----session作用:状态保持与cookie区别: cookie保存在浏览器中 session:保存在服务器中,即python代码运行的那台电脑 支持配置,可以指定保存的位置在django中保存方案: 关系型数据库 内存 关系型数…

Springboot源码分析之内嵌tomcat源码分析
Springboot源码是内嵌tomcat的,这个和完整的tomcat还是不同。 内嵌tomcat的源码在tomcat-embed-core等3个jar包里 展开tomcat-embed-core的catalina目录 再对照下载的apache-tomcat-9.0.31源码 打开bin目录,看到很多库文件比如catalina.jar 再展开看看类…

spring amqp rabbitmq fanout配置
基于spring amqp rabbitmq fanout配置如下: 发布端 <rabbit:connection-factory id"rabbitConnectionFactory" username"guest" password"guest" host"localhost" port"5672"/> <rabbit:template id&qu…

【MATLAB】数组运算
(这里这列举笔者不熟悉的,容易忘的数组运算) 1、数组的转置 >> a[1 2 3 4 5 6 7]a 1 2 3 4 5 6 7>> bab 1234567 2、对数组的赋值 >> a([1 4])[0 0]a 0 2 3 0 5 6 73、注…

RLCenter云平台配置中心
榕力RLCenter云平台配置中心以图形界面的方式实现对云桌面系统的统一管理,包括用户管理、服务器管理、虚拟机管理、策略管理。可配置U盘类设备的读写权限,避免企业敏感信息泄密。实行数据集中存储,支持用户数据进行备份和恢复。 (1)云桌面性能…

SSL/TLS原理详解
本文大部分整理自网络,相关文章请见文后参考。 关于证书授权中心CA以及数字证书等概念,请移步 OpenSSL 与 SSL 数字证书概念贴 ,如果你想快速自建CA然后签发数字证书,请移步 基于OpenSSL自建CA和颁发SSL证书 。 SSL/TLS作为一种互…

SpringBoot源码分析之@Scheduled
Springboot写上注解Scheduled就可以实现定时任务, 这里对其源码做一点分析 Service public class MyScheduled {Scheduled(cron"${time.cron}")void paoapaoScheduled() {System.out.println("Execute at " System.currentTimeMillis());} }…
【MATLAB】矩阵分析之向量和矩阵的范数运算
本片借鉴于 https://blog.csdn.net/u013534498/article/details/52674008 https://blog.csdn.net/left_la/article/details/9159949 向量范数当p1时,即为各个向量的元素绝对值之和 >> norm(x,1)ans 21>> xx 1 2 3 4 5 6>> no…

如何打一个FatJar(uber-jar)
如何打一个FatJar(uber-jar) FatJar也就叫做UberJar,是一种可执行的Jar包(Executable Jar)。FatJar和普通的jar不同在于它包含了依赖的jar包。 1. maven-jar-plugin 例子 <build><finalName>demo</finalName><plugins&g…

JDK源码分析 NIO实现
总列表:http://hg.openjdk.java.net/ 小版本:http://hg.openjdk.java.net/jdk8u jdk:http://hg.openjdk.java.net/jdk8u/jdk8u60/file/d8f4022fe0cd hotspot:http://hg.openjdk.java.net/jdk8u/jdk8u60/hotspot/file/37240c1019fd 调用本地native方法…
Linux进程ID号--Linux进程的管理与调度(三)
进程ID概述 进程ID类型 要想了解内核如何来组织和管理进程ID,先要知道进程ID的类型: 内核中进程ID的类型用pid_type来描述,它被定义在include/linux/pid.h中 enum pid_type {PIDTYPE_PID,PIDTYPE_PGID,PIDTYPE_SID,PIDTYPE_MAX };12345671234567PID 内核…

【MATLAB】矩阵运算之矩阵分解
矩阵分解:把一个矩阵分解成为矩阵连乘的形式。矩阵的分解函数cholCholesky分解cholinc稀疏矩阵的不完全Cholesky分解lu矩阵LU分解luinc稀疏矩阵的不完全LU分解qr正交三角分解svd奇异值分解gsvd一般奇异值分解schur舒尔分解 在MATLAB中线性方程组的求解主要基于四种基…

Java入门—输入输出流
File类的使用 文件是:文件可认为是相关记录或放在一起的数据的集合。 Java中,使用java.io.File类对文件进行操作 public class FileDemo {public static void main(String[] args) {String path "E:\\pdd";File f new File(path);//判断是文…

Web框架基准测试
Web Framework Benchmarks 这是许多执行基本任务(例如JSON序列化,数据库访问和服务器端模板组成)的Web应用程序框架的性能比较。每个框架都在实际的生产配置中运行。结果在云实例和物理硬件上捕获。测试实现主要是由社区贡献的,所…

vsftpd用户配置 No.2
在配置ftp虚拟用户的过程中,还有一种配置方式。yum -y install 安装vsftpdcp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak编辑vsftpd.conf开启下列选项:anonymous_enableNOlocal_enableYESwrite_enableYESlocal_umask022anon_mkdir_write_enab…

【MATLAB】稀疏矩阵(含有大量0元素的矩阵)
1、稀疏矩阵的储存方式 对于稀疏矩阵,MATLAB仅储存矩阵所有非零元素的值及其位置(行号和列号)。 2、稀疏矩阵的生成 1)利用sparse函数从满矩阵转换得到稀疏矩阵函数名称表示意义sparse(A)由非零元素和下标建立稀疏矩阵A。如果A已是…

httpTomcat
Tomcat是web应用服务器的一种 转载于:https://juejin.im/post/5beaf7e451882517165d91d1

memcached(二)事件模型源码分析
在memcachedd中,作者为了专注于缓存的设计,使用了libevent来开发事件模型。memcachedd的时间模型同nginx的类似,拥有一个主进行(master)以及多个工作者线程(woker)。 流程图 在memcached中&…

【MATLAB】MATLAB的控制流
1、if-else-end if expressioncommands1 elseif expression2commands2 ... else commandsn end 2、switch-case switch valuecase1 test1%如果value等于test1,执行command1,并结束此结构command1case2 test2command2...case3 testkcommandk otherw…

Linux查看本机端口
查看指定的端口 # lsof -i:port 查看所有端口 # netstat -aptn 安装telnet #yum install -y telnet.x86_64 #telnet ip 端口

Node.js安装
通过nvm安装 下载nvm并执行wget -qO- https://raw.github.com/creationix/nvm/v0.33.11/install.sh | sh将命令输出到终端命令中~/.bashrcexport NVM_DIR"$HOME/.nvm"更新文件source .bashrc通过nvm安装node.jsnvm install 10.13安装的版本是10.13的版本 通过命令查看…

mongodb常用语句以及SpringBoot中使用mongodb
普通查询 某个字段匹配数组内的元素数量的,假如region只有一个元素的 db.getCollection(map).find({region:{$size:1}}) 假如region只有0个元素的 db.getCollection(map).find({region:{$size:0}}) db.getCollection(map).find({region:{$size:1}}).count() db.get…

2002高教社杯---A车灯线光源的优化设计
A题 车灯线光源的优化设计 安装在汽车头部的车灯的形状为一旋转抛物面,车灯的对称轴水平地指向正前方, 其开口半径36毫米,深度21.6毫米。经过车灯的焦点,在与对称轴相垂直的水平方向,对称地放置一定长度的均匀分布的线光源。要求…

从Date类型转为中文字符串
//主方法public static String DateToCh(Date date) {Calendar cal Calendar.getInstance();cal.setTime(date);int year cal.get(Calendar.YEAR);int month cal.get(Calendar.MONTH) 1;int day cal.get(Calendar.DAY_OF_MONTH);return getYear(year) getTenString(month…