我打算将以前创建的Java Web应用程序迁移到Azure.该应用程序以前使用log4j来保存在本地创建的文件中的应用程序级别日志.问题是,Azure角色具有多个实例,我必须收集并聚合这些日志,并确保它们存储在永久存储中而不是虚拟机硬盘中.
日志记录是应用程序的关键组件,但它不能减慢实际工作的速度.我考虑了多种选择,我很好奇最佳实践,考虑安全性,日志一致性和存储时间以及后续处理的性能的最佳解决方案.以下是选项列表:
>将log4j与自定义Appender一起使用,以在Azure sql中存储信息.
>将log4j与自定义Appender一起使用,以将信息存储在Azure表存储中.
>编写一个额外的工具,将数据从本地硬盘传输到上述任一持久存储.
唯一的考虑因素是如果您正在大量编写日志语句(例如每秒数百次).按照这个速度,您将开始注意到每月账单上显示的交易成本.每万分钟一分钱,每秒100分,你看每个实例约250美元.如果您有多个实例,则成本会从那里上升.使用sql Azure,您没有任何交易成本,但您的存储成本更高.
如果要使用存储传输方法,可以设置Windows Azure诊断程序以查看目录并定期上载文件到blob存储.唯一的障碍是Java没有直接支持配置诊断.如果您正在从Eclipse构建项目,那么您只有一个启动所有内容的脚本文件,因此您需要编写一个小的.net应用程序,或使用类似AzureRunMe的内容.如果您正在构建一个Visual Studio项目以启动您的Java应用程序,然后您可以在没有单独的应用程序的情况下设置诊断程序.
有关Java和诊断设置的刚刚发布的Persistent Systems的blog post.一旦它生效,我会用链接更新这个答案.另外,请查看Cloud Ninja for Java,它通过使用设置诊断的外部.net exe来实现Tomcat日志记录(以及相关的解析),如下一篇文章中所述.