关闭

日志问题

202人阅读 评论(0) 收藏 举报
 前些日子,凌晨被叫回项目,因为项目在更新程序后,在日志输出时老是重复很多条相同的输出,导致日志文件很快的满了。首先怀疑是log4j的配置有问题,在生产环境上拿到的配置文件上来看,并没有问题,即使是配置有问题导的的重复也只有有条重复而已,不会有上百条,几百条重复。从拿下来的日志文件上看,有很多是关于操作EXCEPTION_LOG表时出错,于是从数据库操作类上查找原因,怀疑可能是在交易里操作数据出错,于是记录时,操作了EXCEPTION_LOG表时又出错,于嵌套循环出错,这可以解释为什么日志里有这么多的操作EXCEPTION_LOG表出错的原因,但再仔细看程序,对操作EXCEPTION_LOG表出错是有判断的,不会出现嵌套循环出错,而且这个程序已应用多年,这次上线并没有更新。最后,从输出的日志上来,结合配置,发现输出的内容并没有配置,所以怀疑配置被动态修改了,于是从上线的程序上查找,发现在一个交易里,有开发人员直接使用log4j的API来输出日志,有对应的交易类里有这样的代码:
{
BasicConfigurator.configure();
}
每次调用该交易时,实是实例化交易类,这就导致每次都会进行一次log4j的默认的输出配置,增加一个新的layout,这就导致有多个输出配置,每次有log4j的输出时,都会根据输出 配置进行输出,这也就找到了几百条重复输出的原因的了,如果交易再被多调用几次,重复数还会更多
在log4j的BasicConfigurator.configure()源码里是这新的:
static
  public
  void configure() {
   
Logger root = Logger.getRootLogger();
   
root.addAppender(new ConsoleAppender(
 new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN)));
 
}
问题虽然解决了,但是一个项目里对底层框架,公共类还是由专人或是一个小组去管理维护,不要在开发的业务交易里由开发人员去涉及,要形成良好的开发规范,除了加强监管外,开发人员自身也要有这样的意识。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1788次
    • 积分:63
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档