Azure Java Tomcat日志记录

hpi*_*tyu 5 java logging tomcat azure azure-diagnostics

我打算将以前创建的Java Web应用程序迁移到Azure.以前用于log4j应用程序级别日志的应用程序,保存在本地创建的文件中.问题是,Azure角色具有多个实例,我必须收集并聚合这些日志,并确保它们存储在永久存储中而不是虚拟机硬盘中.

日志记录是应用程序的关键组件,但它不能减慢实际工作的速度.我考虑了多种选择,我很好奇最佳实践,考虑安全性,日志一致性和存储时间以及后续处理的性能的最佳解决方案.以下是选项列表:

  • 将log4j与自定义Appender一起使用以在Azure SQL中存储信息.
  • 将log4j与自定义Appender一起使用以在Azure表存储中存储信息.
  • 编写一个额外的工具,将数据从本地硬盘驱动器传输到上述任一持久存储器.

是否有任何其他方法或针对Java的此问题是否有任何完整的解决方案?考虑到上述标准,上述哪一项最佳?

hpi*_*tyu 1

最后我决定写一个 Log4J Appender。我不需要收集诊断信息,我的主要目标只是以易于交换的方式收集日志文件。我的第一个担心是它会减慢应用程序的速度,但通过仅写入内存并仅定期将日志数据写入 Azure 表,它可以完美运行,而无需进行太多 API 调用。

以下是我的实施的主要步骤:

首先,我创建了一个要存储在 Azure Tables 中的实体类,称为LogEntityextends com.microsoft.windowsazure.services.table.client.TableServiceEntity

接下来,我编写了扩展org.apache.log4j.AppenderSkeleton包含java.util.List<LogEntity>.

通过重写的方法,protected void append(LoggingEvent event)我仅添加到此集合,然后创建一个线程,定期清空此列表并将数据写入 Azure 表。

最后,我将新创建的内容添加Appender到我的 log4j 配置文件中。