网站建设预算和流程介绍,佛山网站建设公司,博客网站建设源码,防伪网站怎么做一、logback概述 Logback是由log4j创始人设计的又一个开源日志组件。 Logback当前分成三个模块#xff1a; 1、logback-core, 2、logback- classic 3、logback-access。 1#xff09;logback-core是其它两个模块的基础模块。 2#xff09;logback-…一、logback概述 Logback是由log4j创始人设计的又一个开源日志组件。 Logback当前分成三个模块 1、logback-core, 2、logback- classic 3、logback-access。 1logback-core是其它两个模块的基础模块。 2logback-classic是log4j的一个改良版本。此外logback-classic完整实现SLF4J API。使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。 3)logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。 二、Logback中组件与配置
1logback依赖jar包
dependencygroupIdch.qos.logback/groupIdartifactIdlogback-classic/artifactIdversion1.2.3/version
/dependencySpringBoot项目默认就是使用的就是logback日志系统创建SpringBoot项目时引入的spring-boot-starter或者spring-boot-starter-web依赖jar包中已经包含了spring-boot-starter-logging的依赖里面同时包含多种日志系统依赖如下图所示
包括logback和log4j所以无需额外添加依赖直接配置logback.xml就可以了。
此外如果需要切换为log4j2那么需要在spring-boot-starter-web依赖中排除springboot自带的commons‐logging然后在引入log4j2的依赖jar包如下所示
!--排除 commons‐logging--
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdexclusionsexclusiongroupIdcommons‐logging/groupIdartifactIdcommons‐logging/artifactId/exclusion/exclusions
/dependency
!--引入log4j2 --
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-log4j2/artifactId
/dependency
2相关组件
1、Logger: 日志的记录器主要用于存放日志对象也可以定义日志类型、级别。
2、Appender:用于指定日志输出的目的地目的地可以是控制台、文件、数据库等等。
3、Layout: 负责把事件转换成字符串格式化的日志信息的输出。在Logback中Layout对象被封装在encoder中。也就是说我们使用的encoder其实就是Layout。 与前几个日志框架类似
3日志级别log level 用来控制日志信息的输出从高到低分为共分为七个等级: Aoff 最高等级用于关闭所有日志记录。 Bfatal 指出每个严重的错误事件将会导致应用程序的退出。 Cerror 指出虽然发生错误事件但仍然不影响系统的继续运行。 Dwarm 表明会出现潜在的错误情形。 Einfo 一般和在粗粒度级别上强调应用程序的运行全程。 Fdebug 一般用于细粒度级别上对调试应用程序非常有帮助。 Gall 最低等级用于打开所有日志记录。 4) Logback配置文件
Logback提供了3种配置文件
logback.groovylogback-test.xmllogback.xml常用 如果都不存在则采用默认的配置
配置文件下面会详解。 5什么是logback的context上下文 每一个logger都被关联到一个loggerContext中loggerContext负责生产logger,也负责以树形结构排列各个logger。 logger的获取主要是通过org.slf4j.LoggerFactory的getLogger方法获取。 getLogger方法有两种实现方式 a) getLoggerClass Obj通过传入一个类的形式来进行logger对象和类的绑定。 b) getLoggerString name方式是通过传入一个contextName的形式来指定一个logger。 其中用同一个名字调用该方法获取的永远都是同一个logger对象。 三、logback应用
1入门案例 public static void main(String[] args) {Logger logger LoggerFactory.getLogger(LogDemo.class);logger.trace(trace);logger.debug(debug);logger.info(info);logger.warn(warn);logger.error(error);} 没有加任何配置会使用默认配置但是记得要引入SpringBoot的依赖包。 2logback.xml 配置文件 下面是一个比较完整的示例那这个介绍一下各个标签的含义
?xml version1.0 encodingUTF-8?
!-- scan 当此属性设置为true时配置文件如果发生改变将会被重新加载默认值为true。 --
!-- scanPeriod 设置监测配置文件是否有修改的时间间隔如果没有给出时间单位默认单位是毫秒。当scan为true时此属性生效。默认的时间间隔为1分钟。 --
!-- debug 当此属性设置为true时将打印出logback内部日志信息实时查看logback运行状态。默认值为false。 --
configuration scantrue scanPeriod60 seconds debugfalse!-- 读取application.properties配置 --!-- property resourceapplication.properties /--!-- 生成文件名前缀 --property nameFILE_PREFIX valueyyzRead /!-- 输出文件路径 --property nameOPEN_FILE_PATH valueD:\log_yyzDevelopRead/!-- 文件保存时间 这里是7天 --property nameEXIST_TIME value7/!-- 文件输出格式 --property namePATTERN value%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/!-- 日志文件最大的大小 --property nameMAX_FILE_SIZE value10MB/!-- 控制台输出 --appender nameSTDOUT classch.qos.logback.core.ConsoleAppenderencoderpattern${PATTERN}/patterncharsetUTF-8/charset/encoder/appender!-- 输出到all文件 这里是全部的日志内容 --appender nameOPEN-FILE classch.qos.logback.core.rolling.RollingFileAppender!--不能有这项配置--!--EncodingUTF-8/Encoding--!--File${OPEN_FILE_PATH}/${FILE_PREFIX}.log/File--rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy!--日志文件输出的文件名--FileNamePattern${OPEN_FILE_PATH}/all/${FILE_PREFIX}_%d{yyyy-MM-dd}-%i.log/FileNamePattern!--日志文件保留天数--MaxHistory${EXIST_TIME}/MaxHistoryTimeBasedFileNamingAndTriggeringPolicyclassch.qos.logback.core.rolling.SizeAndTimeBasedFNATP!--日志文件最大的大小--MaxFileSize${MAX_FILE_SIZE}/MaxFileSize/TimeBasedFileNamingAndTriggeringPolicy/rollingPolicylayout classch.qos.logback.classic.PatternLayoutpattern${PATTERN}/pattern/layout/appender!--输出到debug文件--appender namedebug classch.qos.logback.core.rolling.RollingFileAppenderrollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicyFileNamePattern${OPEN_FILE_PATH}/debug/${FILE_PREFIX}_%d{yyyy-MM-dd}-%i.log/FileNamePatternMaxHistory30/MaxHistoryTimeBasedFileNamingAndTriggeringPolicyclassch.qos.logback.core.rolling.SizeAndTimeBasedFNATPMaxFileSize${MAX_FILE_SIZE}/MaxFileSize/TimeBasedFileNamingAndTriggeringPolicy/rollingPolicyappendtrue/appendencoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n/patterncharsetutf-8/charset/encoder!-- 只打印DEBUG日志 --filter classch.qos.logback.classic.filter.LevelFilter!-- 过滤的级别 --levelDEBUG/level!-- 匹配时的操作接收记录 --onMatchACCEPT/onMatch!-- 不匹配时的操作拒绝不记录 --onMismatchDENY/onMismatch/filter/appender!--输出到info文件--appender nameinfo classch.qos.logback.core.rolling.RollingFileAppenderrollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicyFileNamePattern${OPEN_FILE_PATH}/info/${FILE_PREFIX}_%d{yyyy-MM-dd}-%i.log/FileNamePatternMaxHistory30/MaxHistoryTimeBasedFileNamingAndTriggeringPolicyclassch.qos.logback.core.rolling.SizeAndTimeBasedFNATPMaxFileSize${MAX_FILE_SIZE}/MaxFileSize/TimeBasedFileNamingAndTriggeringPolicy/rollingPolicyappendtrue/appendencoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n/patterncharsetutf-8/charset/encoder!-- 只打印INFO日志 --filter classch.qos.logback.classic.filter.LevelFilterlevelINFO/level!-- 匹配时的操作接收记录 --onMatchACCEPT/onMatch!-- 不匹配时的操作拒绝不记录 --onMismatchDENY/onMismatch/filter/appender!--输出到error文件--appender nameerror classch.qos.logback.core.rolling.RollingFileAppenderrollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicyFileNamePattern${OPEN_FILE_PATH}/error/${FILE_PREFIX}_%d{yyyy-MM-dd}-%i.log/FileNamePatternMaxHistory30/MaxHistoryTimeBasedFileNamingAndTriggeringPolicyclassch.qos.logback.core.rolling.SizeAndTimeBasedFNATPMaxFileSize${MAX_FILE_SIZE}/MaxFileSize/TimeBasedFileNamingAndTriggeringPolicy/rollingPolicyappendtrue/appendencoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n/patterncharsetutf-8/charset/encoder!-- 只打印ERROR日志 --filter classch.qos.logback.classic.filter.LevelFilterlevelERROR/level!-- 匹配时的操作接收记录 --onMatchACCEPT/onMatch!-- 不匹配时的操作拒绝不记录 --onMismatchDENY/onMismatch/filter/appender!--输出到warn文件--appender namewarn classch.qos.logback.core.rolling.RollingFileAppenderrollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicyFileNamePattern${OPEN_FILE_PATH}/warn/${FILE_PREFIX}_%d{yyyy-MM-dd}-%i.log/FileNamePatternMaxHistory30/MaxHistoryTimeBasedFileNamingAndTriggeringPolicyclassch.qos.logback.core.rolling.SizeAndTimeBasedFNATPMaxFileSize${MAX_FILE_SIZE}/MaxFileSize/TimeBasedFileNamingAndTriggeringPolicy/rollingPolicyappendtrue/appendencoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n/patterncharsetutf-8/charset/encoder!-- 只打印WARN日志 --filter classch.qos.logback.classic.filter.LevelFilterlevelWARN/level!-- 匹配时的操作接收记录 --onMatchACCEPT/onMatch!-- 不匹配时的操作拒绝不记录 --onMismatchDENY/onMismatch/filter/appender!-- 默认输出info等级然后再根据各自的拦截过滤规则去处理 --root levelinfoappender-ref refSTDOUT/appender-ref refOPEN-FILE/appender-ref refdebug /appender-ref refinfo /appender-ref referror /appender-ref refwarn //root
/configuration3) 配置文件中各个标签介绍
1.logback-spring.xml的配置项
共有一个父标签、两种属性、三个节点: 一个父标签configuration 两种属性contextName和property 三个节点appender、root、logger 2.父标签 configuration
configuration scantrue scanPeriod60 seconds debugfalse
三个属性 1、scan 当此属性设置为true时配置文件如果发生改变将会被重新加载默认值为true 2、scanPeriod 设置监测配置文件是否有修改的时间间隔如果没有给出时间单位默认单位是毫秒。当scan为true时此属性生效。默认的时间间隔为1分钟。 3、debug 当此属性设置为true时将打印出logback内部日志信息实时查看logback运行状态。默认值为false。
3.子节点contextName
contextNamelogback/contextName
每个logger都关联到logger上下文默认上下文名称为“default”。但可以使用contextName设置成其他名字用于区分不同应用程序的记录。一旦设置好就不能修改。可以通过%contextName来打印日志上下文名称一般来说我们不用这个属性可有可无。
4.属性标签property !-- 文件输出格式 --property namePATTERN value%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/
用来定义变量值的标签它有两个属性 name 和 value
name的值是变量的名称value的值是变量的定义的值通过该标签定义的值会被插入到logger上下文中定义变量后可以通过 “ ${变量名} ” 来使用变量 这个标签就是可以把通用的属性设置好如果后面有需要用到的地方可以直接引用。
5.子节点appender !-- 控制台输出 --appender nameSTDOUT classch.qos.logback.core.ConsoleAppenderencoderpattern${PATTERN}/patterncharsetUTF-8/charset/encoder/appender
appender用来格式化日志输出节点有连个属性name和classclass用来指定那种输出策略。 appender跟前几个框架中的用法类似其实可以认为是一个输出器指定输出的名字和样式如果检测到配置文件中有这个输出器就会按照输出器配置的格式输出。 输出策略
1、ConsoleAppender日志输出到控制台类名ch.qos.logback.core.ConsoleAppender。2、FileAppender日志输入到文件类名ch.qos.logback.core.FileAppender。作用是将日志输出到文件。目标文件可以指定如果该文件已经存在它将根据附加属性的值被追加或截断。3、RollingFileAppender滚动记录文件FileAppender的子类当符合条件大小、时间日志进行切分处理类名ch.qos.logback.core.rolling.RollingFileAppender。将FileAppender的功能进行扩展提供了切割日志文件的功能。例如RollingFileAppender可以记录日志到一个名为log.txt的文件一旦满足一定条件将其日志目标更改为另一个文件。在使用时RollingFileAppender必须同时具有RollingPolicy和TriggeringPolicy设置。但是如果它的RollingPolicy也实现TriggeringPolicy接口那么只需要显式地指定前者。4、TimeBasedRollingPolicy时间基准滚动策略可能是最流行的滚动策略。它定义了一个基于时间的滚动策略例如每日或每月。时间的滚动策略承担了翻转的责任同时也承担了触发的滚动。TimeBasedTriggeringPolicy实现了RollingPolicy和TriggeringPolicy接口。类名ch.qos.logback.core.rolling.TimeBasedRollingPolicy5、SizeAndTimeBasedRollingPolicy有时候可能希望按日期对文件进行存档但同时限制每人日志文件的大小这时候可以使用SizeAndTimeBasedRollingPolicy达到目的。类名ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy6、SiftingAppender筛选附加器类名ch.qos.logback.classic.sift.SiftingAppender 他下面有个子节点discriminator辨别discriminator 下有2个子节点key和defaultValue 其实就是定义与MDC关联的变量keyMDC中put的key defaultValue需要我们随便给个值不过最好是有意义的SiftingAppender 下有个sift子节点这个子节点可以按照appender进行配置