原文: https://howtodoinjava.com/resteasy/resteasy-tomcat-7-log4j-logging-example/

RESTEasy 在日志支持方面非常灵活。 它也可以与 log4j,slf4j 和java.util.logging协作。 用于确定需要使用哪个日志记录框架的算法是:

  1. 如果 log4j 在应用的类路径中,则将使用 log4j
  2. 如果 slf4j 在应用的类路径中,则将使用 slf4j
  3. 如果 log4j 或 slf4j 都不在类路径中,则java.util.logging为默认值
  4. 如果 servlet 上下文参数resteasy.logger.type设置为 JUL,LOG4J 或 SLF4J 将覆盖此默认行为

在本文中,我们将学习在 tomcat 服务器中开发应用时使用 RESTEasy 进行 log4j 的开发。

使用的环境:

  • Tomcat 7
  • Log4j 1.2.17
  • RESTEasy JAX-RS 2.3.1.GA

配置 log4j 的步骤

1)在项目中包含依赖项

我正在添加 Maven 依赖项。 如果需要,您可以选择包括 jar 文件。

  1. <!-- core library -->
  2. <dependency>
  3. <groupId>org.jboss.resteasy</groupId>
  4. <artifactId>resteasy-jaxrs</artifactId>
  5. <version>2.3.1.GA</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>net.sf.scannotation</groupId>
  9. <artifactId>scannotation</artifactId>
  10. <version>1.0.2</version>
  11. </dependency>
  12. <!-- Log4j -->
  13. <dependency>
  14. <groupId>log4j</groupId>
  15. <artifactId>log4j</artifactId>
  16. <version>1.2.17</version>
  17. </dependency>

2)在类路径中添加log4j.properties文件

log4j 文件中的最低配置可以是:

  1. log4j.rootLogger=DEBUG, consoleAppender, fileAppender
  2. log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender
  3. log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout
  4. log4j.appender.consoleAppender.layout.ConversionPattern=[%t] %-5p %c %x - %m%n
  5. log4j.appender.fileAppender=org.apache.log4j.RollingFileAppender
  6. log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
  7. log4j.appender.fileAppender.layout.ConversionPattern=[%t] %-5p %c %x - %m%n
  8. log4j.appender.fileAppender.File=C:/logs/demoApplication.log

3)在 API 方法中使用日志语句

始终使用“org.jboss.resteasy.logging.Logger,因为它是使用上述给定算法进行配置的,因此完全将日志记录框架的依赖项与应用代码分离。 这意味着,如果您以后决定使用 slf4j 代替 log4j,则只需将 slf4j 放入运行时类路径中,然后从类路径中删除 log4j。 仅此而已 !!

  1. import org.jboss.resteasy.logging.Logger;
  2. @XmlAccessorType(XmlAccessType.NONE)
  3. @XmlRootElement(name = "user-management")
  4. @Path("/user-management")
  5. public class UserService
  6. {
  7. Logger log = Logger.getLogger(UserService.class);
  8. @GET
  9. @Path("/users/{id : \d+}")
  10. public User getUserById(@PathParam("id") Integer id) {
  11. log.info("GET API called for id : " + id);
  12. User user = new User();
  13. user.setId(id);
  14. user.setFirstName("demo");
  15. user.setLastName("user");
  16. return user;
  17. }
  18. }

4)测试日志记录

调用上述 RESTFul API 会记录以下事件:

  1. [http-bio-8080-exec-3] INFO org.jboss.resteasy.plugins.server.servlet.ConfigurationBootstrap - Adding scanned resource: com.howtodoinjava.service.UserService
  2. [http-bio-8080-exec-3] DEBUG org.jboss.resteasy.core.SynchronousDispatcher - PathInfo: /user-management/users/10
  3. [http-bio-8080-exec-3] INFO com.howtodoinjava.service.UserService - GET API called for id : 10

祝您学习愉快!