如何在REST服务中使用log4j

zz

我尝试在REST客户端中使用log4j,它记录信息。但是,我尝试使用log4j记录事件服务器端,并且它不记录任何日志。这是我在服务器端使用过的示例。

 @POST
    @Path("/send")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response consumeJSON(String str) throws Exception {
     AmazonKinesisRecordProducerSample.init();

     try {

            pushData(str);

            LOG.info(str)

        } catch (IOException e) {
            e.printStackTrace();
            LOG.info(""+e);
            return Response.status(400).entity(e).build();
        }

        return Response.status(200).entity(d).build();
    }

这是我的客户代码。这将捕获日志。

public class JerseyClient {
private static final Logger LOG = Logger.getLogger(JerseyClient.class);
static Date date = new Date();
public static void main(String[] args) {
    try {
        int i = 0;
        long createTime = System.currentTimeMillis();
        System.out.println("Server Response");
        for (i = 0; i < 1000; i++) {
            Details d = new Details();
            ClientConfig clientConfig = new DefaultClientConfig();
            clientConfig.getFeatures().put(
                JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
            Client client = Client.create(clientConfig);
            WebResource webResource = client
                .resource("http://localhost:8080/JerseyJSON/rest/jsonServices/send");

            ClientResponse response = webResource.accept("application/json")
                .type("application/json").post(ClientResponse.class, d);
            if (response.getStatus() != 200) {
                throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
            }
            String output = response.getEntity(String.class);
            LOG.info(output + "  inserted at-%d  " + createTime);
            System.out.println(output);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

这将在我的项目根目录下的TestLog.log中捕获日志。但是,我的服务器端代码(即POST在Tomcat上运行方法)无法捕获日志。

这是我的log4j.xml供参考。

<?xml version="1.0" encoding="UTF-8"?>

<!-- Appenders -->

<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{HH:mm:ss} [%t] %c{1} - %m%n" />
    </layout>
</appender>

<appender name="ROLL" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="Testlog.log" />
    <param name="Append" value="true" />
    <param name="Encoding" value="UTF-8" />
    <param name="MaxFileSize" value="10MB" />
    <param name="MaxBackupIndex" value="2" />

    <layout class="org.apache.log4j.PatternLayout">
        <!-- The default pattern: Date Priority [Category] Message\n -->
        <param name="ConversionPattern"
            value="%d{yyyy-MM-dd HH:mm:ss,SSSZ} %-5r %-5p [%c{1}] (%t:%x) %m%n" />
    </layout>   
</appender>

<category name="com.java" additivity="false">
    <priority value="DEBUG"/>
    <priority value="INFO" />
    <appender-ref ref="ROLL"/>
    <appender-ref ref="CONSOLE"/>
</category>

<root>
    <priority value="INFO" />
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="ROLL"/>
</root>

RPresle

请参考有关如何制作helloWorld的文档

看来您正在混合几个Log包。确保使用Log4J而不是Java Logger。它们具有不同的语法。

然后,在您的代码中,我看到了几个问题。在尝试中,您需要的是Logger的新实例,getLogger它不是一种日志记录方法。在catch块中,不要"" + e用于记录异常,请使用库功能来记录所有异常对象,包括message和stackTrace。

编辑:

最后,我们找到了答案。有两个项目:带有主客户端的客户端和带有REST服务的服务器端,两者都有一个日志配置。问题在于,客户端正在登录本地目录,而服务器端正在登录Tomcat目录。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章