【问题标题】:Best practices for an application-wide logger应用程序范围记录器的最佳实践
【发布时间】:2013-01-24 07:21:03
【问题描述】:

经过多次尝试,我终于能够提出一个问题。我希望它有意义并且易于理解。在使用 Spring 和 Jersey 的 Web 应用程序上工作。我需要实现一个应用程序范围的记录器,该记录器应该将应用程序上执行的所有活动记录到数据库中。目前,我使用了HAS-A 实现,并在执行CRUD 操作的任何地方调用了日志记录方法。像这样的:

LogBean lBean=new LogBean("rickesh@email.com","update","address","127.0.0.1");
logToDatabase(lBean);

但这会导致大量重复的代码行,我必须在执行 CRUD 操作的每个部分重复实例化和调用 log 方法。有什么方法可以从控制器层、REST 层中提取日志记录吗? Spring 或 Jersey 中是否有任何特定功能,我可以使用这些功能在单独的层上执行日志记录,而我不必在任何地方重复相同的代码行。请指教。

【问题讨论】:

标签: java spring jersey


【解决方案1】:

如果您在编写日志时遇到麻烦,您应该查看AOP。如果你已经在使用 spring,你应该阅读 Spring AOP,而对于日志本身,阅读 using Spring AOP for logging

【讨论】:

    【解决方案2】:

    AOP 是一种更好的方法,但如果学习它来解决这个问题需要更长的时间,那么这里有一个简单的替代方法。

    1. 将 log4j JAR 添加到您的 WebApp。确保您的 WebApp 中捆绑的 log4j 版本与您的应用程序服务器中已有的版本不冲突
    2. 在您的类路径 (src/main/resources) 中为 FILE 和 CONSOLE 附录放置 log4j.xml
    3. Spring 提供了一个 Log4JConfigureListener,您可以在 web.xml 中的部分下声明它
    4. 此外,如果生成的日志过多,您可以通过应用程序中的 log4j.xml 将记录器的输出限制为仅限于某些包,或者通过为您的项目特定包使用根记录器配置。例如,在 JBoss 中,您可以为特定 LOG 级别的包添加“类别”

    您的特定“单独层”应具有单独且不同的包名称,以针对该层的日志附件 希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 2012-06-06
      • 2011-08-04
      相关资源
      最近更新 更多