我想为我的 java web 应用程序构建一个更高级的日志记录机制,类似于 App 引擎日志。我的需求是:
- 将日志流式传输到数据库(例如 sql、bigquery 或其他)
- 自动记录重要数据(如应用上下文、请求 url、请求 id、浏览器用户代理、用户 id 等)
对于第 1 点,我可以使用“缓冲”实现,将日志放入不同的列表中,并定期由 cron(线程)收集内存中的所有日志并将它们写入数据库(也可以在另一台服务器上)
对于第 2 点,我发现这样做的唯一方法是将所需的对象注入到我的类(子系统)中,如 ServletContext、HttpServletReqest、当前用户等,所有这些都建模为自定义类(比如说 AppLogContext),然后可以由日志记录机制使用。
这里的问题是我不知道这是否是一个好习惯。例如,这意味着许多类必须包含这个可以访问 servlet 上下文和 http 请求对象的对象,我认为这可能会产生架构问题(在构建模块、层等时)甚至安全问题。
App Engine 将自动记录此类信息(以及更多,如延迟、cpu 使用情况等,但这更复杂),并且可以在项目的控制台日志中找到(也可以将日志复制到大查询表),我需要 Jetty 或其他 java web 应用服务器的东西。
那么,是否有另一种方式来做到这一点,其他模式,不同的方法?(找不到任何这些点的第 3 方库)
谢谢你。