网站公告列表

  没有公告

加入收藏
设为首页
在线投稿

您现在的位置: IT知识网 >> IT知识 >> 维修维护 >> 其它外设维护维修 >> 文章正文

 

  有效地记录日志可以简化企业的开发过程 (3)           

有效地记录日志可以简化企业的开发过程 (3)
作者:佚名 文章来源:不详 点击数: 更新时间:2006-12-6 0:12:32
    有效地记录日志可以简化企业的开发过程 (3)
    有效地记录日志可以简化企业的开发过程 (3)    产品环境中的日志
    
    一旦应用程序处于产品环境中之后,您通常都需要关闭调试或信息日志消息,从而对运行时的性能进行优化。然而,当有些不好的事情发生时,您又不能在开发环境中重现这个问题,那就可能需要在产品环境中激活调试消息了。重要的是能够修改日志的设置,而不用关闭服务器。诊断产品的问题即使不用花费数天来进行详细的调研,通常也需要几个小时的时间。在这段时间之内,开发人员需要激活或关闭应用程序不同范围的日志。如果每次修改日志的设置之后都需要重新启动产品应用程序,那么情况就会变得非常不可靠了。
    
    幸运的是,Log4J 提供了一种简单的机制来解决这个问题。在 Log4J 1.2 中,DOMConfigurator 中的 configureAndWatch() 方法会对 Log4J 进行配置,并自动监视日志配置文件中的变化。这在清单 6 中进行了阐述。(注意,在 Log4J 1.3(目前仍是 alpha 版本) 中并不推荐使用 DOMConfigurator,它使用了一个更加灵活的实现 JoranConfigurator。)
    
    为了确保 configureAndWatch() 是在 Log4J 初始化之前调用的,您应该在启动类中调用它。不同的应用程序服务器采用了不同的机制来执行启动代码(更多信息请参阅 参考资料)。详细信息请查看应用服务器的实现。有些应用服务器可能需要您将 Log4J 的库放到服务器的 classpath 中。日志配置文件应该保存到一个需要日志的人可以访问的位置。
    清单 6. 使用 DOMConfigurator 配置 Log4J
    * * Configure Log4J library and periodically monitor log4j.xml for any update. */DOMConfigurator.configureAndWatch("/apps/config/log4j.xml");
    如果您的日志配置文件不能方便地进行访问(例如您的产品环境是由一个不同的组织进行维护的),那么您就必须使用一种不同的策略。标准的方法是使用 JMX,它提供了一个标准的 API 来管理自己的应用程序设置。在现代 JMX 兼容的服务器中,您可以使用管理 bean (或 MBeans )来扩展应用服务器的管理终端的功能(更多有关使用 JMX 以及在 WebSphere Application Server 6.0 中使用 JMX 的内容,请参阅 参考资料 一节。)由于 JMX 方法非常复杂,如果您的情况需要使用 JMX,那就应该只用作这个用途。
    
    记录敏感的数据
    
    在记录产品环境中的日志时,除了技术方面的挑战之外,还存在一些业务问题需要克服。例如,记录敏感的信息可能会引起安全性的问题。并没有任何限制可以防止您将某个用户的用户名和密码保存到正文文件中。您还必须要保护其他敏感信息,例如 e-mail 地址、电话号码以及帐号信息。安全顾问和设计师有责任要确保这些信息不会未加任何处理就保存到日志中。对敏感信息使用安全性专用的日志程序可以帮助降低风险。您可以给这个日志程序配置一个专用的附加器,从而使用一种加密的格式来保存消息,或者将其保存到一个安全的地方。然而,防止出现安全风险的最佳方法是在项目开始之前就设置适当的编码规范,并在检查代码时强制施行这些规范。
    
    从异常中提取有用信息
    
    当发生一个非预期的异常时 —— 例如,如果数据库连接突然失效了,或者系统资源变得很低了 —— 就必须对其适当地进行处理,否则就会丢失有用的信息,这些信息在诊断问题时是非常有帮助的。首先,必须记录异常及其堆栈跟踪状况。其次,应该使用一种用户界面友好的方式来标识错误页面,这对于终端用户和技术支持小组来说都是非常有帮助的。
    
    技术支持小组在接到一个技术支持电话时所面临的一个挑战是在用户所报告的问题与特定的日志异常之间建立某种关联。非常有用的一种简单技术是为每个异常都记录一个唯一的 ID。这个 ID 可以告诉用户,也可以包含在终端用户所填写的问题报告表单中。这样可以减少技术支持团队成员猜测的时间,让他们可以快速对问题作出响应。考虑到可读性的问题,可以定期对 ID 进行回收。
    
    日志文件的管理
    
    一个非常繁忙的应用程序的日志文件可能会迅速变得非常大。较大的日志文件很难使用,这是因为它们需要过滤大量的噪声才能找到有用的信号。Log 循环 是常见的一个可以帮助解决这个问题的实践。日志循环会周期性地对旧日志进行归档,这样新消息就可以总能写到一个相对较小的文件中。日志消息降低了一些效用来提高速度;您可能很少需要参考一周之前的日志消息。在 Log4J 1.2 中, DailyRollingFileAppender 附加器可以根据所提供的日期模式来循环使用日志文件。(在 Log4J 1.3 中,已经对这个循环日志文件附加器重新进行了设计。现在您可以提供一种策略来控制如何进行循环了。例如, TimeBasedRollingPolicy 定义了一种基于时间和日期的循环模式。)清单 7 显示了让 Log4J 在每天午夜对自己的日志文件进行循环所采用的配置片断。
    清单 7. 使用 DailyRollingFileAppender 循环使用日志文件
    
    集群环境中的日志
    
    现在有越来越多的企业级应用程序是在集群环境或分布式环境中进行部署的。然而,集群环境中的日志需要更多规划,因为消息都是从不同的源头生成的(通常是不同的机器)。如果要对不同的机器记录日志,那就必须对这些机器的时间戳进行同步,否则日志消息的次序就混乱了。对机器间时钟进行同步的一种简单方法是使用一个时间服务器。有两种方法可以设置时间服务器。您可以指定一台内部的机器作为时间服务器。然后其他机器就可以使用网络时间协议(NTP)来与时间服务器的时间戳进行同步。另外,您可以使用 Internet 上提供的时间服务器(请参阅 参考资料)。在 AIX 上,xntpd 守护进程用来对不同机器的系统时间进行同步。当机器具有相同的时间之后,就可以对日志一起进行分析了。
    
    在集群环境中搜集日志消息还面临着一些挑战。在这种环境中保存日志消息的一种简单方法是将它们保存到主机特定的日志文件中。当集群是使用 session affinity 配置时,这可以很好地工作 —— 如果对某个特定用户会话的请求都要到同一个服务器上,并且 EJB 也都是部署在本地的。在这种配置中,集群中的机器所产生的日志文件都可以独立进行分析。如果不是这种情况 —— 换而言之,如果任何给定的请求都可以由多台机器进行处理 —— 那么对不同日志文件中的日志消息进行分析就会变得更加困难。在这种情况中,一种好的办法是使用系统管理软件来管理日志消息,例如 IBM Tivoli® 软件(请参阅 参考资料 中的链接)。这种软件对所有的日志消息(在系统管理软件的术语中称之为 事件)提供了一个综合的视图,从而便于管理员使用。系统管理软件也可以根据所接收到的事件的类型触发一些操作(例如发送 e-mail 消息或传呼消息)。
    
    结束语
    
    在本文中,我们介绍了在规划日志策略时需要考虑哪些问题。正如在编程时所碰到的问题一样,从一开始就采用一个经过详细考虑的规划要比在进行的同时规划更能节省工作量。良好的日志策略可以极大地帮助对问题进行诊断。最终,终端用户可以获得更好的应用程序,并能从技术支持团队获得迅速的响应。
  

文章录入:wuyongjian    责任编辑:wuyongjian 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最 新 热 门
    相 关 文 章
    安全设置Windows组策略 
    有效隔离 三大技术打造个
    有效隔离 三大技术打造个
    识别常见Web应用安全漏洞
    新手看招:如何有效测试
    新手看招:如何有效测试
    有效地记录日志可以简化
    如何有效防范黑客来自网
    创建IA32下针对Unicode有
    Photoshop中有效的几种“
     
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    Copyright© ITZS.NET All Rights Reserved
    QQ:272895858   ICP备案编号:吉ICP备07000044号
    IT知识网 站长:博浪