我正在开发一个需要部署到云端的Web应用程序。有一个云服务可以安全地存储应用程序的日志消息。这是使用REST API通过云公开的,它可以以json格式最多接收25条日志消息。我们目前正在使用log4j(也可以打开其他任何一个)登录到文件。现在,我们需要将应用程序转换为从基于文件的日志记录转移到使用云REST API。
我正在考虑为每条日志消息调用REST API并降低应用程序速度会很昂贵。
在这个上下文中,我正在考虑编写一个可以写入缓冲区的自定义appender。缓冲区可以是内存中或持久缓冲区,它将由一个单独的线程或进程定期读取和清空,通过向云REST API发送25条消息。
选项1:
使用内存缓冲区 我的自定义appender会将消息写入内存列表并继续填充它。 woudl是一个守护程序线程,它将一直从缓冲区中删除25条消息,并使用REST API写入云。这种方法有一个缺点,即在应用程序/服务器/节点崩溃的情况下......我们会丢失关键日志消息,这可能导致诊断崩溃的原因。我不确定这是否是正确的思考方式。
选项2:
使用持久缓冲区数据库/消息队列:
appender可以临时将消息记录到数据库表或发布到消息队列,消息队列将由单独的长时间运行的作业处理,以从db或队列中获取消息并使用REST API将其发布到云。
请指导哪个选项看起来最好。
答案 0 :(得分:0)
log4j中有很多内置程序:https://logging.apache.org/log4j/2.x/manual/appenders.html如果您在云中使用专用服务,它们可能会提供特定的附加程序。 如果它在您的环境中,可以使用log4j rollingfile apender尝试像ELK这样的堆栈,使用该技术,您不会丢失日志条目。