logback框架之——日志加拿大28源码出售分割所带来的潜在问题

源码:
logback-test.xml文件如下加拿大28源码出售(www.1159880099.com)QQ1159880099 ,有2个需要我们重点关注的参数:
fileNamePattern:这里的日志文件名变动的部分是年月日时,外加1个文件分割自增变量,警告,年月日时的数值依赖于系统时间,自增变量依赖logback框架里运行时的内存变量。
maxFileSize:这里日志文件分割的条件为日志文件大小达到1M。

输出日志的源码如下,需要注意的是:
我们用while循环输出日志,比正常的日志输出强度高许多;
我们的日志内容是"Hello logback, line "+i。

根据源码:
第一步,我们现在要输出10万条日志到日志文件当中,每个文件大小为1MB,如图:
可以看到,实际的文件大小是不确定的1142KB,1152KB,都大于1MB,最后一个日志文件因为还没有填满而小于1MB。这是我们要弄明白的第一个问题,为什么日志文件大小实际上大于我们设定的上限值?
第二步,因为我们是用main方法输出日志,我们再运行一遍就相当于服务器重启一遍,这个时候我们把日志输出内容换成,“Hello logback, line ++++++”+i。
先看文件数量,循环次数相同,新增的日志文件数量是6个,前面0~6个文件是第一步里运行得到的,后面的7~12是这次生成的。
对比两张图里前面7个文件0~6,6号分割文件大小发生变化我们容易理解,但是0~5这6个文件怎么都增加了,这是我们要回答的第二个问题?
logback日志分割问题分析:
第一个问题:为什么日志分割实际大小大于设定的上限值?
原因分析:
一个日志文件分割时,有两个操作:
比较当前日志文件与设定值的大小,判断是否分割;
只要还未完成分割,持续向当前日志文件写入日志。
当你还在比较的时候,我已经输出几百米了。。。行。。。。
当判断出日志文件大小已经达到预定值的瞬间,日志文件还未进行分割,而此时日志文件仍然被写入日志。故正常情况下,日志文件的实际大小通常要大于设定值的大小。
超出多少:日志文件实际超出预定值的大小size,基本上取决于判定出日志文件大小达到临界值的时间点zeroPoint以后,日志记录的写入相对于日志文件创建的速度。
通常来说,日志在代码中的输出越频繁,超出临界值越多(我们这里的循环输出日志,强度是很大的)。
诡谲:JIT在作祟?多次重复以上的单个步骤,观察日志分割文件大小,我们不难发现,日志文件列表的开头几个文件总是比后面的日志文件要小一些。换句话说,运行时的日志输出速度发生了变化,我猜想这里极有可能是因为while循环被JIT编译器检测到为热点代码,所以进行了再编译,从而使日志的输出速度变得更快,导致后面的日志文件更大些。
第二个问题:为什么“重启”后,原本应该锁定的日志文件,再次被输入日志?
证据:检查0~6号文件的末尾,我们都可以发现“Hello logback, line ++++++”+i,这段记录的存在。也就是说,“重启”之前的、按理说已经“满格”达到上限值日志文件,在“重启”后,发生了日志再次写入的问题。
原因分析:
日志名称:test-log.2018-08-14-13.0.log。文件名称精确到小时,我们“重启”前后,都是在同一天的13点!
日志名称的变化依赖于时间,以及分割序号,时间由操作系统决定,分割序号由logback框架决定。分割序号对应的变量值是没有持久化的!一旦重启,就只能重头开始,所以在同一个时间段(这里是同一天的同一个小时)里发生重启,不会新建日志文件,而是在原有的日志里追加记录;
第一个问题里已经说了,日所以志文件在比较的时候(还未比较完成时),仍然在进行日志输出,所以日志文件会变大。

原文地址:http://blog.51cto.com/13923101/2159883

时间: 2024-07-31 01:16:56

logback框架之——日志加拿大28源码出售分割所带来的潜在问题的相关文章

遇见大数据可视化 : 那些幸运28 加拿大28 源码 WOW 的数据可视化案例

幸运28 加拿大28 源码[大神源码论坛]dsluntan.com  [布丁源码论坛]budingbbs.com 企娥3393756370 . 数据可视化的内涵并非只是专业人员才能看得的懂的图表,当你想要通过数据来宣传证明自己时,你遇到的问题是大多数人并不能看懂你的图表.那么让数据可视化的过程更加的生动有趣.通俗易懂就显的尤为重要了. 如何才能让数据可视化在面向普罗大众更容易接受和理解,甚至产生WOW的感觉呢?下面我试着通过一些具体的数据可视化案例来说明. U.S. Gun Deaths "U.

