playframework - Logback encoder layout for processing output of org.jboss.netty.handler.logging.LoggingHandler -
i using play 2.3 develop application , has enabled netty log wire using -dhttp.netty.log.wire=true when starting play application. have set level="debug" of logger org.jboss.netty.handler.logging.logginghandler in custom logger.xml file have added conf directory of play application. next wanted take log messages logger file rolling policy. this, have following configuration in logger.xml file.
<configuration> <conversionrule conversionword="coloredlevel" converterclass="play.api.logger$coloredlevel" /> <appender name="stdout" class="ch.qos.logback.core.consoleappender"> <encoder> <pattern> %coloredlevel %logger{15} - %message%n%xexception{5} </pattern> </encoder> </appender> <appender name="access_file" class="ch.qos.logback.core.rolling.rollingfileappender"> <file>/users/bathiyap/drive/logs/access.log</file> <!-- daily rollover compression --> <rollingpolicy class="ch.qos.logback.core.rolling.timebasedrollingpolicy"> <filenamepattern>access-log-%d{yyyy-mm-dd}.gz</filenamepattern> <!-- keep 1 week worth of history --> <maxhistory>7</maxhistory> </rollingpolicy> <encoder> <pattern> %date{yyyy-mm-dd hh:mm:ss zzzz} %message%n </pattern> <immediateflush>false</immediateflush> </encoder> </appender> <!-- additivity=false ensures access log data goes access log --> <logger name="org.jboss.netty.handler.logging.logginghandler" level="debug" additivity="false"> <appender-ref ref="access_file"/> </logger> <logger name="play" level="info" /> <logger name="application" level="debug" /> <root level="error"> <appender-ref ref="stdout"/> </root> </configuration> as seen above configurations log messages org.jboss.netty.handler.logging.logginghandler sent access.log file while other log messages written stdout. working expected configuration , http request/response related log messages getting logged in access.log file.
but problem is, log messages in access.log file verbose , events corresponding same request/response goes multilines. can understand happening due encoder block have specified in logger.xml rolling file appender below.
<encoder> <pattern> %date{yyyy-mm-dd hh:mm:ss zzzz} %message%n </pattern> ... </encoder> i have seen in logback documentation can specify layout class encoder below,
<encoder class="ch.qos.logback.core.encoder.layoutwrappingencoder"> <layout class="some layout class"> <pattern> pattern definition matching layout class </pattern> </layout> </encoder> now question have is, there standard layout classes in logback logger using generates log messages, namely, org.jboss.netty.handler.logging.logginghandler?
i want each log event (i.e. http request/response) nicely compact single line in log file in format such give below,
#remoteip:port #localip:port #datetimestamp #elapsedtime #requestmethod #requesturi #statuscode #bytessent #useragent where,
#remoteip:port - remote ip address , port
#localip:port - local ip address , port
#datetimestamp - date , timestamp such 2015-06-12 00:06:44
#elapsedtime - time taken serve request such 0.231
#requestmethod - request method such get, post
#requesturi - requested uri such /openapi-rest-web/v1/product/1467866?skudetail=true
#statuscode - response status code such 200
#bytessent - response's content length such 3167
#useragent - remote user agent such ""mozilla/5.0 (linux; u; android 4.4.4; nexus 5 build/ktu84p)"
thanks in advance.
we followed action.simple approach solve problem. have call action in controller following annotation @with(logaction.class)
@override public f.promise<result> call(http.context ctx) throws throwable { http.request request = ctx.request(); date curdate = new date(); simpledateformat format = new simpledateformat("d/eee/yyyy hh:mm:ss z"); f.promise<result> call = delegate.call(ctx); return call.map(r -> { accesslogger.info(request.remoteaddress() + "- ["+format.format(curdate)+"] "+ request.method() + " "+ request.uri() + " " + r.status()); return r; }); }} also in application-logger.xml change pattern message since wanted format time.
<encoder> <pattern>%message%n</pattern> <!-- quadruples logging throughput --> </encoder>
Comments
Post a Comment