当前位置: 首页 > news >正文

查询价格的网站广州网站制作培训

查询价格的网站,广州网站制作培训,专业做国际网站的公司,深圳网站建设51duoshi查看以下的logback官方文档 Chapter 4: Appendershttps://logback.qos.ch/manual/appenders.html 按文档说明#xff0c;maxHistory是设置保存归档日志的最大数量#xff0c;该数量的单位受到fileNamePattern里的值%d控制#xff0c;如果有多个%d,只能有一个主%d#xff0…    查看以下的logback官方文档 Chapter 4: Appendershttps://logback.qos.ch/manual/appenders.html 按文档说明maxHistory是设置保存归档日志的最大数量该数量的单位受到fileNamePattern里的值%d控制如果有多个%d,只能有一个主%d其他的要用aux参数标记为辅助令牌。 /var/log/%d{yyyy/MM, aux}/myapplication.%d{yyyy-MM-dd}.log 比如上面的fileNamePattern主%d是%d{yyyy-MM-dd}意味着显示的文件名模式按年份和月份组织日志文件夹但每天午夜滚动日志文件。 也就是说maxHistory是归档日志的最大数量该数量的单位可以是多种类型如下 小时、天、周、毫秒、秒、分钟、半天、月。 单位受%d控制。 cleanHistoryOnStart参数用于启动时删除需要删除日志文件如果不配置默认是false意味着启动时不删除日志。 在项目中我们发现当触发日志删除条件时一些历史久远的日志无法删除。那日志的删除逻辑时怎么样的下面我们先做了逻辑总结各位有兴趣可以查看下面的源码分析。 logback是无法删除历史很久远的日志的。比如maxHistory设置为30单位设置为日。那么执行时根据单位删除的是距离今天31天前的到距离今天623132-1天前的日志。 例如今天是2023年10月16日删除的是31天前2023年9月15日到62天前2023年8月15日的日志。 这部分逻辑见以下源码分析 以下是日志配置文件 ?xml version1.0 encodingUTF-8? configuration scantrue scanPeriod10 seconds!-- logger上下文名称根据业务修改 --contextNameMyContextName/contextName!-- 定义了一个名为serverName的属性它的值来自于logging.file.name如果没有找到该属性默认为MyServerName根据业务修改 --springProperty nameserverName sourcelogging.file.name defaultValueMyServerName/springProperty namelogging.path sourcelogging.file.path defaultValue././logs//!-- 彩色日志依赖的渲染类 --!-- 定义了一个名为clr的转换规则它使用org.springframework.boot.logging.logback.ColorConverter类进行转换这个元素通常用于将日志输出中的文本着色以便更容易地区分不同的日志级别或其他信息 --conversionRule conversionWordclr converterClassorg.springframework.boot.logging.logback.ColorConverter/!-- WhitespaceThrowableProxyConverter和ExtendedWhitespaceThrowableProxyConverter都是用于将异常信息转换为字符串并将其中的换行符替换为空格以便更容易地在日志输出中显示的类。它们之间的区别在于ExtendedWhitespaceThrowableProxyConverter在输出异常信息时会包含更多的详细信息例如异常的类名、方法名和行号等 --!-- 定义了一个名为wex的转换规则它使用org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter类进行转换这个元素通常用于将异常信息转换为字符串并将其中的换行符替换为空格以便更容易地在日志输出中显示 --conversionRule conversionWordwexconverterClassorg.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter/!-- 定义了一个名为wEx的转换规则它使用org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter类进行转换这个元素通常用于将异常信息转换为字符串并将其中的换行符替换为空格以便更容易地在日志输出中显示 --conversionRule conversionWordwExconverterClassorg.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter/!-- 彩色日志格式 --!-- value值是日志输出模板 :-是属性名和其默认值之间的分隔符作用与:相同 --!-- 定义日志输出格式的转换规则%d{yyyy-MM-dd HH:mm:ss.SSS}表示日期和时间%clr表示将输出文本着色{faint}表示使用淡色 --!-- %5p表示日志级别输出右对齐左边以空格填充 --!-- ${PID:- }表示进程ID%clr表示将输出文本着色{magenta}表示使用洋红色 --!-- %t显示产生该日志的线程名%15若字符长度小于15则左边用空格填充%.15若字符长度超过15截去多余字符 --!-- %-40若字符长度小于40则右边用空格填充%.40若字符长度超过40截去多余字符logger{39}对应的是“logging.WARNING”级别。具体来说Python的logging模块定义了以下几个级别从低到高NOTSET、DEBUG、INFO、WARNING、ERROR、CRITICAL。因此logger{39}表示的是WARNING级别即日志记录器会记录所有WARNING级别及以上的日志信息 --!-- %m表示日志消息%n表示换行符${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}表示异常信息。如果日志输出中包含异常信息这个规则将会将其转换为字符串并将其中的换行符替换为空格以便更容易地在日志输出中显示 --property nameCONSOLE_LOG_PATTERNvalue${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}}/!--1. 输出到控制台--!-- 定义控制台日志输出的appenderclassch.qos.logback.core.ConsoleAppender表示使用Logback框架提供的ConsoleAppender类来输出日志到控制台 --appender nameCONSOLE classch.qos.logback.core.ConsoleAppender!--此日志appender是为开发使用只配置最底级别控制台输出的日志级别是大于或等于此级别的日志信息--!-- 定义日志输出级别的过滤器classch.qos.logback.classic.filter.ThresholdFilter表示使用Logback框架提供的ThresholdFilter类来过滤日志输出leveldebug/level表示只输出debug级别及以上的日志 --filter classch.qos.logback.classic.filter.ThresholdFilterleveldebug/level/filterencoder!-- ${CONSOLE_LOG_PATTERN}表示控制台日志输出格式UTF-8表示编码格式 --Pattern${CONSOLE_LOG_PATTERN}/Pattern!-- 设置字符集 --charsetUTF-8/charset/encoder/appender!--2. 输出到文档--!-- 2.1 level为 DEBUG 日志时间滚动输出 --!-- 定义文件日志输出的appenderclassch.qos.logback.core.rolling.RollingFileAppender表示使用Logback框架提供的RollingFileAppender类来输出日志到文件 --appender nameDEBUG_FILE classch.qos.logback.core.rolling.RollingFileAppender!-- 正在记录的日志文档的路径及文档名 --file${logging.path}/web_debug.log/file!--日志文档输出格式--encoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/patterncharsetUTF-8/charset !-- 设置字符集 --/encoder!-- 日志记录器的滚动策略按日期按大小记录 --!-- 定义日志文件滚动策略的标签classch.qos.logback.core.rolling.TimeBasedRollingPolicy表示使用Logback框架提供的TimeBasedRollingPolicy类来定义日志文件的滚动策略 --rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy!-- 日志归档 --!-- 定义日志文件名的模式。在这个模式中${logging.path}表示日志文件的路径%d{yyyy-MM-dd}表示日期格式%i表示文件索引 --fileNamePattern${logging.path}/web-debug-%d{yyyy-MM-dd}.%i.log/fileNamePattern!-- 定义日志文件滚动策略的标签classch.qos.logback.core.rolling.SizeAndTimeBasedFNATP表示使用Logback框架提供的SizeAndTimeBasedFNATP类来定义日志文件的滚动策略maxFileSize100MB/maxFileSize表示日志文件的最大大小为100MB。这个滚动策略通常用于按照时间和文件大小滚动日志文件以便更好地管理日志文件的大小和数量 --timeBasedFileNamingAndTriggeringPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedFNATPmaxFileSize100MB/maxFileSize/timeBasedFileNamingAndTriggeringPolicy!--日志文档保留天数--maxHistory30/maxHistory/rollingPolicy!-- 此日志文档只记录debug级别的 --!-- 定义日志输出级别的过滤器。在这个过滤器中classch.qos.logback.classic.filter.LevelFilter表示使用Logback框架提供的LevelFilter类来过滤日志输出leveldebug/level表示只输出debug级别及以上的日志 --filter classch.qos.logback.classic.filter.LevelFilterleveldebug/level!-- onMatchACCEPT/onMatch表示如果日志事件与过滤器匹配则接受该事件onMismatchDENY/onMismatch表示如果日志事件与过滤器不匹配则拒绝该事件 --onMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appender!-- 2.2 level为 INFO 日志时间滚动输出 --appender nameINFO_FILE classch.qos.logback.core.rolling.RollingFileAppender!-- 正在记录的日志文档的路径及文档名 --file${logging.path}/web_info.log/file!--日志文档输出格式--encoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/patterncharsetUTF-8/charset/encoder!-- 日志记录器的滚动策略按日期按大小记录 --rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy!-- 天天日志归档路径以及格式 --fileNamePattern${logging.path}/web-info-%d{yyyy-MM-dd}.%i.log/fileNamePatterntimeBasedFileNamingAndTriggeringPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedFNATPmaxFileSize100MB/maxFileSize/timeBasedFileNamingAndTriggeringPolicy!--日志文档保留天数--maxHistory30/maxHistory/rollingPolicy!-- 此日志文档只记录info级别的 --filter classch.qos.logback.classic.filter.LevelFilterlevelinfo/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appender!-- 2.3 level为 WARN 日志时间滚动输出 --appender nameWARN_FILE classch.qos.logback.core.rolling.RollingFileAppender!-- 正在记录的日志文档的路径及文档名 --file${logging.path}/web_warn.log/file!--日志文档输出格式--encoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/patterncharsetUTF-8/charset !-- 此处设置字符集 --/encoder!-- 日志记录器的滚动策略按日期按大小记录 --rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicyfileNamePattern${logging.path}/web-warn-%d{yyyy-MM-dd}.%i.log/fileNamePatterntimeBasedFileNamingAndTriggeringPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedFNATPmaxFileSize100MB/maxFileSize/timeBasedFileNamingAndTriggeringPolicy!--日志文档保留天数--maxHistory30/maxHistory/rollingPolicy!-- 此日志文档只记录warn级别的 --filter classch.qos.logback.classic.filter.LevelFilterlevelwarn/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appender!-- 2.4 level为 ERROR 日志时间滚动输出 --appender nameERROR_FILE classch.qos.logback.core.rolling.RollingFileAppender!-- 正在记录的日志文档的路径及文档名 --file${logging.path}/web_error.log/file!--日志文档输出格式--encoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/patterncharsetUTF-8/charset !-- 此处设置字符集 --/encoder!-- 日志记录器的滚动策略按日期按大小记录 --rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicyfileNamePattern${logging.path}/web-error-%d{yyyy-MM-dd}.%i.log/fileNamePatterntimeBasedFileNamingAndTriggeringPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedFNATPmaxFileSize100MB/maxFileSize/timeBasedFileNamingAndTriggeringPolicy!--日志文档保留天数--maxHistory30/maxHistory/rollingPolicy!-- 此日志文档只记录ERROR级别的 --filter classch.qos.logback.classic.filter.LevelFilterlevelERROR/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appender!-- 4.1 开发环境:打印控制台--!-- 用于在Spring Boot应用程序中配置日志记录的标签。在这个标签中namedev表示这个配置文件只在dev环境中生效logger namecom.myClass.controller leveldebug/表示为com.myClass.controller根据业务修改这个包下的类配置日志输出级别为debug --springProfile namedevlogger namecom.myClass.controller leveldebug//springProfile!-- 用于配置日志输出的标签。在这个标签中levelinfo表示日志输出级别为infoappender-ref refCONSOLE/、appender-ref refDEBUG_FILE/、appender-ref refINFO_FILE/、appender-ref refWARN_FILE/、appender-ref refERROR_FILE/表示将日志输出到不同的appender中分别为控制台、debug文件、info文件、warn文件和error文件 --root levelinfoappender-ref refCONSOLE/appender-ref refDEBUG_FILE/appender-ref refINFO_FILE/appender-ref refWARN_FILE/appender-ref refERROR_FILE//root /configuration在上面的配置文档中如果我们打印一个info级别的日志执行的是以下的策略 在上面的配置文件中发现fileNamePattern中是%d{yyyy-MM-dd}也就是说maxHistory的数量是30单位是天。 当日切时会执行TimeBasedRollingPolicy里的rollover方法。 TimeBasedRollingPolicy.rollover() TimeBasedArchiveRemover.cleanAsynchronously(Date now) ArhiveRemoverRunnable.run() ArhiveRemoverRunnable.clean(Date now) 通过rollover会执行ArhiveRemoverRunnable中的clean方法 public void clean(Date now) {long nowInMillis now.getTime();//获取要删除的时间段int periodsElapsed this.computeElapsedPeriodsSinceLastClean(nowInMillis);this.lastHeartBeat nowInMillis;if (periodsElapsed 1) {this.addInfo(Multiple periods, i.e. periodsElapsed periods, seem to have elapsed. This is expected at application start.);}//循环删除日志文件for(int i 0; i periodsElapsed; i) {//获取开端getPeriodOffsetForDeletionTarget返回的值是yaml//配置文件配置的maxHistory - 1//periodsElapsed值是32那么offset的值是-30-1到-30-1-31即-31到-62int offset this.getPeriodOffsetForDeletionTarget() - i;//dateOfPeriodToClean返回的是当前时间31天到62天前的数据Date dateOfPeriodToClean this.rc.getEndOfNextNthPeriod(now, offset);//执行删除动作this.cleanPeriod(dateOfPeriodToClean);}} 分析computeElapsedPeriodsSinceLastClean该方法会计算删除日期范围。 int computeElapsedPeriodsSinceLastClean(long nowInMillis) {long periodsElapsed 0L;if (this.lastHeartBeat -1L) {this.addInfo(first clean up after appender initialization);periodsElapsed this.rc.periodBarriersCrossed(nowInMillis, nowInMillis 2764800000L);periodsElapsed Math.min(periodsElapsed, 336L);} else {periodsElapsed this.rc.periodBarriersCrossed(this.lastHeartBeat, nowInMillis);}return (int)periodsElapsed;} 在上面的代码中可以看到 periodBarriersCrossed方法计算时间段该方法有两个入参分别是start和end上面的代码中可以看到这两个入参传入的值是nowInMillis和nowInMillis 2764800000L。 在periodBarriersCrossed方法中可以看到diff  endFloored - startFloored;而endFloored和startFloored生成使用的是同一个方法同一套规则两者的差异只和入参有关。diff计算出的差值还是2764800000L如果logback-spring.yaml文件里配置的单位是日进入的是以下代码里 case TOP_OF_DAY:return diff / 86400000L; 这段逻辑。2764800000L/86400000L的到的值是32。 public long periodBarriersCrossed(long start, long end) {if (start end) {throw new IllegalArgumentException(Start cannot come before end);} else {long startFloored this.getStartOfCurrentPeriodWithGMTOffsetCorrection(start, this.getTimeZone());long endFloored this.getStartOfCurrentPeriodWithGMTOffsetCorrection(end, this.getTimeZone());long diff endFloored - startFloored;switch(this.periodicityType) {case TOP_OF_HOUR:return (long)((int)diff) / 3600000L;case TOP_OF_DAY:return diff / 86400000L;case TOP_OF_WEEK:return diff / 604800000L;case TOP_OF_MILLISECOND:return diff;case TOP_OF_SECOND:return diff / 1000L;case TOP_OF_MINUTE:return diff / 60000L;case HALF_DAY:default:throw new IllegalStateException(Unknown periodicity type.);case TOP_OF_MONTH:return (long)diffInMonths(start, end);}}} periodsElapsed Math.min(periodsElapsed, 336L);取periodsElapsed和336两者之间的最小值。 最终periodBarriersCrossed返回值为32即时间间隔为32天。 继续分析clean方中cleanPeriod方法源码如下该方法找到传入日期文件夹中的文件列表的执行删除动作 。 public void cleanPeriod(Date dateOfPeriodToClean) {//获取要删除日期文件夹下的文件列表File[] matchingFileArray this.getFilesInPeriod(dateOfPeriodToClean);File[] arr$ matchingFileArray;int len$ matchingFileArray.length;//循环删除日期文件夹下的日志文件for(int i$ 0; i$ len$; i$) {File f arr$[i$];this.addInfo(deleting f);//删除文件f.delete();}if (this.parentClean matchingFileArray.length 0) {File parentDir this.getParentDir(matchingFileArray[0]);this.removeFolderIfEmpty(parentDir);}}
http://www.hkea.cn/news/14340409/

