# RESTEasy + Tomcat 7 + Log4j 记录示例

> 原文： [https://howtodoinjava.com/resteasy/resteasy-tomcat-7-log4j-logging-example/](https://howtodoinjava.com/resteasy/resteasy-tomcat-7-log4j-logging-example/)

[**RESTEasy**](//howtodoinjava.com/restful-web-service/ "Resteasy tutorials") 在日志支持方面非常灵活。 它也可以与 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 文件。

```java
	<!-- core library -->
	<dependency>
		<groupId>org.jboss.resteasy</groupId>
		 <artifactId>resteasy-jaxrs</artifactId>
		<version>2.3.1.GA</version>
	</dependency>
	<dependency>
		<groupId>net.sf.scannotation</groupId>
		<artifactId>scannotation</artifactId>
		<version>1.0.2</version>
	</dependency>
	<!-- Log4j -->
	<dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.17</version>
	</dependency>

```

**2）在类路径**中添加`log4j.properties`文件

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

```java
log4j.rootLogger=DEBUG, consoleAppender, fileAppender

log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern=[%t] %-5p %c %x - %m%n

log4j.appender.fileAppender=org.apache.log4j.RollingFileAppender
log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.ConversionPattern=[%t] %-5p %c %x - %m%n
log4j.appender.fileAppender.File=C:/logs/demoApplication.log

```

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

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

```java
import org.jboss.resteasy.logging.Logger;

@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "user-management")
@Path("/user-management")
public class UserService 
{
	Logger log = Logger.getLogger(UserService.class); 

	@GET
    @Path("/users/{id : \d+}")
    public User getUserById(@PathParam("id") Integer id) {
    	log.info("GET API called for id : " + id);
        User user = new User();
        user.setId(id);
        user.setFirstName("demo");
        user.setLastName("user");
        return user;
    }
}

```

**4）测试日志记录**

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

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

```

**祝您学习愉快！**