log4j无厘头异常

  今天系统升级,是web程序,备份程序之后,替换class下面的com的全部类文件后shutdown   tomcat,然后启动程序,startup之后出现

java.lang.NullPointerException 
at org.apache.log4j.spi.LocationInfo.<init>(LocationInfo.java:104) 
at org.apache.log4j.spi.LoggingEvent.getLocationInformation(LoggingEvent.java:191) 
at org.apache.log4j.helpers.PatternParser$LocationPatternConverter.convert(PatternParser.java:483)
at org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:64) 
at org.apache.log4j.PatternLayout.format(PatternLayout.java:503) 
at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:301) 
at org.apache.log4j.WriterAppender.append(WriterAppender.java:159) 
Exception in thread "Thread-1" at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230) 
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
at org.apache.log4j.Category.callAppenders(Category.java:203) 
at org.apache.log4j.Category.forcedLog(Category.java:388) 
at org.apache.log4j.Category.info(Category.java:663) 
at cn.sh.flyhyp.kvdb.service.NodeService.onSystemExist(NodeService.java:55) 
at cn.sh.flyhyp.kvdb.service.NodeService$1.run(NodeService.java:40)

一开始以为是log4j的问题,快速找资料,进行回滚。用原来的备份的整个工程恢复,删除正在运行的程序

