Search code examples
micronaut

How to log client IP Address using LogBack


I am using micronaut 1.2.5, I need to log the client IP Address.

this is my logback.xml

<configuration>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <withJansi>true</withJansi>
    <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
    <encoder>
        <pattern>%cyan(%d{HH:mm:ss.SSS}) %gray([%thread]) %highlight(%-5level) %magenta(%logger{36}) - %msg%n</pattern>
    </encoder>
</appender>

<root level="info">
    <appender-ref ref="STDOUT" />
</root>

i need to log the client ip address.

I see the latest docs already have this feature.


Solution

  • i need to log the client ip address.

    You can use a HttpClientAddressResolver to resolve the client IP address.

    import io.micronaut.http.HttpRequest;
    import io.micronaut.http.annotation.Controller;
    import io.micronaut.http.annotation.Get;
    import io.micronaut.http.HttpStatus;
    import io.micronaut.http.server.util.HttpClientAddressResolver;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    @Controller("/demo")
    public class DemoController {
        private static final Logger LOG = LoggerFactory.getLogger(DemoController.class);
    
        private final HttpClientAddressResolver addressResolver;
    
        public DemoController(HttpClientAddressResolver addressResolver) {
            this.addressResolver = addressResolver;
        }
    
        @Get("/")
        public HttpStatus index(HttpRequest request) {
            LOG.debug("The client ip address is {}.", addressResolver.resolve(request));
            return HttpStatus.OK;
        }
    }