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