在客户站点部署 Web 应用程序(在测试环境中)期间,我们遇到了应用程序日志记录问题。我将很快尝试描述当前情况:
- 实现使用 java.util.logging 检索的 Logger 和 apache.commons.logging.
- 在部署的包中存在一个指向 JUL 的 commons-logging.properties。
- 应用程序在 Tomcat 6.x 上运行
客户决定他想在 tomcat 上使用 Log4J 并对其进行配置以使其正常工作——当然它不适用于上述应用程序。
因为看起来我们无论如何都需要更改日志记录实现 - 我想请您提供一些关于如何在 Web 应用程序中实现日志记录的最佳实践。 以下事情应该是可能的:
- 客户需要能够在不修改 *.war 文件中的任何内容的情况下更改日志级别。 -> 如果他必须修改 war 文件,他将必须为每个新构建都这样做......
- 应该可以进行某种滚动文件记录(例如:最多 10 个文件,每个文件最大 10mb)- 当然,也应该由客户来定义和更改此设置 ...
- 由于另一个客户可能想改用标准的 JUL 日志记录 - 我当然更愿意不对首选库(在本例中为 Log4J)进行硬编码。
最佳答案
Customer needs to be able to change log-level without modifying anything in the *.war-file.
您可以将日志框架配置文件(log4j.xml
或 logback.xml
)放在 WAR 文件之外。还有 logback支持在更改此文件时自动重新配置。
It should be possible to have some kind of rolling-file-logging
两者都是log4j和 Logback 支持基于大小和日期回滚文件,参见例如RollingFileAppender
.
As another customer might want to use standard JUL-logging instead - I'd of course prefer to not hard-code the preferred library (Log4J in this case).
apache-commons-logging是fundamentally broken , 使用 slf4j反而。然后你只需将不同的实现放在你的 CLASSPTH 上。 SLF4J API 也非常令人满意。
关于java - 登录 Web 应用程序 : Best practices?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10839457/