我正在开发一个需要部署到云中的web应用程序。有一种云服务可以安全地存储应用程序的日志消息。这是通过使用REST API的云暴露出来的,该API可以采用最多25条json格式的日志消息。我们目前正在使用log4j(对任何其他文件也是开放的)来登录文件。现在,我们需要将我们的应用程序从基于文件的日志记录迁移到使用cloud REST API。
我正在考虑为每条日志消息调用REST API会很昂贵,并且会降低应用程序的速度。
在这种情况下,我正在考虑编写一个可以写入缓冲区的自定义附加器。buffer可以是内存中的缓冲区,也可以是持久性缓冲区,它会被单独的线程或进程定期读取和清空,方法是将25条消息捆绑发送到cloud REST API。
选项1:
使用内存缓冲区,我的自定义附加器会将消息写入内存列表中,并不断填充它。将有一个守护程序线程,它将保持一次从缓冲区中删除25条消息,并使用REST API写入云。这种方法有一个缺点,即在应用程序/服务器/节点崩溃的情况下。我们丢失了关键日志消息,这可能导致对崩溃原因的诊断。我不确定这是否是正确的思考方式。
选项2:
使用持久缓冲区数据库/消息队列:
附加器可以将消息临时记录到数据库表或post到消息队列,消息队列将由单独的长时间运行的作业处理,以便从数据库或队列中提取消息并使用REST API将其发布到云中。
请指导一下哪个选项看起来最好。
发布于 2016-09-13 16:24:43
在log4j:https://logging.apache.org/log4j/2.x/manual/appenders.html中的附加器中有很多构建,如果您在云中使用专用服务,它们可能会给出特定的附加器。如果它在您的环境中,也许可以尝试使用带有log4j rollingfile apender的ELK之类的堆栈,使用该技术您不会丢失日志条目。
https://stackoverflow.com/questions/39463645
复制相似问题