相关文章:

  • 网站改版设计思路郑州网站设计
  • 做杂志的网站有哪些内容莱芜金点子电子版最新招聘信息
  • 简单好看个人主页网站模板专业团队介绍文案
  • 网站建设图片怎么切大连三川建设集团
  • 在那个网站找模具做图片在线转外链
  • 网站建设厌倦西平县住房和城乡建设局网站
  • 跑步机 东莞网站建设网站联系方式设计
  • 螺旋钢管网站建设网站建设 标书
  • 零起飞网站建设工作室seo推广怎么样
  • 苏州优秀网站设计做网站页面视频教学
  • 摄影师作品网站一个网站做无限关键词
  • 网站后台 清理缓存WordPress置顶不生效
  • 可以下载源程序的网站frontpage做网站教程
  • 做网站小程序做一网站要什么时候开始
  • 网站前端设计外包公司地图位置链接怎么做
  • 建站行业发展前景wordpress图片上传慢
  • 无忧主机建站的过程深圳做微商网站的公司
  • 网站建站推广上海市工程建设信息网
  • 免费网站平台推荐有那种网站么
  • 腾讯快速建站平台如何注册一个免费网站
  • 江苏建设标准网站徐州招聘网
  • 400网站建设推广个人外贸网站制作
  • 网站建设的标语2017网站seo如何做
  • 网站文章内容一键排版功能怎么做网站盈利
  • 成都网站seo诊断html做网站的设计
  • 找苏州网站建设wordpress商店如何添加商品
  • 网站运维平台建设原则旅游网站建设策划
  • 传媒公司做网站条件长宁长沙网站建设
  • 深圳网站建设ucreator合肥网站建设公司 推荐
  • 哪个小说网站版权做的好处网站建设所用系统