启动,发现还是一样的错,就奇怪了。

 

  这个时候我就停掉了程序,因为之前的日志太多了,有800多M(你肯定会觉得有问题,是的,我也这样认为。日志不应该有这么多。即使这么多,也应该使用log4j的分多个文件的配置,不然的话,文件会巨大到你无法打开。这么多的日志是因为:系统与第三方合作,需要积累原始报文,进行问题定位,交流

 

  没有办法打开,这个时候,我就想把原来的日志备份,这个时候停掉程序之后,发现日志还在刷。

  我记得log4j是使用缓存的,那么这些日志是刚才启动的系统的日志输出并不代表现在启动的程序有问题所以将原有日志备份,清空日志=


那么就奇怪了,那么之前的升级怎么会有问题呢

 

  这个就奇怪了了,什么回事啊。这个包从测试环境拿过来的,都验证过的了啊,这个时候就就查看系统信息,grep之后发现,尼玛

  怎么又两个进程在跑。原来由于日志文件并发太大,日志刷太猛了,shutdown命令不能关闭tomcat,需要等log4j输出完成之后才能关闭。之前一直使用kill来关闭进程,今天使用shutdown就出问题了,尼玛就关闭不了了。

 

两个相同的程序同时大量并发写文件,受不了啊。所以就报错了,又吓死哥一场。

 

  • 总结与反思:

  1、双机互备

  虽然当前系统的业务量和负载在一个很小的值,但是对于系统的稳定性来说,还是有一定的要求。特别是在今天这种情况。如果存在双机互备的情况,那么就可以升级的时候,做到几乎业务的零影响。公司的其他系统都是这样做的了,所以会在之后进行双机互备。

 

  2、是否可以考虑使用probe等工具进行tomcat的管理。

  由于系统是使用自定义的框架系统,并没有如spring那样的提供动态更改日志级别的功能。但是probe提供了对tomcat中的工程动态刷新日志配置信息的功能。是否值得接入??

  但是probe在网上看资料分析,probe已经很久没有更新,并且存在一定的性能消耗。所以在对性能的评测出来之前,不建议使用。

  可行方案为添加动态刷新日志级别的接口,提供日志配置的动态修改。

转载于:https://www.cnblogs.com/evermaze/p/log4jerror.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

res_config_mysql和chan_sip模块的加载分析

1. res_config_mysql的模块加载早于chan_sip&#xff0c;他们的加载函数均为load_module 先分析res_config_mysql的load_module函数 parse_config(0); parse_config解析res_config_mysql文件&#xff0c;并用文件中的配置信息填充mysql_conn结构体 我当前的res_config_mysql文件…

如何连接安卓手机_安卓手机如何使用AirPods

苹果公司推出的无线蓝牙耳机AirPods可以说是市面上最好的无线耳机&#xff0c;配合iPhone使用能够给你带来畅快舒适的体验。有很多小米华为oppo&#xff0c;vivo等安卓手机用户也在问了&#xff0c;安卓手机能够支持AirPods呢&#xff0c;答案是肯定的。图片来源&#xff1a;网…

晒一下我的代码生成器

经过最近一段新的尝试【BS架构】,之前的编程一直是CS架构&#xff0c;但也总是在忙那些项目&#xff0c;没法整理出一套符合自己团队的一套编程体系和架构&#xff1b; 新的起点&#xff0c;又是一个新的挑战&#xff0c;现在已经是03年&#xff0c;最早做的时候是07年&a…

discuz viewthread.php,修改discuz论坛的标题header和footer

1、关于去掉DZ论坛标题处的Powered by Discuz!&#xff0c;去掉他的原因是为了使标题更加简洁明了&#xff0c;还有就是不被搜索到导致SPAM&#xff1a;具体的修改方法&#xff1a;打开/templates/default/header.htm&#xff0c;在第五行中直接删除&#xff1a;- Powered by D…

sed命令详解

转载&#xff1a;http://blog.chinaunix.net/u/22677/showart_1076318.html1.简介sed是非交互式的编辑器。它不会修改文件&#xff0c;除非使用shell重定向来保存结果。默认情况下&#xff0c;所有的输出行都被打印到屏幕上。sed编辑器逐行处理文件&#xff08;或输入&#xff…

Oracle中的单值函数

Oracle的函数 Oracle函数可以分为单值函数和分组函数两大类&#xff0c;单值函数又分为字符函数、日期和时间函数、数字函数、转换函数和混合函数&#xff1a;分组函数右count、max、min、avg、sum&#xff0c;都可以和group by 搭配使用。 单值函数 1、 字符函数 l 字符串连…

asterisk账号和拨号方案mysql存储(静态)

asterisk账号和拨号方案的静态存储相对动态的话&#xff0c;比较简单&#xff0c;而且也比较好理解&#xff0c;说白了就是把 sip.conf和extensions.conf文件的内容完完整整的放入到数据库中&#xff0c;不像动态存储那样&#xff0c;不但需要数据库而且还需要 sip.conf和ext…

matlab自动排版,工具方法| Matlab 简单绘图与排版

matlab启动界面 来自百度百科对于很多教师与学生&#xff0c;Matlab是做数值计算很好的一款软件。收集、整理、分析数据十分的方便&#xff0c;我们也可以通过Matlab画出相对比较好看的图。这里简单总结下Matlab的画图方式与排版&#xff0c;供初学者参考、交流。Matlab基本都是…

坦克大战代码_坦克大战系列文章-坦克大战简介

前言本篇主要对坦克大战Robocode做一个简单的介绍&#xff0c;对java最初的人工智能算法演练工具做一个了解坦克大战简介今天我们要谈的是java 最初的基于人工智能算法的仿真模拟坦克大战&#xff0c;全称Robocode。Robocode 是一位IBM的工程师 Mat Nelson 用Java 语言所创造的…

php mongo sort -1出错,mongoDB排序引起的ERROR

mongo 使用过程中遇到了一个问题&#xff0c;需求就是要对mongo 库中数据进行排序查询logger.info("历史采集汇总");// 一天数据calendar Calendar.getInstance();calendar.add(Calendar.HOUR_OF_DAY, -24);cond new BasicDBObject();cond.put("workTime"…

数学_同取对数(HDU_1060)

m n^n > lg(m) lg(n^n) > lg(m) n*lg(n) > m 10^(n*lg(n)) 对于 10^N 10^123.456 10^(1230.456) 10^123 * 10^0.0.456 10^123 的最高位为 1,即 10^N 的最高位取决于 n*lg(n) 的小数部位 #include <stdio.h> #include <string.h> #include &l…

python浮点型数据怎么显示为图片_python数字图像处理(4):图像数据类型及颜色空间转换...

一、图像数据类型及转换在skimage中&#xff0c;一张图片就是一个简单的numpy数组&#xff0c;数组的数据类型有很多种&#xff0c;相互之间也可以转换。这些数据类型及取值范围如下表所示&#xff1a;Data typeRangeuint80 to 255uint160 to 65535uint320 to 232float-1 to 1 …

uboot mkimage使用详解

mkimage使用详解 uboot源代码的tools/目录下有mkimage工具&#xff0c;这个工具可以用来制作不压缩或者压缩的多种可启动映象文件。 mkimage在制作映象文件的时候&#xff0c;是在原来的可执行映象文件的前面加上一个0x40字节的头&#xff0c;记录参数所指定的信息&#xff0c…

php查询文件名,php怎么查询文件名

php查询文件名的方法&#xff1a;可以利用pathinfo()函数来查询。pathinfo()函数以数组的形式返回关于文件路径的信息&#xff0c;包括目录路径、文件名等&#xff0c;如&#xff1a;【print_r(pathinfo("/testweb/test.txt"))】。pathinfo() 函数以数组的形式返回关…

基于live555的视频直播 DM368IPNC RTSP分析

因需要&#xff0c;从个人的理解顺序和需求角度对live555的分析与开发整理&#xff0c;包含RTSP Server与RTSP Client、如何直播H.264流与JPEG流等&#xff0c;均进行了探讨&#xff0c;对live555的初学者有一定的指导意义。 本人习惯使用excel归档&#xff0c;所以本文均为exc…

图像风格迁移_图像风格迁移—谷歌大脑团队任意图像风格化迁移论文详解

点击蓝字关注我们AI研习图书馆&#xff0c;发现不一样的世界风格迁移图像风格化迁移是一个很有意思的研究领域&#xff0c;它可以将一张图的风格迁移到另外一张图像上&#xff0c;由此还诞生了Prisma和Ostagram这样的商业化产品。本文&#xff0c;我们将介绍谷歌大脑团队的一篇…

石子合并问题java,石子合并问题 GarsiaWachs算法

石子合并问题 GarsiaWachs算法目录引入一个较为朴素的算法GarsiaWachs算法引入在一个操场上摆放着一排 \(N\) 堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的 \(2\) 堆石子合并成新的一堆&#xff0c;并将新的一堆石子数记为该次合并的得分。试设计一个算法&…

Asterisk NAT

网络结构如下&#xff1a; asterisk(192.168.1.99) <--> 无线路由器&#xff08;公网IP: 55.66.77.88&#xff09; <-----------------------> 无线路由器&#xff08;公网IP: 21.31.41.51&#xff09; <--> eyeBeam(sip软电话: 192.168.12.43) 也就是说ast…

python读取图像数据流_浅谈TensorFlow中读取图像数据的三种方式

本文面对三种常常遇到的情况&#xff0c;总结三种读取数据的方式&#xff0c;分别用于处理单张图片、大量图片&#xff0c;和TFRecorder读取方式。并且还补充了功能相近的tf函数。1、处理单张图片我们训练完模型之后&#xff0c;常常要用图片测试&#xff0c;有的时候&#xff…

oracle无效的关联运算符,菜鸟请教:关联操作符=>用法

定位符和命名符create or replace procedure CallMe(p_ParameterA varchar2,p_ParameterB number,p_ParameterC boolean,p_ParameterD date) asbeginnull;end CallMe;declarev_Variable1 varchar2(10);v_Variable2 number(7, 6);v_Variable3 boolean;v_Variable4 date;beginCal…