hpi*_*tyu 5 java logging tomcat azure azure-diagnostics
我打算将以前创建的Java Web应用程序迁移到Azure.以前用于log4j
应用程序级别日志的应用程序,保存在本地创建的文件中.问题是,Azure角色具有多个实例,我必须收集并聚合这些日志,并确保它们存储在永久存储中而不是虚拟机硬盘中.
日志记录是应用程序的关键组件,但它不能减慢实际工作的速度.我考虑了多种选择,我很好奇最佳实践,考虑安全性,日志一致性和存储时间以及后续处理的性能的最佳解决方案.以下是选项列表:
Appender
一起使用以在Azure SQL中存储信息.Appender
一起使用以在Azure表存储中存储信息.是否有任何其他方法或针对Java的此问题是否有任何完整的解决方案?考虑到上述标准,上述哪一项最佳?
最后我决定写一个 Log4J Appender
。我不需要收集诊断信息,我的主要目标只是以易于交换的方式收集日志文件。我的第一个担心是它会减慢应用程序的速度,但通过仅写入内存并仅定期将日志数据写入 Azure 表,它可以完美运行,而无需进行太多 API 调用。
以下是我的实施的主要步骤:
首先,我创建了一个要存储在 Azure Tables 中的实体类,称为LogEntity
extends com.microsoft.windowsazure.services.table.client.TableServiceEntity
。
接下来,我编写了扩展org.apache.log4j.AppenderSkeleton
包含java.util.List<LogEntity>
.
通过重写的方法,protected void append(LoggingEvent event)
我仅添加到此集合,然后创建一个线程,定期清空此列表并将数据写入 Azure 表。
最后,我将新创建的内容添加Appender
到我的 log4j 配置文件中。