网站建设基本技术,北京 建网站,卫龙的网站做的污污分,担路做网站文章目录 一.什么是Logback1.1 初识Logbcak 二.Logbcak的结构三.日志的级别四.配置组件详解4.1 logger 日志记录器属性的介绍如何在配置文件里配置 4.2 appender 附加器 配合日志记录器的输出格式4.2.1 控制台附加器4.2.2 文件附加器4.3.3滚动文件附加器 4.3 Filter: 过滤器用于根据指定的条件过滤日志。 五.springboot整合logbcak 一.什么是Logback
Logback 旨在作为流行的 log4j 项目的继承者。它是由 log4j 的创始人 Ceki Gülcü 设计的。它建立在十年来设计工业级测井系统的经验之上。由此产生的产品即 logback比所有现有的日志系统速度更快占用空间更小有时甚至相差很大。同样重要的是logback 提供了其他日志系统所缺少的 独特且相当有用的功能。
看了上述文字的说明我们是否对logback还有些困惑我们可以开始使用logback的第一个程序来认识一下logbcak
1.1 初识Logbcak 1.创建Maven项目 2.增加maven依赖 dependencygroupIdch.qos.logback/groupIdartifactIdlogback-classic/artifactIdversion1.2.11/version/dependencydependencygroupIdorg.slf4j/groupIdartifactIdslf4j-log4j12/artifactIdversion1.7.36/version/dependency3.新建第一个helloword程序
package com.gongli;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** Hello world!**/public class App {private static final Logger logger LoggerFactory.getLogger(App.class);public static void main(String[] args) {logger.info(hello world);}
} 这段代码展示了如何使用日志记录器来记录程序的运行信息。它创建了一个名为 App 的类并在其中定义了一个 main 方法。在 main 方法中它使用 LoggerFactory 类获取了一个日志记录器对象并使用该对象记录了一条信息日志。
二.Logbcak的结构
认识到第一个日入门日志以后我们就开始认识Logbcak的结构。如图
Logger, Appender 和 Layouts
Logback 构建在三个主要的类上LoggerAppender 和 Layouts。这三个不同类型的组件一起作用能够让开发者根据消息的类型以及日志的级别来打印日志。 Logger 类作为 logback-classic 模块的一部分。Appender 与 Layouts 接口作为 logback-core 的一部分。作为一个通用的模块logback-core 没有 logger 的概念。
三.日志的级别
在具体了解日志配置文件之间我们必须先知道日志的级别是什么 日志级别用于控制哪些日志会被记录。日志级别从高到低依次为
FATAL: 致命错误表示程序无法继续运行。 ERROR: 错误表示程序发生了错误但仍能继续运行。 WARN: 警告表示程序可能发生错误但不影响程序的正常运行。 INFO: 信息用于记录程序的正常运行状态。 DEBUG: 调试用于记录程序的运行细节。 TRACE: 跟踪用于记录程序的运行轨迹。 大小从上往下依次减小这条规则是 logback 的核心。它假设级别按如下顺序排序 TRACE DEBUG INFO WARN ERROR。
例如以下程序我设父类日志的级别为error 你猜一下子类的日志级别info会正常输出吗 public static void main(String[] args) {//我设父类的日志级别为Infoch.qos.logback.classic.Logger logger1( ch.qos.logback.classic.Logger) LoggerFactory.getLogger(com);logger1.setLevel(Level.ERROR);logger1.info(hello world);}答案是显然不会 我们再来做一个实验如果我们指定了根的日志级别也指定了根的子类级别。你想想看我们的日志级别是遵守根的还是遵守子类的呢话不多说我们来试试看。 public static void main(String[] args) {//我设父类的日志级别为Infoch.qos.logback.classic.Logger logger1( ch.qos.logback.classic.Logger) LoggerFactory.getLogger(com.gongli.App);ch.qos.logback.classic.Logger rootlogger( ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);rootlogger.setLevel(Level.WARN);logger1.setLevel(Level.INFO);System.out.println(logger1.getEffectiveLevel());logger1.trace(hello world);}事实证明在我子类设置的情况下我们会遵循子类的日志级别 从而我们得出一个结论如果子类包没设置级别就会往上一级找如果上一级也没设置就默认日志级别打印。
四.配置组件详解
4.1 logger 日志记录器
属性的介绍
每个记录器Logger的属性有两个属性 name属性:记录器的名称 level尾性(可选): 记录的级别允许的级别从低到高TRACE DEBUGINFO WARNERROR logger.setLevel() logger.getLevel(): logger.getEffectiveLevel() additivity属性(可选): 是否允许爱加打印日志true或false 说明: 1)如果记录器未设置level属性则该记录器的级别从上级记录器继承 2)如果想查看记录器的级别应该通过logger.getEffectiveLevel方法同时要将Logger转为 ch.qos.logback.classic.Logger类型如下: ch.gos.logbackclassic.Logger logger (ch.qos.logbackclassic.Logger) LoggerFactory.getLogger(App.class);
举一个代码的例子你们就懂我在说什么了
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class App {private static final Logger logger LoggerFactory.getLogger(App.class);public static void main(String[] args) {// 设置 logger 的名称logger.setName(MyLogger);// 设置 logger 的级别logger.setLevel(Level.INFO);// 获取 logger 的级别Level level logger.getLevel();// 获取 logger 的有效级别Level effectiveLevel logger.getEffectiveLevel();// 检查 logger 的 additivity 属性boolean additivity logger.isAdditive();System.out.println(logger 的名称 logger.getName());System.out.println(logger 的级别 level);System.out.println(logger 的有效级别 effectiveLevel);System.out.println(logger 的 additivity 属性 additivity);}
}
如何在配置文件里配置
使用logback-test.xml或 logback.xml进行配置 这里分为两步 1.新建一个logback.xml 文件内容如下
configuration xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:noNamespaceSchemaLocationhttp://www.padual.com/java/logback.xsdroot leveldebug // 设置root的/rootlogger namecom.aa levelerror/logger //声明一个记录器
/configuration2.编写java代码 public static void main(String[] args) {ch.qos.logback.classic.Logger rootlogger( ch.qos.logback.classic.Logger) LoggerFactory.getLogger(root);System.out.println(rootlogger.getEffectiveLevel());ch.qos.logback.classic.Logger logger( ch.qos.logback.classic.Logger) LoggerFactory.getLogger(com.aa);System.out.println(logger.getEffectiveLevel());}
}4.2 appender 附加器 配合日志记录器的输出格式
Logback 将写入日志事件的任务委托给称为附加程序的组件。Appender 必须实现该日志记录器的 接口。 常用的附加器如下 控制台附加器:ch.qos.logback.core.ConsoleAppender 文件附加器: ch.qos.logback.core.FileAppender 滚动文件附加器: ch.gos.logback.core.rolling.RollingFileAppender
4.2.1 控制台附加器
控制台附加器ch.qos.logback.core.ConsoleAppender的常用参数如下
name附加器的名称。 encoder编码器。 target目标。默认为 System.out。 encoding编码。默认为 UTF-8。 immediateFlush是否立即刷新。默认为 true。 filter日志过滤器。 以下是这些参数的具体说明 name name 属性指定附加器的名称。名称用于标识附加器。 encoder encoder 属性指定编码器。编码器用于格式化日志。 target target 属性指定目标。目标用于指定日志输出的位置。默认为 System.out。 encoding encoding 属性指定编码。编码用于指定日志的编码格式。默认为 UTF-8。 immediateFlush immediateFlush 属性指定是否立即刷新。如果为 true则日志将在写入到控制台之前立即刷新。如果为 false则日志将在缓冲区满时刷新。 filter filter 属性指定日志过滤器。日志过滤器用于过滤日志。 例子 logback.xml文件配置如下
configuration xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:noNamespaceSchemaLocationhttp://www.padual.com/java/logback.xsd//这里就是声明控制台附加器appender nameSTDOUT classch.qos.logback.core.ConsoleAppenderencoder //日志格式化格式pattern%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n/pattern/encoder/appenderlogger namecom.gongli levelinfo//加入附加器appender-ref refSTDOUT //logger
/configuration代码如下 public static void main(String[] args) {ch.qos.logback.classic.Logger logger1( ch.qos.logback.classic.Logger) LoggerFactory.getLogger(com.gongli.App);logger1.info(hello world);}
}4.2.2 文件附加器
文件附加器ch.qos.logback.core.FileAppender的常用参数如下
name附加器的名称。 file日志文件的路径。 append是否追加日志。默认为 true。 encoder编码器。 rollingPolicy滚动策略。 filter日志过滤器。 以下是这些参数的具体说明 name name 属性指定附加器的名称。名称用于标识附加器。 file file 属性指定日志文件的路径。 append append 属性指定是否追加日志。如果为 true则日志将追加到现有文件中。如果为 false则日志将覆盖现有文件。 encoder encoder 属性指定编码器。编码器用于格式化日志。 rollingPolicy rollingPolicy 属性指定滚动策略。滚动策略用于控制日志文件的滚动方式。 filter filter 属性指定日志过滤器。日志过滤器用于过滤日志。 例子 logbcak.xml文件
configuration xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:noNamespaceSchemaLocationhttp://www.padual.com/java/logback.xsdappender nameSTDOUT classch.qos.logback.core.ConsoleAppenderencoderpattern%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n/pattern/encoder/appenderappender nameFile classch.qos.logback.core.FileAppenderencoderpattern%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n/pattern/encoderfilemyfile.log/file//文档appendtrue/append //是否追加数据/appenderlogger namecom.gongli levelinfoappender-ref refSTDOUT /appender-ref refFile //logger
/configurationjava代码 public static void main(String[] args) {ch.qos.logback.classic.Logger logger1( ch.qos.logback.classic.Logger) LoggerFactory.getLogger(com.gongli.App);logger1.info(hello world);}
}4.3.3滚动文件附加器
这里要特别说明一下这几个参数 Logback 提供了多种滚动策略包括 SizeBasedRollingPolicy根据文件大小滚动日志文件。(ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy) TimeBasedRollingPolicy根据时间滚动日志文件。(ch.qos.logback.core.rolling.TimeBasedRollingPolicy) 说说他们之间的区别 区别
SizeBasedRollingPolicy 和 TimeBasedRollingPolicy 的主要区别在于滚动触发条件的不同。SizeBasedRollingPolicy 的滚动触发条件是文件大小而 TimeBasedRollingPolicy 的滚动触发条件是时间。 例如
appender nameROLLING_FILE classch.qos.logback.core.rolling.RollingFileAppenderfile/var/log/myapp.log/fileappendtrue/appendencoderpattern%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n/pattern/encoderrollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicymaxFileSize10MB /maxFileSize/maxHistory30/maxHistory/rollingPolicy
/appender
在上述配置中maxFileSize 属性指定日志文件的最大大小为 10MB。当日志文件的大小达到 10MB 时将会创建一个新的日志文件并将原来的日志文件重命名为 myapp.log.1。
appender nameROLLING_FILE classch.qos.logback.core.rolling.RollingFileAppenderfile/var/log/myapp.log/fileappendtrue/appendencoderpattern%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n/pattern/encoderrollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicyfileNamePatternmyapp.log.%d{yyyy-MM-dd}/fileNamePatternmaxHistory30/maxHistory/rollingPolicy
/appender在上述配置中fileNamePattern 属性指定新日志文件的文件名模式为 myapp.log.yyyy-MM-dd。也就是说每天将会创建一个新的日志文件。
4.3 Filter: 过滤器用于根据指定的条件过滤日志。
过滤器是附加器的一个组件它用于决定附加器是否输出日志。一个附加器可以包合一个或多个过滤器。 每个过滤器都会返回一个枚举值可选的值: DENY、 NEUTRAL、ACCEPT 附加器根据过滤器返回值判断是否输出日志: DENY : 不输出日志 ACCEPT: 输出日志 NEUTRAL : 中立即不决定是否输出日志 常用的过滤器如下 LevelFilter(级别过滤器): 实现类 ch.qos.logback.classic.filter.LevelFilter ThresholdFilter(闽值过滤器): 实现类 ch.gos.logback.classic.filter.ThresholdFilter EvaluatorFilter(评估者过滤器): 实现类 ch.qos.logback.core.filter.EvaluatorFilter JaninoEventEvaluator过滤器: 实现类 ch.qos.logback.core.filter.EvaluatorFilter TurboFilter涡轮过滤器 DuplicateMessageFilter 重复消息过滤器
这里举一个简单的例子LevelFilter(级别过滤器) appender nameSTDOUT classch.qos.logback.core.ConsoleAppenderencoderpattern%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n/pattern/encoderfilter classch.qos.logback.classic.filter.LevelFilterlevelINFO/levelOnMatchACCEPT/OnMatchonMismatchDENY/onMismatch/filterlogger namecom.gongli levelinfoappender-ref refSTDOUT //logger
具体说明 如果程序记录了一条 INFO 级别的日志由于其级别与 level 属性匹配会被 OnMatch 属性接受因此会输出到控制台。 如果程序记录了一条 DEBUG 级别的日志由于其级别低于 level 属性会被 onMismatch 属性拒绝因此不会输出到控制台。
五.springboot整合logbcak
Spring Boot 默认使用 Logback 作为日志框架。要将 Logback 整合到 Spring Boot 项目中只需在项目的 pom.xml 文件中添加以下依赖
dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-logging/artifactId/dependency
/dependencies
接下来需要在项目的 application.properties 文件中配置 Logback。Logback 的配置文件格式为 XML。可以使用以下示例来配置 Logback
logging.configclasspath:my-logback.xml然后我们在resource下面新建my-logback.xml 文件内容如下
?xml version1.0 encodingUTF-8?
configurationappender nameSTDOUT classch.qos.logback.core.ConsoleAppenderencoderpattern%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n/pattern/encoder/appenderappender nameFILE classch.qos.logback.core.rolling.RollingFileAppenderfilemyapp.log/fileencoderpattern%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n/pattern/encoderrollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicyfileNamePatternmyapp.log.%d{yyyy-MM-dd}/fileNamePatternmaxHistory30/maxHistory/rollingPolicy/appenderlogger namecom.example.myapp levelDEBUGappender-ref refSTDOUT /appender-ref refFILE //loggerroot levelINFOappender-ref refSTDOUT //root/configuration
如果大家想深入了解logbcak建议去它的官网去看看内容给很多我把官网粘在这里里 https://logback.qos.ch/manual/introduction.html