Reputation: 523
I'm having issue in my Dropwizard (version 1.3.8) app logging HTTP Requests into file. I've followed Dropwizard's documentation for configuration of YAML file and my config.yml
looks like this:
logging:
level: INFO
loggers:
com.nikolas.master_thesis: DEBUG
appenders:
- type: file
currentLogFilename: /home/nikola/Documents/DWApp-LOGs/DW-Bookshop_LOG.log
threshold: ALL
queueSize: 512
archive: true
archivedLogFilenamePattern: /home/nikola/Documents/DWApp-LOGs/DW-Bookshop_LOG-%d.log
archivedFileCount: 5
timeZone: UTC
logFormat: "%-5p [%d{ISO8601,UTC}] %c: %m%n%rEx"
# logFormat: "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
# logFormat: “%h %l %u %t “%r“ %s %b “%{Referer}i“ “%{User-Agent}i““ combined
# logFormat: '%h %l %u %t '%r' %\\>s %b '%{Referer}i' '%{User-Agent}i''
# logFormat: "%d{HH:mm:ss.SSS} [%thread] %-5level %com.nikolas.master_thesis.examples.`config-kt`.logger{36} - %msg%n"
# logFormat: “%h %l %u %t “%r“ %s %b “%{Referer}i“ “%{User-Agent}i““
# logFormat: "%h %l %u %t \"%r\" %s %O \"%{Referer}i\""
# logFormat: “%h %l %u %t “%r“ %\\>s %b “%{Referer}i“ “%{User-Agent}i““
# logFormat: "%h %l %u %t \"%r\" \"%>s\" %O \"%{Referer}i\""
# logFormat: "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
# logFormat: combined
# logFormat: "%h %l %u %t \"%r\" %>s %b" /etc/httpd
# logFormat: “%h %l %u %t “%r” %s %b “%{User-Agent}i””
# logFormat: "%h %l %u %t \"%r\" %>s %b" /etc/httpd
# logFormat: "%h %l %u %t \"%r\" %>s %b"
# logFormat: "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
bufferSize: 8KB
immediateFlush: true
# filterFactories:
# - type: URI
- type: console
threshold: ALL
queueSize: 512
discardingThreshold: 0
timeZone: UTC
target: stdout
logFormat: "%-5p [%d{ISO8601,UTC}] %c: %m%n%rEx"
The thing is that HTTP Request is logged in console like this:
192.168.1.5 - - [09/Aug/2020:10:08:05 +0000] "GET /api/orders HTTP/1.1" 200 14094 "-" "Apache-HttpClient/4.5.10 (Java/1.8.0_161)" 710
...and I want to log it also in file, but it does NOT log it at all! I've tried to use commented logFormat
s, but I get error for each of those commented logFormat
values.
E.g. for logFormat: "%h %l %u %t \"%r\" %>s %b"
when I run it in terminal (I'm using RMI parameters to collect JMX samples from remote machine):
java -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=1616 -Dcom.sun.management.jmxremote.rmi.port=1616 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar ./target/DW-Bookshop-1.0-SNAPSHOT.jar server config.yml
...I get NumberFormatException:
java.lang.NumberFormatException: For input string: ">"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at ch.qos.logback.core.pattern.FormatInfo.valueOf(FormatInfo.java:73)
at ch.qos.logback.core.pattern.parser.Parser.T(Parser.java:136)
at ch.qos.logback.core.pattern.parser.Parser.E(Parser.java:96)
at ch.qos.logback.core.pattern.parser.Parser.Eopt(Parser.java:115)
at ch.qos.logback.core.pattern.parser.Parser.E(Parser.java:100)
at ch.qos.logback.core.pattern.parser.Parser.Eopt(Parser.java:115)
at ch.qos.logback.core.pattern.parser.Parser.E(Parser.java:100)
at ch.qos.logback.core.pattern.parser.Parser.Eopt(Parser.java:115)
at ch.qos.logback.core.pattern.parser.Parser.E(Parser.java:100)
at ch.qos.logback.core.pattern.parser.Parser.Eopt(Parser.java:115)
at ch.qos.logback.core.pattern.parser.Parser.E(Parser.java:100)
at ch.qos.logback.core.pattern.parser.Parser.Eopt(Parser.java:115)
at ch.qos.logback.core.pattern.parser.Parser.E(Parser.java:100)
at ch.qos.logback.core.pattern.parser.Parser.Eopt(Parser.java:115)
at ch.qos.logback.core.pattern.parser.Parser.E(Parser.java:100)
at ch.qos.logback.core.pattern.parser.Parser.Eopt(Parser.java:115)
at ch.qos.logback.core.pattern.parser.Parser.E(Parser.java:100)
at ch.qos.logback.core.pattern.parser.Parser.Eopt(Parser.java:115)
at ch.qos.logback.core.pattern.parser.Parser.E(Parser.java:100)
at ch.qos.logback.core.pattern.parser.Parser.Eopt(Parser.java:115)
at ch.qos.logback.core.pattern.parser.Parser.E(Parser.java:100)
at ch.qos.logback.core.pattern.parser.Parser.Eopt(Parser.java:115)
at ch.qos.logback.core.pattern.parser.Parser.E(Parser.java:100)
at ch.qos.logback.core.pattern.parser.Parser.parse(Parser.java:91)
at ch.qos.logback.core.pattern.PatternLayoutBase.start(PatternLayoutBase.java:83)
at io.dropwizard.logging.AbstractAppenderFactory.buildLayout(AbstractAppenderFactory.java:243)
at io.dropwizard.logging.AbstractOutputStreamAppenderFactory.build(AbstractOutputStreamAppenderFactory.java:25)
at io.dropwizard.logging.DefaultLoggingFactory.configure(DefaultLoggingFactory.java:143)
at io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:83)
at io.dropwizard.cli.Cli.run(Cli.java:78)
at io.dropwizard.Application.run(Application.java:93)
at com.nikolas.master_thesis.DropwizardMasterThesisApplication.main(DropwizardMasterThesisApplication.java:35)
I've also looked into this answer, but no luck! Also, I'm running Fedora 31 OS and I'm using Java 8.
Any advice/help is greatly appreciated.
UPDATE1:
I've digged bit deeper into Configuration Docs and found pattern under this link and edited value under logFormat key to be like this:
logFormat: "%h %l %u [%t] '%r' %s %b '%i{Referer}' '%i{User-Agent}'"
Also found out that Logback project usess PatternLayout class and got this output (as starting lines and other lines are as usual) in terminal:
09:27:33,944 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
09:27:33,944 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
09:27:33,944 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
09:27:33,966 |-INFO in ch.qos.logback.classic.BasicConfigurator@316a598d - Setting up default configuration.
09:27:36,978 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@216914 - Propagating INFO level on Logger[ROOT] onto the JUL framework
09:27:37,008 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@216914 - Propagating DEBUG level on Logger[com.nikolas.master_thesis] onto the JUL framework
09:27:37,010 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[file-appender] - Setting bufferSize to [8 KB]
09:27:37,027 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@1805845895 - No compression will be used
09:27:37,028 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@1805845895 - Will use the pattern /home/nikola/Documents/DWApp-LOGs/DW-Bookshop_LOG-%d.log for the active file
09:27:37,050 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern '/home/nikola/Documents/DWApp-LOGs/DW-Bookshop_LOG-%d.log'.
09:27:37,050 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
09:27:37,068 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Thu Aug 13 09:27:06 CEST 2020
09:27:37,071 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@35764bef - There is no conversion class registered for conversion word [h]
09:27:37,071 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@35764bef - [h] is not a valid conversion word
09:27:37,071 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@35764bef - There is no conversion class registered for conversion word [l]
09:27:37,071 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@35764bef - [l] is not a valid conversion word
09:27:37,071 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@35764bef - There is no conversion class registered for conversion word [u]
09:27:37,071 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@35764bef - [u] is not a valid conversion word
09:27:37,071 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@35764bef - There is no conversion class registered for conversion word [s]
09:27:37,071 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@35764bef - [s] is not a valid conversion word
09:27:37,071 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@35764bef - There is no conversion class registered for conversion word [b]
09:27:37,071 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@35764bef - [b] is not a valid conversion word
09:27:37,071 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@35764bef - There is no conversion class registered for conversion word [i]
09:27:37,071 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@35764bef - [i] is not a valid conversion word
09:27:37,071 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@35764bef - There is no conversion class registered for conversion word [i]
09:27:37,071 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@35764bef - [i] is not a valid conversion word
09:27:37,074 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[file-appender] - Active log file name: /home/nikola/Documents/DWApp-LOGs/DW-Bookshop_LOG.log
09:27:37,074 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[file-appender] - File property is set to [/home/nikola/Documents/DWApp-LOGs/DW-Bookshop_LOG.log]
09:27:37,075 |-INFO in ch.qos.logback.classic.AsyncAppender[async-file-appender] - Attaching appender named [file-appender] to AsyncAppender.
09:27:37,076 |-INFO in ch.qos.logback.classic.AsyncAppender[async-file-appender] - Setting discardingThreshold to 0
09:27:37,077 |-INFO in ch.qos.logback.classic.AsyncAppender[async-console-appender] - Attaching appender named [console-appender] to AsyncAppender.
09:27:37,077 |-INFO in ch.qos.logback.classic.AsyncAppender[async-console-appender] - Setting discardingThreshold to 0
Apperantly I need to create logback.xml file as this line states:
09:27:33,944 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
Any idea where does that logback.xml file needs to located in MAven project and which value for logFormat should I use then?
Upvotes: 2
Views: 3440
Reputation: 96
To log http requests in a file you have to set server: requestLog:
config. logging
config is used for configurate logs from your application.
Look the documentation for that config and logback-access and logback-access-pattern references at: https://www.dropwizard.io/en/latest/manual/configuration.html#request-log
This is my example:
...
logging:
level: INFO
appenders:
- type: file
currentLogFilename: /logs/api.log
archivedLogFilenamePattern: /logs/api-%d{yyyy-MM-dd}.log.gz
archivedFileCount: 7
queueSize: 2048
loggers:
com.mstn: DEBUG
server:
applicationConnectors:
- type: http
port: 8003
adminConnectors:
- type: http
port: 9003
requestLog:
appenders:
- type: file
currentLogFilename: /logs/api-requests.log
archivedLogFilenamePattern: /logs/api-requests-%d{yyyy-MM-dd}.log.gz
archivedFileCount: 7
queueSize: 2048
database:
...
Upvotes: 5