最近在学习springboot以及一些springcloud插件的使用,其中发现默认的配置并不能打印一些有用的日志,因此须要自定义一些日志输出方式以便于查看日志排查问题,目前只整理了两种使用方式,以下:php
1 简单日志配置
默认状况下spring boot使用Logback做为日志实现的框架,其内部使用Commons Logging来记录日志,同时也保留外部接口可让一些日志框架来进行实现,
例如Java Util Logging,Log4J2还有Logback,若是你想用某一种日志框架来进行实现的话,就必须先配置。
其中最基础的日志配置就在在resources(即classpath路径)下面建立一个属性文件:application.properties。
1.1 配置控制台日志的level(级别)
默认状况下,spring boot从控制台打印出来的日志级别只有ERROR, WARN 还有INFO,若是你想要打印debug级别的日志,能够经过application.properites配置debug=true
1.2 能够经过logging.level.*配置自定义包的日志输出级别
logging.level.root=INFO
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
1.3 默认状况下spring boot是不将日志输出到日志文件中,但咱们能够配置将日志输出到指定的文件中
logging.file=文件名称
logging.path=文件路径
小提示:在生产环境环境下,你能够经过命令行进行配置日志的debug级别-->java -jar C:\Users\Administrator\Desktop\xx\demo.jar --debug
这里须要注意几点:
这里若不配置具体的包的日志级别,日志文件信息将为空
若只配置logging.path,那么将会在F:\demo文件夹生成一个日志文件为spring.log(ps:该文件名是固定的,不能更改)。若是path路径不存在,会自动建立该文件夹
若只配置logging.file,那将会在项目的当前路径下生成一个demo.log日志文件。这里可使用绝对路径如,会自动在e盘下建立文件夹和相应的日志文件。
logging.file=e:\\demo\\demo.log
logging.path和logging.file同时配置,不会在这个路径有F:\demo\demo.log日志生成,logging.path和logging.file不会进行叠加(要注意)
logging.path和logging.file的value均可以是相对路径或者绝对路径
example:html
-
#采用Logback日志框架输出日志
-
-
#在生产环境环境下,你能够经过命令行进行配置日志的debug级别
-
#java -jar C:\Users\Administrator\Desktop\xx\demo.jar --debug
-
-
#默认状况下,spring boot从控制台打印出来的日志级别只有ERROR, WARN 还有INFO,若是你想要打印debug级别的日志,能够经过application.properites配置debug=
true
-
debug=
true
-
-
#配置logging.level.*来具体输出哪些包的日志级别
-
logging.level.org.springframework.web=DEBUG
-
logging.level.com.xuexin.xcloud.print.service.mapper=DEBUG
-
-
#将日志输出到文件中
-
#默认状况下spring boot是不将日志输出到日志文件中,但你能够经过在application.properites文件中配置logging.file文件名称和logging.path文件路径,将日志输出到文件中
-
logging.file=./xcloud-print.log
-
#logging.path=F:\\demo
-
2.使用logback日志框架
logback日志框架官网:http://logback.qos.ch
2.1 logback日志框架的简介(摘自官网-->英文很差凑合看吧)
Logback is intended as a successor to the popular log4j project, picking up where log4j leaves off.
(Logback旨在做为受欢迎的log4j项目的继承者,它拾起log4j离开的地方。)
Logback's architecture is sufficiently generic so as to apply under different circumstances. At present time, logback is divided into three modules, logback-core, logback-classic and logback-access.
(Logback的架构是很是通用的,以便在不一样的状况下应用。目前,logback分为三个模块:logback-core,logback-classic和logback-access。)
The logback-core module lays the groundwork for the other two modules. The logback-classic module can be assimilated to a significantly improved version of log4j. Moreover, logback-classic natively implements the SLF4J API so that you can readily switch back and forth between logback and other logging frameworks such as log4j or java.util.logging (JUL).
(对数核心模块为其余两个模块奠基了基础。logback-classic模块能够被同化到显着改进的log4j版本。此外,logback-classic本机实现了SLF4J API,以便您能够轻松地在logback和log4j或java.util.logging(JUL)之类的日志记录框架之间来回切换。)
The logback-access module integrates with Servlet containers, such as Tomcat and Jetty, to provide HTTP-access log functionality. Note that you could easily build your own module on top of logback-core.
(回溯访问模块与Servlet容器(如Tomcat和Jetty)集成,以提供HTTP访问日志功能。请注意,您能够轻松地在logback-core之上构建本身的模块。)
2.2 从log4j切换到logback上的缘由(摘自官网)
一、更快的实现 Logback的内核重写了,在一些关键执行路径上性能提高10倍以上。并且logback不只性能提高了,初始化内存加载也更小了。
二、很是充分的测试 Logback通过了几年,数不清小时的测试。Logback的测试彻底不一样级别的。在做者的观点,这是简单重要的缘由选择logback而不是log4j。
三、Logback-classic很是天然实现了SLF4j Logback-classic实现了 SLF4j。在使用SLF4j中,你都感受不到logback-classic。并且由于logback-classic很是天然地实现了SLF4J, 所 以切换到log4j或者其余,很是容易,只须要提供成另外一个jar包就OK,根本不须要去动那些经过SLF4JAPI实现的代码。
四、很是充分的文档 官方网站有两百多页的文档。
五、自动从新加载配置文件 当配置文件修改了,Logback-classic能自动从新加载配置文件。扫描过程快且安全,它并不须要另外建立一个扫描线程。这个技术充分保证了应用程序能跑得很欢在JEE环境里面。
六、Lilith Lilith是log事件的观察者,和log4j的chainsaw相似。而lilith还能处理大数量的log数据 。
七、谨慎的模式和很是友好的恢复 在谨慎模式下,多个FileAppender实例跑在多个JVM下,能 够安全地写道同一个日志文件。RollingFileAppender会有些限制。Logback的FileAppender和它的子类包括 RollingFileAppender可以很是友好地从I/O异常中恢复。
八、配置文件能够处理不一样的状况 开发人员常常须要判断不一样的Logback配置文件在不一样的环境下(开发,测试,生产)。而这些配置文件仅仅只有一些很小的不一样,能够经过,和来实现,这样一个配置文件就能够适应多个环境。
九、Filters(过滤器) 有些时候,须要诊断一个问题,须要打出日志。在log4j,只有下降日志级别,不过这样会打出大量的日志,会影响应用性能。在Logback,你能够继续 保持那个日志级别而除掉某种特殊状况,如alice这个用户登陆,她的日志将打在DEBUG级别而其余用户能够继续打在WARN级别。要实现这个功能只需 加4行XML配置。能够参考MDCFIlter 。
十、SiftingAppender(一个很是多功能的Appender) 它能够用来分割日志文件根据任何一个给定的运行参数。如,SiftingAppender可以区别日志事件跟进用户的Session,而后每一个用户会有一个日志文件。
十一、自动压缩已经打出来的log RollingFileAppender在产生新文件的时候,会自动压缩已经打出来的日志文件。压缩是个异步过程,因此甚至对于大的日志文件,在压缩过程当中应用不会受任何影响。
十二、堆栈树带有包版本 Logback在打出堆栈树日志时,会带上包的数据。
1三、自动去除旧的日志文件 经过设置TimeBasedRollingPolicy或者SizeAndTimeBasedFNATP的maxHistory属性,你能够控制已经产生日志文件的最大数量。若是设置maxHistory 12,那那些log文件超过12个月的都会被自动移除。
总之,logback比log4j太优秀了,让咱们的应用所有创建logback上吧 !
2.3 Logback配置
Logback能够以编程方式配置,也能够配置为以XML或Groovy格式表示的配置脚本。顺便说一下,现有的log4j用户可使用咱们的 PropertiesTranslator Web应用程序将其log4j.properties文件转换 为logback.xml-->地址:https://logback.qos.ch/translator/
让咱们从讨论初始化步骤开始,尝试配置本身:
1.Logback尝试在类路径中找到一个名为logback-test.xml 的文件 。
2.若是没有找到这样的文件,logback尝试在类路径中找到一个名为logback.groovy 的文件 。
3.若是没有找到这样的文件,它会检查classpath中的文件 logback.xml 。
4.If no such file is found, service-provider loading facility (introduced in JDK 1.6) is used to resolve the implementation of com.qos.logback.classic.spi.Configurator interface by looking up the file META-INF\services\ch.qos.logback.classic.spi.Configurator in the class path. Its contents should specify the fully qualified class name of the desired Configurator implementation
5.若是以上都不成功,则logback会自动配置,BasicConfigurator 这将致使日志输出被导向控制台。
java代码使用example:final static Logger logger = LoggerFactory.getLogger(MyApp1.class);logger.info("Entering application.");
小提示:
1.若是您使用Maven,而且将 logback-test.xml放在src / test / resources 文件夹下,Maven将确保它不会包含在生成的工件中。所以,您可使用不一样的配置文件,即测试期间的logback-test.xml,以及生产中的另外一个文件,即logback.xml
2.Logger 能够被分配级别。级别包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定义于 ch.qos.logback.classic.Level类。若是 logger没有被分配级别,那么它将从有被分配级别的最近的祖先那里继承级别。root logger 默认级别是 DEBUG
3.打印方法决定记录请求的级别。例如,若是 L 是一个 logger 实例,那么,语句 L.info("..")是一条级别为 INFO 的记录语句。记录请求的级别在高于或等于其 logger 的有效级别时被称为被启用,不然,称为被禁用。记录请求级别为 p,其logger的有效级别为 q,只有则当 p>=q时,该请求才会被执行。该规则是 logback 的核心。级别排序为: TRACE < DEBUG < INFO < WARN < ERROR
logback日志框架官网:http://logback.qos.ch
2.1 logback日志框架的简介(摘自官网-->英文很差凑合看吧)
Logback is intended as a successor to the popular log4j project, picking up where log4j leaves off.
(Logback旨在做为受欢迎的log4j项目的继承者,它拾起log4j离开的地方。)
Logback's architecture is sufficiently generic so as to apply under different circumstances. At present time, logback is divided into three modules, logback-core, logback-classic and logback-access.
(Logback的架构是很是通用的,以便在不一样的状况下应用。目前,logback分为三个模块:logback-core,logback-classic和logback-access。)
The logback-core module lays the groundwork for the other two modules. The logback-classic module can be assimilated to a significantly improved version of log4j. Moreover, logback-classic natively implements the SLF4J API so that you can readily switch back and forth between logback and other logging frameworks such as log4j or java.util.logging (JUL).
(对数核心模块为其余两个模块奠基了基础。logback-classic模块能够被同化到显着改进的log4j版本。此外,logback-classic本机实现了SLF4J API,以便您能够轻松地在logback和log4j或java.util.logging(JUL)之类的日志记录框架之间来回切换。)
The logback-access module integrates with Servlet containers, such as Tomcat and Jetty, to provide HTTP-access log functionality. Note that you could easily build your own module on top of logback-core.
(回溯访问模块与Servlet容器(如Tomcat和Jetty)集成,以提供HTTP访问日志功能。请注意,您能够轻松地在logback-core之上构建本身的模块。)
2.2 从log4j切换到logback上的缘由(摘自官网)
一、更快的实现 Logback的内核重写了,在一些关键执行路径上性能提高10倍以上。并且logback不只性能提高了,初始化内存加载也更小了。
二、很是充分的测试 Logback通过了几年,数不清小时的测试。Logback的测试彻底不一样级别的。在做者的观点,这是简单重要的缘由选择logback而不是log4j。
三、Logback-classic很是天然实现了SLF4j Logback-classic实现了 SLF4j。在使用SLF4j中,你都感受不到logback-classic。并且由于logback-classic很是天然地实现了SLF4J, 所 以切换到log4j或者其余,很是容易,只须要提供成另外一个jar包就OK,根本不须要去动那些经过SLF4JAPI实现的代码。
四、很是充分的文档 官方网站有两百多页的文档。
五、自动从新加载配置文件 当配置文件修改了,Logback-classic能自动从新加载配置文件。扫描过程快且安全,它并不须要另外建立一个扫描线程。这个技术充分保证了应用程序能跑得很欢在JEE环境里面。
六、Lilith Lilith是log事件的观察者,和log4j的chainsaw相似。而lilith还能处理大数量的log数据 。
七、谨慎的模式和很是友好的恢复 在谨慎模式下,多个FileAppender实例跑在多个JVM下,能 够安全地写道同一个日志文件。RollingFileAppender会有些限制。Logback的FileAppender和它的子类包括 RollingFileAppender可以很是友好地从I/O异常中恢复。
八、配置文件能够处理不一样的状况 开发人员常常须要判断不一样的Logback配置文件在不一样的环境下(开发,测试,生产)。而这些配置文件仅仅只有一些很小的不一样,能够经过,和来实现,这样一个配置文件就能够适应多个环境。
九、Filters(过滤器) 有些时候,须要诊断一个问题,须要打出日志。在log4j,只有下降日志级别,不过这样会打出大量的日志,会影响应用性能。在Logback,你能够继续 保持那个日志级别而除掉某种特殊状况,如alice这个用户登陆,她的日志将打在DEBUG级别而其余用户能够继续打在WARN级别。要实现这个功能只需 加4行XML配置。能够参考MDCFIlter 。
十、SiftingAppender(一个很是多功能的Appender) 它能够用来分割日志文件根据任何一个给定的运行参数。如,SiftingAppender可以区别日志事件跟进用户的Session,而后每一个用户会有一个日志文件。
十一、自动压缩已经打出来的log RollingFileAppender在产生新文件的时候,会自动压缩已经打出来的日志文件。压缩是个异步过程,因此甚至对于大的日志文件,在压缩过程当中应用不会受任何影响。
十二、堆栈树带有包版本 Logback在打出堆栈树日志时,会带上包的数据。
1三、自动去除旧的日志文件 经过设置TimeBasedRollingPolicy或者SizeAndTimeBasedFNATP的maxHistory属性,你能够控制已经产生日志文件的最大数量。若是设置maxHistory 12,那那些log文件超过12个月的都会被自动移除。
总之,logback比log4j太优秀了,让咱们的应用所有创建logback上吧 !
2.3 Logback配置
Logback能够以编程方式配置,也能够配置为以XML或Groovy格式表示的配置脚本。顺便说一下,现有的log4j用户可使用咱们的 PropertiesTranslator Web应用程序将其log4j.properties文件转换 为logback.xml-->地址:https://logback.qos.ch/translator/
让咱们从讨论初始化步骤开始,尝试配置本身:
1.Logback尝试在类路径中找到一个名为logback-test.xml 的文件 。
2.若是没有找到这样的文件,logback尝试在类路径中找到一个名为logback.groovy 的文件 。
3.若是没有找到这样的文件,它会检查classpath中的文件 logback.xml 。
4.If no such file is found, service-provider loading facility (introduced in JDK 1.6) is used to resolve the implementation of com.qos.logback.classic.spi.Configurator interface by looking up the file META-INF\services\ch.qos.logback.classic.spi.Configurator in the class path. Its contents should specify the fully qualified class name of the desired Configurator implementation
5.若是以上都不成功,则logback会自动配置,BasicConfigurator 这将致使日志输出被导向控制台。
java代码使用example:final static Logger logger = LoggerFactory.getLogger(MyApp1.class);logger.info("Entering application.");
小提示:
1.若是您使用Maven,而且将 logback-test.xml放在src / test / resources 文件夹下,Maven将确保它不会包含在生成的工件中。所以,您可使用不一样的配置文件,即测试期间的logback-test.xml,以及生产中的另外一个文件,即logback.xml
2.Logger 能够被分配级别。级别包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定义于 ch.qos.logback.classic.Level类。若是 logger没有被分配级别,那么它将从有被分配级别的最近的祖先那里继承级别。root logger 默认级别是 DEBUG
3.打印方法决定记录请求的级别。例如,若是 L 是一个 logger 实例,那么,语句 L.info("..")是一条级别为 INFO 的记录语句。记录请求的级别在高于或等于其 logger 的有效级别时被称为被启用,不然,称为被禁用。记录请求级别为 p,其logger的有效级别为 q,只有则当 p>=q时,该请求才会被执行。该规则是 logback 的核心。级别排序为: TRACE < DEBUG < INFO < WARN < ERROR
example:
<?xml version="1.0" encoding="UTF-8"?>
<!--<include resource="org/springframework/boot/logging/logback/base.xml" />-->
<!-- 一、logger 5 属性: 6 1)name:用来指定受此logger约束的某一个包或者具体的某一个类 7 2)level:用来设置打印级别,大小写无关(最经常使用的几种):DEBUG, INFO, WARN, ERROR 8 二、 9 -->
<!-- <logger name="org.springframework.web" level="DEBUG" /> -->
<!-- show parameters for hibernate sql 专为 Hibernate 定制 -->
<!--<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />-->
<!--<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />-->
<!--<logger name="org.hibernate.SQL" level="DEBUG" />-->
<!--<logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />-->
<!--<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />-->
<!-- mybatis日志打印 -->
<!-- <logger name="com.ibatis" level="DEBUG" /> -->
<!-- <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG" /> -->
<!-- <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" /> -->
<!-- <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG" /> -->
<!-- <logger name="java.sql.Connection" level="DEBUG" /> -->
<!-- <logger name="java.sql.Statement" level="DEBUG" /> -->
<!-- <logger name="java.sql.PreparedStatement" level="DEBUG" /> -->
<!-- 这一句相当重要若是没有,就没法输出sql语句 -->
<!--<logger name="com.xuexin.xcloud.print.service.mapper" level="DEBUG"></logger>-->
<!-- 说明: 一、日志级别及文件 日志记录采用分级记录,级别与日志文件名相对应,不一样级别的日志信息记录到不一样的日志文件中 例如:error级别记录到log_error_xxx.log或log_error.log(该文件为当前记录的日志文件),而log_error_xxx.log为归档日志, 日志文件按日期记录,同一天内,若日志文件大小等于或大于2M,则按0、一、2...顺序分别命名 例如log-level-2013-12-21.0.log 其它级别的日志也是如此。 二、文件路径 若开发、测试用,在Eclipse中运行项目,则到Eclipse的安装路径查找logs文件夹,以相对路径../logs。 若部署到Tomcat下,则在Tomcat下的logs文件中 三、Appender FILEERROR对应error级别,文件名以log-error-xxx.log形式命名 FILEWARN对应warn级别,文件名以log-warn-xxx.log形式命名 FILEINFO对应info级别,文件名以log-info-xxx.log形式命名 FILEDEBUG对应debug级别,文件名以log-debug-xxx.log形式命名 stdout将日志信息输出到控制上,为方便开发测试使用 -->
<!-- 彩色日志 -->
<!-- 彩色日志依赖的渲染类 -->
<!-- 彩色日志格式 -->
<!--包名输出缩进对齐-->
<!--<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(-){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />-->xcloud-print
<!--设置系统日志目录-->
<!-- 日志记录器,日期滚动记录 -->
<!-- 正在记录的日志文件的路径及文件名 -->${LOG_PATH}/${APPDIR}/xcloud-print_log_error.log
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<!-- 归档的日志文件的路径,例现在天是2013-12-21日志,当前写的日志文件路径为file节点指定,能够将此文件与file指定文件路径设置为不一样路径,从而将当前日志文件或归档日志文件置不一样的目录。 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->${LOG_PATH}/${APPDIR}/error/xcloud-print_log-error-%d{yyyy-MM-dd}.%i.log
<!-- 除按日志记录以外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始, 命名日志文件,例如log-error-2013-12-21.0.log -->12MB
<!-- 追加方式记录日志 -->true
<!-- 日志文件的格式 -->%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%thread] %logger Line:%-3L - %msg%nutf-8
<!-- 此日志文件只记录error级别的 -->errorACCEPTDENY
<!-- 日志记录器,日期滚动记录 -->
<!-- 正在记录的日志文件的路径及文件名 -->${LOG_PATH}/${APPDIR}/xcloud-print_log_warn.log
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<!-- 归档的日志文件的路径,例现在天是2013-12-21日志,当前写的日志文件路径为file节点指定,能够将此文件与file指定文件路径设置为不一样路径,从而将当前日志文件或归档日志文件置不一样的目录。 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->${LOG_PATH}/${APPDIR}/warn/xcloud-print_log-warn-%d{yyyy-MM-dd}.%i.log
<!-- 除按日志记录以外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始, 命名日志文件,例如log-error-2013-12-21.0.log -->12MB
<!-- 追加方式记录日志 -->true
<!-- 日志文件的格式 -->%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%thread] %logger Line:%-3L - %msg%nutf-8
<!-- 此日志文件只记录warn级别的 -->warnACCEPTDENY
<!-- 日志记录器,日期滚动记录 -->
<!-- 正在记录的日志文件的路径及文件名 -->${LOG_PATH}/${APPDIR}/xcloud-print_log_info.log
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<!-- 归档的日志文件的路径,例现在天是2013-12-21日志,当前写的日志文件路径为file节点指定,能够将此文件与file指定文件路径设置为不一样路径,从而将当前日志文件或归档日志文件置不一样的目录。 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->${LOG_PATH}/${APPDIR}/info/xcloud-print_log-info-%d{yyyy-MM-dd}.%i.log
<!-- 除按日志记录以外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始, 命名日志文件,例如log-error-2013-12-21.0.log -->12MB
<!-- 追加方式记录日志 -->true
<!-- 日志文件的格式 -->%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%thread] %logger Line:%-3L - %msg%nutf-8
<!-- 此日志文件只记录info级别的 -->infoACCEPTDENY
<!-- 日志记录器,日期滚动记录 -->
<!-- 正在记录的日志文件的路径及文件名 -->${LOG_PATH}/${APPDIR}/xcloud-print_log_debug.log
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<!-- 归档的日志文件的路径,例现在天是2013-12-21日志,当前写的日志文件路径为file节点指定,能够将此文件与file指定文件路径设置为不一样路径,从而将当前日志文件或归档日志文件置不一样的目录。 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->${LOG_PATH}/${APPDIR}/info/xcloud-print_log-debug-%d{yyyy-MM-dd}.%i.log
<!-- 除按日志记录以外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始, 命名日志文件,例如log-error-2013-12-21.0.log -->12MB
<!-- 追加方式记录日志 -->true
<!-- 日志文件的格式 -->%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%thread] %logger Line:%-3L - %msg%nutf-8
<!-- 此日志文件只记录debug级别的 -->debugACCEPTDENY
<!--encoder 默认配置为PatternLayoutEncoder-->${CONSOLE_LOG_PATTERN}
<!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level -undefinedundefined [%thread] %logger Line:%-3L - %msg%n</pattern>-->utf-8
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->debug
<!-- mybatis日志打印 -->
<!-- 生产环境下,将此级别配置为适合的级别,以避免日志文件太多或影响程序性能 -->
<!-- 生产环境将请stdout,testfile去掉 -->
<!--日志异步到数据库 -->
<!--<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">-->
<!-- <!–日志异步到数据库 –>-->
<!--<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">-->
<!-- <!–链接池 –>-->
<!--<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">-->
<!--<driverClass>com.mysql.jdbc.Driver</driverClass>-->
<!--<url>jdbc:mysql://127.0.0.1:3306/databaseName</url>-->
<!--<user>root</user>-->
<!--<password>root</password>-->
<!--</dataSource>-->
<!--</connectionSource>-->
<!--</appender>-->
原文地址:https://blog.csdn.net/long290046464/article/details/73790203java