也许我是以错误的方式解决这个问题,或者不是以正确的方式向Google询问。如果这是重复,我很抱歉。我想快速/有效地解决我的java webapp中的客户端/用户错误。
也就是说,通过执行e.printstacktrace,我们可以很容易地看到我们的错误在本地机器上的位置。我想知道在EC2 / Elastic Beanstalk实例上执行此操作的最佳方法。如果客户收到错误,我希望他们能够通过电子邮件询问发生在"票号和#34;或者"在这个时间周围错误"。我的想法是,当发生异常时,在我的数据库中记录堆栈跟踪以及用户名并将db.uniqueKey返回给用户,这样他们就可以通过电子邮件向我询问该唯一密钥/ ID号。
我不知道将堆栈跟踪的子字符串记录到数据库是否是个好主意(让所有这些数据库连接打开/关闭以记录堆栈跟踪)。
当我查看这个主题时,我得到了很多关于AWS CloudWatch的信息,但这看起来更像是记录我的环境和服务器中发生的所有事情的工具。这似乎是滚动日志文件的一个方法永远。
将stacktrace.substring记录到具有用户名的数据库是个好主意吗?是否有更好的方法及时回复我的用户可能发生的事情?
答案 0 :(得分:1)
您可以对CloudWatch Logs进行API调用以发送单个日志消息,而不是将整个Tomcat日志文件发送到CloudWatch。您还可以在JSON format中发送日志,以便包含用户ID,唯一密钥等元数据。请参阅SDK中的AWSLogsClient课程。
请注意,还有第三方服务,例如Loggly和LogEntries,这些服务非常擅长此类事情,而且我认为目前比CloudWatch Logs更加用户友好。如果您不想将整个日志文件流式传输到这些服务,这些服务还提供了从Java发送单个日志消息的API。
我建议使用专门用于记录的服务,就像我列出的那样,而不是数据库。这些服务可以很好地扩展,而不必担心开放数据库连接的数量。这些服务还将根据日志消息的内容处理发送警报,并提供一个很好的Web界面来查看日志消息。
如果您决定使用数据库方法,我建议您查看DynamoDB而不是像MySQL或PostgreSQL这样的关系数据库。 DynamoDB可以轻松扩展,轻松地将文档存储为JSON数据,并且可以触发Lambda函数,这些函数可用于执行发送警报等操作。