一、介绍
1.1 Logback
Logback是由log4j创始人设计的另一个开源日志组件,它分为下面下个模块:
1.2 日志级别
包括:TRACE、DEBUG、INFO、WARN 和 ERROR。
1.2.1 TRACE
特别详细的系统运行完成信息,业务代码中,不要使用。(除非有特殊用意,否则请使用DEBUG级别替代)
1.2.2 DEBUG
1.2.3 INFO
系统运行信息
外部接口部分
说明
1.2.4 WARN
1.2.5 ERROR
影响到程序正常运行、当前请求正常运行的异常情况:
不应该出现的情况:
如果进行了抛出异常操作,请不要记录ERROR日志,由最终处理方进行处理:
反例(不要这么做):
try{ .... }catch(Exception ex){ String errorMessage=String.format("Error while reading information of user [%s]",userName); logger.error(errorMessage,ex); throw new UserServiceException(errorMessage,ex); }
1.3 SpringBoot 中 logback
二、logback 配置
2.1 配置文件logback-spring.xml示例
<?xml version="1.0" encoding="utf-8"?> <configuration> <!-- 属性文件:在配置文件中找到对应的配置项 --> <springProperty scope="context" name="logPath" source="logging.path"/> <!-- 输出到控制台 --> <appender name="CONSOLE-LOG" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n</pattern> </layout> </appender> <!-- 获取比info级别高(包括info级别)但除error级别的日志 --> <appender name="INFO-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 指定过滤策略 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch> </filter> <encoder> <!-- 指定日志输出格式 --> <pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n</pattern> </encoder> <!-- 指定收集策略:滚动策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 指定生成日志保存地址 --> <fileNamePattern>${logPath}/info.%d.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> </appender> <appender name="ERROR-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 指定过滤策略 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <encoder> <!-- 指定日志输出格式 --> <pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n</pattern> </encoder> <!-- 指定收集策略:滚动策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--指定生成日志保存地址 --> <fileNamePattern>${logPath}/error.%d.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> </appender> <!-- 异步输出 --> <appender name="ASYNC-INFO" class="ch.qos.logback.classic.AsyncAppender"> <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --> <discardingThreshold>0</discardingThreshold> <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --> <queueSize>256</queueSize> <!-- 添加附加的appender,最多只能添加一个 --> <appender-ref ref="INFO-LOG"/> </appender> <appender name="ASYNC-ERROR" class="ch.qos.logback.classic.AsyncAppender"> <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --> <discardingThreshold>0</discardingThreshold> <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --> <queueSize>256</queueSize> <!-- 添加附加的appender,最多只能添加一个 --> <appender-ref ref="ERROR-LOG"/> </appender> <!-- 指定最基础的日志输出级别 --> <root level="info"> <appender-ref ref="CONSOLE-LOG" /> <appender-ref ref="INFO-LOG" /> <appender-ref ref="ERROR-LOG" /> </root> </configuration>
项目配置文件中配置日志输出地址
logging: path: ./logs
2.2 标签说明
三、 源码
Github 示例源码
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对小牛知识库的支持。
我的springboot项目中想要异步打印日志到文件,对 logback 做了如下配置 java的controller中使用下面代码打印日志 在日志文件中打印出线程名称,同时在IDEA控制台中也打印线程名称,照理说如果是异步写入的日志这两处的线程名称应该不一样,结果日志文件中输出的结果是 控制台中输出的是 线程ID和名称分别是:86 / http-nio-7076-exec-2 两处的线程名称一样
我需要选择一个日志框架来替换log4j。我最初选择slf4j logback作为日志记录,并编写了以下配置,将应用程序日志和apache cxf的日志输出到单独的文件中,并在控制台上输出Spring/hibernate日志: 然而,我开始了解log4j2中的异步日志记录,我想在我的设置中使用log4j2实现异步日志记录,为此我编写了以下配置: log4j2配置可以工作,但它只在文件(app_log
本文向大家介绍SpringBoot中logback日志保存到mongoDB的方法,包括了SpringBoot中logback日志保存到mongoDB的方法的使用技巧和注意事项,需要的朋友参考一下 Springboot默认集成的就是logback,logback相对来说是优秀于log4j的,log4j2也是参考了logback的设计。 自定义Appender非常简单,继承一下AppenderBas
本文向大家介绍springboot使用Logback把日志输出到控制台或输出到文件,包括了springboot使用Logback把日志输出到控制台或输出到文件的使用技巧和注意事项,需要的朋友参考一下 一:日志: 1、配置日志级别 日志记录器(Logger)的行为是分等级的。如下表所示: 分为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL 默认情况下,spring boot
本文向大家介绍SpringBoot异步任务使用方法详解,包括了SpringBoot异步任务使用方法详解的使用技巧和注意事项,需要的朋友参考一下 步骤,如图所示: 1.添加异步任务业务类 2.添加测试控制器 3.添加启动类 4.右键项目Run As启动,访问url 结果: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
正如logback的文档所说,大多数appender本质上是同步的,但是如果我们将appender包装在异步appender中,那么线程将把数据推送到BlockingQueue中,如果有,比如说X-logback线程将从BlockingQueue获取数据并将其追加。这就是我对它的基本理解。 尝试使用JstackThread转储来测试这个。但是空手返回,没有回退线程的线索。 作为参考,请检查下面lo