当 运行 来自 WAR 时,Logback 筛选 RollingFileAppender 不旋转
Logback sift RollingFileAppender not rotating when run from WAR
我有一个 logback 配置,可以记录到多个文件,包括名为 servernexus.log 的主日志文件。每个日志文件都应该由 RollingFileAppender 轮换。当我使用 logback 配置文件和我的 $CLASSPATH 中的所有其他内容从 eclipse 运行 时,servernexus.log 被 logback 正确旋转。当我 运行 从我的生产 WAR 文件日志记录工作但 servernexus.log 旋转永远不会发生。
这是 logback-server-win32event.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="SiftAppender" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>discriminatorId</key>
<defaultValue>${cmb.log.file.name}</defaultValue>
</discriminator>
<sift>
<appender name="FILE-${discriminatorId}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${cmb.log.dir}/${discriminatorId}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>${cmb.log.dir}/archive/${discriminatorId}.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<!-- keep ${maxbackupindex} days' worth of history capped at ${maxfilesize} total size -->
<maxHistory>${cmb.log.maxbackupindex}</maxHistory>
<totalSizeCap>${cmb.log.maxfilesize}</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %msg%n</pattern>
</encoder>
</appender>
</sift>
</appender>
<logger name="org.apache" level="WARN"/>
<logger name="org.hibernate" level="INFO"/>
<logger name="org.hibernate.type" level="ERROR"/>
<logger name="org.hibernate.id" level="ERROR"/>
<logger name="org.hibernate.cfg.annotations" level="WARN"/>
<logger name="org.hibernate.tool.hbm2ddl" level="WARN"/>
<!-- DEBUG output shows db user password: -->
<logger name="org.hibernate.jpa.internal.util.LogHelper" level="WARN"/>
<!-- DEBUG output shows db user password: -->
<logger name="org.hibernate.internal.util.EntityPrinter" level="WARN"/>
<logger name="com.mchange" level="INFO"/>
<logger name="org.springframework" level="WARN"/>
<logger name="org.quartz" level="INFO"/>
<!-- HtmlUnit - turn off debug by debug -->
<logger name="com.gargoylesoftware.htmlunit" level="INFO"/>
<logger name="org.eclipse" level="WARN"/>
<!-- Disable "WARN XXX scanned from multiple locations" -->
<logger name="org.eclipse.jetty.annotations.AnnotationParser" level="ERROR"/>
<if condition='isDefined("logging.jetty.level")'>
<then>
<logger name="org.eclipse.jetty" level="${logging.jetty.level}"/>
</then>
<else>
<logger name="org.eclipse.jetty" level="INFO"/>
</else>
</if>
<root level="WARN">
<appender-ref ref="SiftAppender" />
</root>
</configuration>
如您所见,我正在使用一个鉴别器,它在初始化 logback 之前的 运行 时间设置为系统 属性。您可以在下面的输出中看到“cmb.log.file.name”属性。
当我从 eclipse 运行 运行时,它会工作并报告预期的 TimeBasedRollingPolicy 行:
11:19:40,144 INFO Log Configurator T1 | Logging PROP cmb.log.file = C:\Users\mcooper\ws\cmb.0\run\server\log\servernexus.log
11:19:40,194 INFO Log Configurator T1 | Configuring log to file for logback var "log.file.name" = "servernexus"
11:19:40,194 INFO Log Configurator T1 | Logging PROP cmb.log.file.name = servernexus
11:19:40,194 INFO Log Configurator T1 | Logging PROP cmb.log.maxfilesize = 50MB
11:19:40,194 INFO Log Configurator T1 | Logging PROP cmb.log.maxbackupindex = 5
11:19:40,303 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-server-win32event.xml] at [file:/C:/Users/mcooper/ws/cmb/6.0/CmbProduct/Common/bin/main/logback-server-win32event.xml]
11:19:40,440 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.classic.sift.SiftingAppender]
11:19:40,455 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [SiftAppender]
11:19:40,478 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.sift.MDCBasedDiscriminator] for [discriminator] property
11:19:40,493 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [org.mangogrove.logbackwela.Win32EventLogAppender]
11:19:40,496 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [EventLogAppender]
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.apache] to WARN
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate] to INFO
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.type] to ERROR
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.id] to ERROR
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.cfg.annotations] to WARN
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.tool.hbm2ddl] to WARN
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.jpa.internal.util.LogHelper] to WARN
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.internal.util.EntityPrinter] to WARN
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.mchange] to INFO
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.springframework] to WARN
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.quartz] to INFO
11:19:40,502 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.gargoylesoftware.htmlunit] to INFO
11:19:40,502 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.eclipse] to WARN
11:19:40,872 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.eclipse.jetty] to INFO
11:19:40,872 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to WARN
11:19:40,872 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [SiftAppender] to Logger[ROOT]
11:19:40,873 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [EventLogAppender] to Logger[ROOT]
11:19:40,873 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
11:19:40,878 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@64485a47 - Registering current configuration as safe fallback point
2020-09-01 11:19:40.952:INFO::main: Logging initialized @1106ms to org.eclipse.jetty.util.log.StdErrLog
11:19:40,979 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
11:19:40,985 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [FILE-servernexus]
11:19:40,993 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@2076287037 - setting totalSizeCap to 50 MB
11:19:41,015 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@2076287037 - Will use gz compression
11:19:41,017 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@2076287037 - Will use the pattern C:/Users/mcooper/ws/cmb/6.0/run/server/log/archive/servernexus.%d{yyyy-MM-dd}.log for the active file
11:19:41,024 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'C:/Users/mcooper/ws/cmb/6.0/run/server/log/archive/servernexus.%d{yyyy-MM-dd}.log.gz'.
11:19:41,024 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
11:19:41,026 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Tue Sep 01 11:17:12 PDT 2020
11:19:41,028 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
11:19:41,066 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-servernexus] - Active log file name: C:\Users\mcooper\ws\cmb.0\run\server\log/servernexus.log
11:19:41,066 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-servernexus] - File property is set to [C:\Users\mcooper\ws\cmb.0\run\server\log/servernexus.log]
当我从生产 WAR 文件中 运行 时,logback 输出不报告任何 TimeBasedRollingPolicy:
10:55:10,673 INFO Log Configurator T1 | Logging PROP cmb.log.dir = C:\ProgramData\XXX\YYY\log
10:55:10,673 INFO Log Configurator T1 | Logging PROP cmb.log.file = C:\ProgramData\XXX\YYY\log\servernexus.log
10:55:10,767 INFO Log Configurator T1 | Configuring log to file for logback var "log.file.name" = "servernexus"
10:55:10,767 INFO Log Configurator T1 | Logging PROP cmb.log.file.name = servernexus
10:55:10,767 INFO Log Configurator T1 | Logging PROP cmb.log.maxfilesize = 50MB
10:55:10,767 INFO Log Configurator T1 | Logging PROP cmb.log.maxbackupindex = 5
10:55:10,782 INFO Log Configurator T1 | Logging [servernexus.log] to C:\ProgramData\XXX\YYY\log\servernexus.log using logback-server-win32event.xml
2020-09-01 10:55:12.236:INFO::main: Logging initialized @1792ms to org.eclipse.jetty.util.log.StdErrLog
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/s-cmbtest/AppData/Local/Temp/yyy_console_wartmp_6.0.79/webapp/WEB-INF/lib/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Program%20Files/XXX/YYY/lib/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
10:55:59,322 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-server-win32event.xml] at [jar:file:/C:/Users/s-cmbtest/AppData/Local/Temp/yyy_console_wartmp_6.0.79/webapp/WEB-INF/lib/Common-6.0.79.jar!/logback-server-win32event.xml]
10:55:59,322 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback-server-win32event.xml] occurs multiple times on the classpath.
10:55:59,322 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback-server-win32event.xml] occurs at [jar:file:/C:/Users/s-cmbtest/AppData/Local/Temp/yyy_console_wartmp_6.0.79/webapp/WEB-INF/lib/Common-6.0.79.jar!/logback-server-win32event.xml]
10:55:59,322 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback-server-win32event.xml] occurs at [jar:file:/C:/Program%20Files/XXX/YYY/lib/Common-6.0.79.jar!/logback-server-win32event.xml]
10:55:59,338 |-INFO in ch.qos.logback.core.joran.spi.ConfigurationWatchList@1f05b63d - URL [jar:file:/C:/Users/s-cmbtest/AppData/Local/Temp/yyy_console_wartmp_6.0.79/webapp/WEB-INF/lib/Common-6.0.79.jar!/logback-server-win32event.xml] is not of type file
10:55:59,448 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
10:55:59,448 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.classic.sift.SiftingAppender]
10:55:59,448 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [SiftAppender]
10:55:59,463 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.sift.MDCBasedDiscriminator] for [discriminator] property
10:55:59,463 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [org.mangogrove.logbackwela.Win32EventLogAppender]
10:55:59,479 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [EventLogAppender]
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.apache] to WARN
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate] to INFO
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.type] to ERROR
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.id] to ERROR
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.cfg.annotations] to WARN
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.tool.hbm2ddl] to WARN
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.jpa.internal.util.LogHelper] to WARN
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.internal.util.EntityPrinter] to WARN
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.mchange] to INFO
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.springframework] to WARN
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.quartz] to INFO
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.gargoylesoftware.htmlunit] to INFO
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.eclipse] to WARN
10:55:59,775 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.eclipse.jetty] to INFO
10:55:59,775 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to WARN
10:55:59,775 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [SiftAppender] to Logger[ROOT]
10:55:59,775 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [EventLogAppender] to Logger[ROOT]
10:55:59,775 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
10:55:59,775 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@524b1c70 - Registering current configuration as safe fallback point
我不是这方面的专家,但我认为这应该有助于找到问题。在配置中启用调试以检查 logback 并且您缺少 %i 。来自 logback 文档中 Appenders 的第 4 章
"除了"%d"之外还要注意"%i"转换令牌。%i和%d令牌都是强制性的。每次当前日志文件在当前时间段结束前达到maxFileSize时,它将从 0 开始以递增的索引进行归档。"
我终于明白了。 logback、slf4j 等 类 被码头加载了两次。解决方法是告诉码头将这些 类 视为系统 类:
WebAppContext.addSystemClasses(server, "org.slf4j.", "ch.qos.logback.", "org.apache.commons.logging.", "org.apache.log4j.", "org.codehaus.janino.");
这么简单吧? :(
我有一个 logback 配置,可以记录到多个文件,包括名为 servernexus.log 的主日志文件。每个日志文件都应该由 RollingFileAppender 轮换。当我使用 logback 配置文件和我的 $CLASSPATH 中的所有其他内容从 eclipse 运行 时,servernexus.log 被 logback 正确旋转。当我 运行 从我的生产 WAR 文件日志记录工作但 servernexus.log 旋转永远不会发生。
这是 logback-server-win32event.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="SiftAppender" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>discriminatorId</key>
<defaultValue>${cmb.log.file.name}</defaultValue>
</discriminator>
<sift>
<appender name="FILE-${discriminatorId}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${cmb.log.dir}/${discriminatorId}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>${cmb.log.dir}/archive/${discriminatorId}.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<!-- keep ${maxbackupindex} days' worth of history capped at ${maxfilesize} total size -->
<maxHistory>${cmb.log.maxbackupindex}</maxHistory>
<totalSizeCap>${cmb.log.maxfilesize}</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %msg%n</pattern>
</encoder>
</appender>
</sift>
</appender>
<logger name="org.apache" level="WARN"/>
<logger name="org.hibernate" level="INFO"/>
<logger name="org.hibernate.type" level="ERROR"/>
<logger name="org.hibernate.id" level="ERROR"/>
<logger name="org.hibernate.cfg.annotations" level="WARN"/>
<logger name="org.hibernate.tool.hbm2ddl" level="WARN"/>
<!-- DEBUG output shows db user password: -->
<logger name="org.hibernate.jpa.internal.util.LogHelper" level="WARN"/>
<!-- DEBUG output shows db user password: -->
<logger name="org.hibernate.internal.util.EntityPrinter" level="WARN"/>
<logger name="com.mchange" level="INFO"/>
<logger name="org.springframework" level="WARN"/>
<logger name="org.quartz" level="INFO"/>
<!-- HtmlUnit - turn off debug by debug -->
<logger name="com.gargoylesoftware.htmlunit" level="INFO"/>
<logger name="org.eclipse" level="WARN"/>
<!-- Disable "WARN XXX scanned from multiple locations" -->
<logger name="org.eclipse.jetty.annotations.AnnotationParser" level="ERROR"/>
<if condition='isDefined("logging.jetty.level")'>
<then>
<logger name="org.eclipse.jetty" level="${logging.jetty.level}"/>
</then>
<else>
<logger name="org.eclipse.jetty" level="INFO"/>
</else>
</if>
<root level="WARN">
<appender-ref ref="SiftAppender" />
</root>
</configuration>
如您所见,我正在使用一个鉴别器,它在初始化 logback 之前的 运行 时间设置为系统 属性。您可以在下面的输出中看到“cmb.log.file.name”属性。
当我从 eclipse 运行 运行时,它会工作并报告预期的 TimeBasedRollingPolicy 行:
11:19:40,144 INFO Log Configurator T1 | Logging PROP cmb.log.file = C:\Users\mcooper\ws\cmb.0\run\server\log\servernexus.log
11:19:40,194 INFO Log Configurator T1 | Configuring log to file for logback var "log.file.name" = "servernexus"
11:19:40,194 INFO Log Configurator T1 | Logging PROP cmb.log.file.name = servernexus
11:19:40,194 INFO Log Configurator T1 | Logging PROP cmb.log.maxfilesize = 50MB
11:19:40,194 INFO Log Configurator T1 | Logging PROP cmb.log.maxbackupindex = 5
11:19:40,303 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-server-win32event.xml] at [file:/C:/Users/mcooper/ws/cmb/6.0/CmbProduct/Common/bin/main/logback-server-win32event.xml]
11:19:40,440 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.classic.sift.SiftingAppender]
11:19:40,455 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [SiftAppender]
11:19:40,478 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.sift.MDCBasedDiscriminator] for [discriminator] property
11:19:40,493 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [org.mangogrove.logbackwela.Win32EventLogAppender]
11:19:40,496 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [EventLogAppender]
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.apache] to WARN
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate] to INFO
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.type] to ERROR
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.id] to ERROR
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.cfg.annotations] to WARN
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.tool.hbm2ddl] to WARN
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.jpa.internal.util.LogHelper] to WARN
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.internal.util.EntityPrinter] to WARN
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.mchange] to INFO
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.springframework] to WARN
11:19:40,501 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.quartz] to INFO
11:19:40,502 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.gargoylesoftware.htmlunit] to INFO
11:19:40,502 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.eclipse] to WARN
11:19:40,872 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.eclipse.jetty] to INFO
11:19:40,872 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to WARN
11:19:40,872 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [SiftAppender] to Logger[ROOT]
11:19:40,873 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [EventLogAppender] to Logger[ROOT]
11:19:40,873 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
11:19:40,878 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@64485a47 - Registering current configuration as safe fallback point
2020-09-01 11:19:40.952:INFO::main: Logging initialized @1106ms to org.eclipse.jetty.util.log.StdErrLog
11:19:40,979 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
11:19:40,985 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [FILE-servernexus]
11:19:40,993 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@2076287037 - setting totalSizeCap to 50 MB
11:19:41,015 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@2076287037 - Will use gz compression
11:19:41,017 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@2076287037 - Will use the pattern C:/Users/mcooper/ws/cmb/6.0/run/server/log/archive/servernexus.%d{yyyy-MM-dd}.log for the active file
11:19:41,024 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'C:/Users/mcooper/ws/cmb/6.0/run/server/log/archive/servernexus.%d{yyyy-MM-dd}.log.gz'.
11:19:41,024 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
11:19:41,026 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Tue Sep 01 11:17:12 PDT 2020
11:19:41,028 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
11:19:41,066 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-servernexus] - Active log file name: C:\Users\mcooper\ws\cmb.0\run\server\log/servernexus.log
11:19:41,066 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-servernexus] - File property is set to [C:\Users\mcooper\ws\cmb.0\run\server\log/servernexus.log]
当我从生产 WAR 文件中 运行 时,logback 输出不报告任何 TimeBasedRollingPolicy:
10:55:10,673 INFO Log Configurator T1 | Logging PROP cmb.log.dir = C:\ProgramData\XXX\YYY\log
10:55:10,673 INFO Log Configurator T1 | Logging PROP cmb.log.file = C:\ProgramData\XXX\YYY\log\servernexus.log
10:55:10,767 INFO Log Configurator T1 | Configuring log to file for logback var "log.file.name" = "servernexus"
10:55:10,767 INFO Log Configurator T1 | Logging PROP cmb.log.file.name = servernexus
10:55:10,767 INFO Log Configurator T1 | Logging PROP cmb.log.maxfilesize = 50MB
10:55:10,767 INFO Log Configurator T1 | Logging PROP cmb.log.maxbackupindex = 5
10:55:10,782 INFO Log Configurator T1 | Logging [servernexus.log] to C:\ProgramData\XXX\YYY\log\servernexus.log using logback-server-win32event.xml
2020-09-01 10:55:12.236:INFO::main: Logging initialized @1792ms to org.eclipse.jetty.util.log.StdErrLog
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/s-cmbtest/AppData/Local/Temp/yyy_console_wartmp_6.0.79/webapp/WEB-INF/lib/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Program%20Files/XXX/YYY/lib/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
10:55:59,322 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-server-win32event.xml] at [jar:file:/C:/Users/s-cmbtest/AppData/Local/Temp/yyy_console_wartmp_6.0.79/webapp/WEB-INF/lib/Common-6.0.79.jar!/logback-server-win32event.xml]
10:55:59,322 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback-server-win32event.xml] occurs multiple times on the classpath.
10:55:59,322 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback-server-win32event.xml] occurs at [jar:file:/C:/Users/s-cmbtest/AppData/Local/Temp/yyy_console_wartmp_6.0.79/webapp/WEB-INF/lib/Common-6.0.79.jar!/logback-server-win32event.xml]
10:55:59,322 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback-server-win32event.xml] occurs at [jar:file:/C:/Program%20Files/XXX/YYY/lib/Common-6.0.79.jar!/logback-server-win32event.xml]
10:55:59,338 |-INFO in ch.qos.logback.core.joran.spi.ConfigurationWatchList@1f05b63d - URL [jar:file:/C:/Users/s-cmbtest/AppData/Local/Temp/yyy_console_wartmp_6.0.79/webapp/WEB-INF/lib/Common-6.0.79.jar!/logback-server-win32event.xml] is not of type file
10:55:59,448 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
10:55:59,448 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.classic.sift.SiftingAppender]
10:55:59,448 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [SiftAppender]
10:55:59,463 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.sift.MDCBasedDiscriminator] for [discriminator] property
10:55:59,463 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [org.mangogrove.logbackwela.Win32EventLogAppender]
10:55:59,479 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [EventLogAppender]
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.apache] to WARN
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate] to INFO
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.type] to ERROR
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.id] to ERROR
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.cfg.annotations] to WARN
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.tool.hbm2ddl] to WARN
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.jpa.internal.util.LogHelper] to WARN
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.internal.util.EntityPrinter] to WARN
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.mchange] to INFO
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.springframework] to WARN
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.quartz] to INFO
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.gargoylesoftware.htmlunit] to INFO
10:55:59,479 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.eclipse] to WARN
10:55:59,775 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.eclipse.jetty] to INFO
10:55:59,775 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to WARN
10:55:59,775 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [SiftAppender] to Logger[ROOT]
10:55:59,775 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [EventLogAppender] to Logger[ROOT]
10:55:59,775 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
10:55:59,775 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@524b1c70 - Registering current configuration as safe fallback point
我不是这方面的专家,但我认为这应该有助于找到问题。在配置中启用调试以检查 logback 并且您缺少 %i 。来自 logback 文档中 Appenders 的第 4 章
"除了"%d"之外还要注意"%i"转换令牌。%i和%d令牌都是强制性的。每次当前日志文件在当前时间段结束前达到maxFileSize时,它将从 0 开始以递增的索引进行归档。"
我终于明白了。 logback、slf4j 等 类 被码头加载了两次。解决方法是告诉码头将这些 类 视为系统 类:
WebAppContext.addSystemClasses(server, "org.slf4j.", "ch.qos.logback.", "org.apache.commons.logging.", "org.apache.log4j.", "org.codehaus.janino.");
这么简单吧? :(