带有错误时间戳的日志记录

问题描述 投票:0回答:1

我正在尝试使用spring boot logback日志框架来记录我的信息。不幸的是,当我记录信息警告错误时,时间戳完全相同,与应用程序服务器启动时间相同。

My logback.xml configuration information is as follows:


<?xml version="1.0" encoding="UTF-8"?>
<configuration
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://www.padual.com/java/logback.xsd"
        debug="false" scan="true" scanPeriod="30 second">
    <property name="PROJECT" value="AmazonRss" />
    <property name="ROOT" value="logs/${PROJECT}/" />
    <property name="FILESIZE" value="10MB" />
    <property name="MAXHISTORY" value="100" />
    <timestamp key="DATETIME" datePattern="yyyy/MM/dd HH:mm:ss" />
    <!-- Console printing -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder charset="utf-8">
            <pattern>[%-5level] %d{${DATETIME}} [%thread] %logger{36} - %m%n
            </pattern>
        </encoder>
    </appender>

........

我的日志是这样的:

[INFO ] 2019-04-17 16:48:44 [main] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8888"]
[INFO ] 2019-04-17 16:48:44 [main] o.a.catalina.core.StandardService - Starting service [Tomcat]
[INFO ] 2019-04-17 16:48:44 [main] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.14]
[INFO ] 2019-04-17 16:48:44 [main] o.a.c.core.AprLifecycleListener - The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
[INFO ] 2019-04-17 16:48:44 [main] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
[INFO ] 2019-04-17 16:48:44 [main] o.s.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 6725 ms
[INFO ] 2019-04-17 16:48:44 [main] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
[INFO ] 2019-04-17 16:48:44 [main] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
[INFO ] 2019-04-17 16:48:44 [main] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [
    name: default
    ...]
[INFO ] 2019-04-17 16:48:44 [main] org.hibernate.Version - HHH000412: Hibernate Core {5.3.7.Final}
[INFO ] 2019-04-17 16:48:44 [main] org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found
[INFO ] 2019-04-17 16:48:44 [main] o.h.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
[INFO ] 2019-04-17 16:48:44 [main] org.hibernate.dialect.Dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
[INFO ] 2019-04-17 16:48:44 [main] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default'
[INFO ] 2019-04-17 16:48:44 [main] com.denistek.rss.utils.SpringUtil - ---------------------------------------------------------------------
[INFO ] 2019-04-17 16:48:44 [main] com.denistek.rss.utils.SpringUtil - ========The ApplicationContext configuration is successful. In the normal class, you can get the applicationContext object by calling SpringUtils.getAppContext(). applicationContext=org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@c818063, started on Wed Apr 17 16:48:45 CST 2019========
[INFO ] 2019-04-17 16:48:44 [main] o.s.b.a.e.web.EndpointLinksResolver - Exposing 2 endpoint(s) beneath base path '/actuator'
[INFO ] 2019-04-17 16:48:44 [main] o.s.s.c.ThreadPoolTaskExecutor - Initializing ExecutorService 'applicationTaskExecutor'
[INFO ] 2019-04-17 16:48:44 [main] s.d.s.w.p.DocumentationPluginsBootstrapper - Context refreshed
[INFO ] 2019-04-17 16:48:44 [main] s.d.s.w.p.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s)
[INFO ] 2019-04-17 16:48:44 [main] s.d.s.w.s.ApiListingReferenceScanner - Scanning for api listing references
[INFO ] 2019-04-17 16:48:44 [main] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8888"]
[INFO ] 2019-04-17 16:48:44 [main] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 8888 (http) with context path ''
[INFO ] 2019-04-17 16:48:44 [main] com.denistek.rss.RssApplication - Started RssApplication in 32.748 seconds (JVM running for 34.213)
[INFO ] 2019-04-17 16:48:44 [http-nio-8888-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
[INFO ] 2019-04-17 16:48:44 [http-nio-8888-exec-1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
[INFO ] 2019-04-17 16:48:44 [http-nio-8888-exec-1] o.s.web.servlet.DispatcherServlet - Completed initialization in 22 ms
[INFO ] 2019-04-17 16:48:44 [http-nio-8888-exec-4] e.u.i.c.crawler.CrawlController - Deleted contents of: /tmp/frontier ( as you have configured resumable crawling to false )
[INFO ] 2019-04-17 16:48:44 [http-nio-8888-exec-4] e.u.i.c.crawler.CrawlController - Crawler 1 started
[INFO ] 2019-04-17 16:48:44 [http-nio-8888-exec-4] e.u.i.c.crawler.CrawlController - Crawler 2 started
[INFO ] 2019-04-17 16:4

显然,我在服务器启动很多时间后破坏了我的服务,但运行时日志信息与服务启动时的时间戳相同。

我不熟悉logback,我不知道这个问题是怎么出现的。如果你能提供一些建议,我将非常感激。

java logback
1个回答
1
投票

<timestamp标记不用于包含属性。它在开始时进行评估,其值由结果替换。这意味着你最终得到相当于:

<pattern>[%-5level] %d{2019-04-17 16:48:44} [%thread] %logger{36} - %m%n

因此固定的日期时间。 The documentation澄清了这一点:

timestamp元素有两个强制属性keydatePattern以及一个可选的timeReference属性。 key属性是密钥的名称,在该密钥下,时间戳可作为变量用于后续配置元素。 datePattern属性表示用于将当前时间(解析配置文件)转换为字符串的日期模式。日期模式应遵循SimpleDateFormat中定义的约定。 timeReference属性表示时间戳的时间参考。默认值是配置文件的解释/解析时间,即当前时间。但是,在某些情况下,使用上下文出生时间作为时间参考可能是有用的。这可以通过将timeReference属性设置为"contextBirth"来实现。

改为使用普通属性:

<property name="MAXHISTORY" value="100" />
<property name="DATETIME" value="yyyy/MM/dd HH:mm:ss" />
<!-- Console printing -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder charset="utf-8">
        <pattern>[%-5level] %d{${DATETIME}} [%thread] %logger{36} - %m%n
        </pattern>
    </encoder>
</appender>
© www.soinside.com 2019 - 2024. All rights reserved.