如何使用加拿大28源码下载理解线程池

平时接触过加拿大28源码下载[dashengba.com]Q3266397597多线程开发的童鞋应该都或多或少了解过线程池,之前发布的<阿里巴巴 Java 手册>里也有一条:可见线程池的重要性.简单来说使用线程池有以下几个目的:线程是稀缺资源,不能频繁的创建.解耦作用:线程的创建于执行完全分开,方便维护.应当将其放入一个池子中,可以给其他任务进行复用.线程池原理谈到线程池就会想到池化技术,其中最核心的思想就是把宝贵的资源放到一个池子中:每次使用都从里面获取,用完之后又放回池子供其他人使用,有点

js实现把一个页面层数据幸运28源码出售传递到另一个页面

由于之前面试,被问到过此问题幸运28源码出售(www.1159880099.com)QQ1159880099,所以今天特意整理了一下.由于自己技术水平有限,若存在错误,欢迎提出批评. 本博客整理了两种方式从一个页面层向另一个页面层传递参数. 一. 通过cookie方式 传递cookie页面的html,此处命名为a.html请输入用户名和密码:<input id="userName" type="text" /><input id="pas

当亲戚问你工资幸运28源码出售,程序猿如何作答,简直不能再机智

有一次幸运28源码出售 <Q> 2952777280[链接] huaxianym.com,我去同学家吃饭.他有个亲戚从老家来看病,住在他家.同学管亲戚喊老舅,我们也都跟着喊舅.老舅长老舅短的一喊,亲戚高兴了,把我们都当成亲外甥了,挨个问我们一月挣多少钱. 老家的风俗很淳朴,淳朴到根本不会把你当外人. 有个在部委工作的,我们亲切地叫他毛部. 毛部说一个月拿四千块.老舅眉头一皱:不可能! 老舅说在诳他. 毛部只好说,还有点补贴. 老舅问补贴多少. 毛部说几百块. 老舅:不止吧? 毛部笑了:有时候也

PC蛋蛋APP搭建加拿大开发北京全系列28APP开发H5定制加拿大28源码,,幸运飞艇定制开发

2019最新八合一程序完美源码.包搭建,包安装,包维护,一条龙服务,让你省心省力. 目前 正在运营,全网独家支持在线充值和在线兑换!让您无需人工操作! 市面上只出售月租版,我们直接提供源码供您无限搭建,永久使用,提供售后 需要提供服务器和域名和微信公众服务号! 没有公众服务号可以找我代买, 本源码用于学习和研究,请勿用于其他非法行为,如有违法一切后果自己承担 客服微信:baozicmshm 原文地址:https://www.cnblogs.com/baozicms/p/10785644.html

Mysql系列二:Centos7.4安装mysql5.7.28源码

本文为博客Mysql系列二:Centos7.4安装mysql5.7.28源码 mysql安装方法有多种,以Centos7为例,可以官网下载编译好的二进制代码进行安装,可以官网下载rpm包进行yum install rpm包进行安装,本文我们介绍官网下载源码自行编译安装. 根据Mysql系列一下载的源码,我们开始安装mysql源码,安装方法希望大家多从官网的document上阅读,吸取精髓,安装方法和顺序并不唯一,如下内容可供参考. 基础环境: yum install -y ntp wget cu

mysql 5.6.28源码安装

众所周知,mysql5.5版本之前都是通过./configure进行编译环境检查,mysql5.5之后用的是cmake(包括5.5) 安装前的准备工作: 1.安装epel源 [[email protected] ~]#wget  https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm [[email protected] ~]#rpm -ivh https://dl.fedoraproject.org/pub/

mysql-5.5.28源码安装过程中错误总结

介绍一下关于mysql-5.5.28源码安装过程中几大错误总结,希望此文章对各位同学有所帮助.系统centOS 6.3 mini (没有任何编译环境)预编译环境首先装了众所周知的 cmake(yum install cmake -y) 复制代码 代码如下: ../bootstrap Error when bootstrapping CMake: Cannot find appropriate C compiler on this system. Please specify one using

NoHttp和OkHttp的无缝结合 NoHttp框架作者带你看源码(二)

NoHttp和OkHttp的无缝结合 NoHttp框架作者带你看源码(二) 版权声明:转载必须注明本文转自严振杰的博客: http://blog.csdn.net/yanzhenjie1003 上一次带大家分析了NoHttp源码,知道我们可以替换NoHttp的底层为其他任何库,例如OkHttp.HttpURLConnection.HttpClient,那今天就带领大家一步步来实现替换NoHttp的底层为OkHttp. NoHttp源码分析的博客:http://blog.csdn.net/yanz