应用程序范围记录器的最佳实践

时间:2013-02-08 13:51:10

标签: java spring jersey

经过多次尝试,我终于能够提出一个问题了。我希望它有一定道理并易于理解。使用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中是否有任何特定的功能,我可以在单独的层上执行日志记录,而且我不必在任何地方继续重复相同的代码行。请指教。

2 个答案:

答案 0 :(得分:6)

如果您在撰写日志时变得混乱,应该查看AOP。如果您已经使用了spring,则应该阅读Spring AOP,并且要记录本身,请阅读using Spring AOP for logging

答案 1 :(得分:1)

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

  1. 将log4j JAR添加到WebApp。请确保,WebApp中捆绑的log4j版本与已与Application Server的版本冲突
  2. 在类路径中放置一个用于FILE和CONSOLE附加的log4j.xml(src / main / resources)
  3. Spring提供了一个Log4JConfigureListener,您可以在web.xml的section下声明
  4. 此外,如果生成的日志太多,您可以通过应用程序中的log4j.xml将记录器的输出限制为仅限某些软件包,或者通过使用针对项目特定软件包的Root logger配置来限制日志记录器的输出。例如,在JBoss中,您可以为特定LOG级别的包添加“类别”
  5. 您的特定“单独图层”应具有单独且不同的包名称,以定位该图层的日志附加内容 希望这有帮助!