【问题标题】:How to output cache files and do custom logging - jboss/java project如何输出缓存文件并进行自定义日志记录 - jboss/java 项目
【发布时间】:2009-03-06 03:52:24
【问题描述】:
我是一名 .Net 开发人员,开始从事越来越多的 Java 开发工作。我有一个关于缓存的具体问题,希望你们能解决或提供建议。我们正在启动一个 java 项目,该项目将部署在运行 JBoss 的 Linux 机器上。我们正在提前计划并尝试考虑我们的缓存策略。我们想做的一件事是输出缓存页面,因为我们的内容可能会缓存 8 小时左右。我开始查看 mod_cache ,这正是我们想要做的。我需要满足的另一个要求是,对于每个请求,我都需要进行一些自定义日志记录。我需要基本的请求 URL,然后是一些其他业务逻辑的东西,然后将其填充到数据库中。我的问题是:
1) 如何将代码置于 mod_cache 级别以启动自定义日志记录过程?
2)我想以某种方式将这些日志消息排队,因为我不想每次请求都去数据库。解决这个问题的最佳方法是什么?
如果您有任何建议或解决方案,我将不胜感激!
【问题讨论】:
标签:
java
apache
outputcache
【解决方案1】:
我假设您计划的设置是 Apache httpd -> mod_cache -> mod_proxy/mod_jk -> JBoss
1) 你不能,因为 Apache 级别的 mod_cache 甚至不会调用 Java。因此,您需要检查 mod_cache 本身是否有一些可以挂钩的日志记录工具,或者您需要修改 mod_cache 并重新编译它。这与 Java 无关,我认为你不能在 Java 中做到这一点。
2) 同样,当 mod_cache 自己处理响应而不调用 JBoss 时,这不是 Java 问题。
JBoss/Catalina/Tomcat 在交付由 JSP 或其他 Web 框架呈现的页面时非常快。设置缓存过期日期,让浏览器处理缓存。
【解决方案2】:
您可能会考虑改用 memcached。我不知道这个程序是否有 Tomcat/JBoss 包装模块。它可以让您缓存几乎所有可以序列化的数据并为其创建字符串键值。
您必须根据需要编写一个访问器,它会尝试从 memcached 进程中提取内容,和/或在缓存未命中时调用生成器函数(以及缓存生成器的结果)。在此访问器中,您可以记录缓存命中和未命中。
当然,memcached 守护程序是用 C 编写的,因此它不会像 java(或大多数其他“现代”语言运行时)那样“标记和扫描”自己死持有数据。
另一方面,也许 mod_cache 有一些日志钩子。也许你应该研究一下,因为这会减轻你的 java 进程的负载。
这是否接近您正在寻找的那种东西?