REST JAX-RS Logging

2019-08-04 13:25发布

问题:

I have followed the HelloWorld example and got my fist REST done successfully. Now, I would like to add the logging capability the code. For example, I would like to have any logging frameworks (Log4j, JUL) and be able to log in the code, and have output to a file. How do I implement the logging to my REST code?

@Path("/hello")
public class HelloWorldService {
    Logger log = Logger.getLogger("className");

    @GET
    @Path("/{param}")
    public Response getMsg(@PathParam("param") String msg) {

        String output = "Jersey say : " + msg;

        //for example, here.  hopefully to a file  
        log.info("Log Jersey say : " + msg);

        return Response.status(200).entity(output).build();

    }
}

I am using Jersey 1.19, Tomcat 8

回答1:

You can use open source Apache Log4j library. Add below dependency in your pom or download it from here.

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

log4j.properties

# Root logger option
log4j.rootLogger=INFO, file

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender

#Redirect to Tomcat logs folder
#log4j.appender.file.File=${catalina.home}/logs/logging.log

log4j.appender.file.File=C:\\logigng.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

With this configuration, all logging will be redirected to your specified log file.

Source : http://www.mkyong.com/logging/log4j-log4j-properties-examples/

How to log a message using Log4j?

private static final Logger logger = Logger.getLogger(HelloWorldService.class);

Logs messages with different priorities, for example, debug, info, warn, error and fatal. Normally, you just need to use debug or error.

//logs a debug message
if(logger.isDebugEnabled()){
    logger.debug("This is debug");
}

//logs an error message with parameter
logger.error("This is error : " + parameter);

//logs an exception thrown from somewhere
logger.error("This is error", exception);

To set logger in debug mode, change this in your property file

log4j.rootLogger=DEBUG, file