我尝试在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>
看来您正在混合几个Log包。确保使用Log4J而不是Java Logger。它们具有不同的语法。
然后,在您的代码中,我看到了几个问题。在尝试中,您需要的是Logger的新实例,getLogger
它不是一种日志记录方法。在catch块中,不要"" + e
用于记录异常,请使用库功能来记录所有异常对象,包括message和stackTrace。
编辑:
最后,我们找到了答案。有两个项目:带有主客户端的客户端和带有REST服务的服务器端,两者都有一个日志配置。问题在于,客户端正在登录本地目录,而服务器端正在登录Tomcat目录。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句