我想让DropWizard登录到输出文件。正在创建文件,但没有写入文件。
事实上,似乎没有使用提供的.yml文件中的配置。
我在启动时也收到以下警告,不确定它们是否相关:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/conor/.m2/repository/ch/qos/logback/logback-classic/1.1.3/logback-classic-1.1.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/conor/.m2/repository/com/conor/project/project-common/0.1-SNAPSHOT/project-common-0.1-SNAPSHOT.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
如何让dropwizard获取启动时提供的yml中的日志配置,如何确定当前配置的来源?感谢。
UPDATE ::
我正在运行DropWizard v0.9.1
,我的日志配置如下:
# Logging settings.
logging:
# The default level of all loggers. Can be OFF, ERROR, WARN, INFO, DEBUG, TRACE, or ALL.
level: TRACE
# Logger-specific levels.
loggers:
# Sets the level for 'com.example.app' to DEBUG.
io.dropwizard: INFO
# Redirects SQL logs to a separate file
org.hibernate.SQL:
level: DEBUG
# Logback's Time Based Rolling Policy - archivedLogFilenamePattern: /tmp/application-%d{yyyy-MM-dd}.log.gz
# Logback's Size and Time Based Rolling Policy - archivedLogFilenamePattern: /tmp/application-%d{yyyy-MM-dd}-%i.log.gz
# Logback's Fixed Window Rolling Policy - archivedLogFilenamePattern: /tmp/application-%i.log.gz
appenders:
- type: console
- type: file
threshold: DEBUG
logFormat: "%-6level [%d{HH:mm:ss.SSS}] [%t] %logger{5} - %X{code} %msg %n"
currentLogFilename: output/logs/dropwizard.txt
archivedLogFilenamePattern: output/logs/dropwizard-%d{yyyy-MM-dd}-%i.txt.gz
archivedFileCount: 10
timeZone: UTC
maxFileSize: 10MB
答案 0 :(得分:5)
这看起来像是典型的SLF4J
绑定问题,很容易解决。首先,请查看URL provided with the warning中的相关部分以获得解释。
SLF4J发出的警告只是一个警告。即使存在多个绑定, SLF4J也会选择一个日志记录框架/实现并与其绑定。 SLF4J选择绑定的方式由JVM决定,出于所有实际目的,应被视为随机。从版本1.6.6开始,SLF4J将命名它实际绑定的框架/实现类。 嵌入式组件(如库或框架)不应声明对任何SLF4J绑定的依赖性,而仅依赖于slf4j-api。当库声明对SLF4J绑定的编译时依赖性时,它会对最终用户强制绑定,从而否定SLF4J的用途。当您遇到一个嵌入式组件声明对任何SLF4J绑定的编译时依赖性时,请花时间联系所述组件/库的作者,并请他们修补他们的方式。
由于绑定选择是随机的,我的猜测是绑定了project-common
SLF4J
依赖关系而不是来自logback-classic
的预期关联,dropwizard
的传递依赖关系。您应该排除Maven project-common
文件中pom
中的那个或更好,如果您有权访问project-common
的代码,请将其从pom
文件中删除链接到网页建议(即“修补他们的方式”)。
答案 1 :(得分:0)
从Exception中,我认为你在类路径中使用两个不同版本的logback经典产生了冲突。尝试找出包含两次但不同版本的jar并删除其中一个。如果您使用Maven来管理依赖项,请使用标记
排除jar <exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>the version you want to remove</version>
</exclusion>
</exclusions>