使用 [ additivity="false" ] 选项进行 log4j 重复日志记录或无日志记录

时间:2021-02-28 09:31:24

标签: spring-boot log4j logback

如何通过log4j一次打印到控制台日志?

问题:应用 additivity="false" 选项时不起作用。

尝试通过 log4j 打印控制台日志,它工作但重复了日志语句。当我应用 additivity="false" 选项时,不会打印任何内容。

log4j 的 Springboot 项目设置:

1.依赖声明:

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

2.更改了 application.properties 文件中的 jdbcDriver :

spring.datasource.url=jdbc:log4jdbc:mariadb://localhost:3306/sampleDB?serverTimezone=UTC&useUnicode=true
spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy

3.添加了 log4jdbc.log4j2.properties 文件 (/src/main/resources/)

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0

4.添加 logback.xml 文件 (/src/main/resources/)

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration >
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <Pattern>%d %5p [%c] %m%n</Pattern>
            </encoder>
        </appender>
        <logger name="jdbc"                 level="OFF"/>
        <logger name="jdbc.sqlonly"         level="OFF"/>
        <logger name="jdbc.sqltiming"       level="DEBUG" />
        <logger name="jdbc.audit"           level="OFF"/>
        <logger name="jdbc.resultset"       level="OFF"/>
        <logger name="jdbc.resultsettable"  level="DEBUG"/>
        <logger name="jdbc.connection"      level="OFF"/>
        <root level="INFO">
            <appender-ref ref="console"/>
        </root>
    </configuration>

问题

这有效,但重复如下:

它的重复日志记录,但实际上 insert sql 执行一次。

2021-02-28 16:54:41,620 DEBUG [jdbc.sqltiming]  jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-2)
    18. SELECT
                POST_ID
                 ,USER_NAME
                 ,TITLE
                 ,CONTENTS
                 ,REPLY_IDX
                 ,REPLY_GROUP_ID
                 ,REPLY_DEPTH
                 ,BOARD_NAME
                 ,UPDATE_DATE
            FROM BOARDS WHERE POST_ID = '1253';
     {executed in 2 msec}

2021-02-28 16:54:41,620 DEBUG [jdbc.sqltiming]  jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-2)
    22. SELECT
                POST_ID
                 ,USER_NAME
                 ,TITLE
                 ,CONTENTS
                 ,REPLY_IDX
                 ,REPLY_GROUP_ID
                 ,REPLY_DEPTH
                 ,BOARD_NAME
                 ,UPDATE_DATE
            FROM BOARDS WHERE POST_ID = '1253';
     {executed in 2 msec}

自己尝试

  1. 当我添加选项 additivity="false" 时,没有日志记录。 =>“我不明白为什么”
  2. 当我删除选项 additivity="false" 时,它会再次打印重复的日志。
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration >
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <Pattern>%d %5p [%c] %m%n</Pattern>
            </encoder>
        </appender>
        <logger name="jdbc"                 level="OFF"/>
        <logger name="jdbc.sqlonly"         level="OFF"/>
        <logger name="jdbc.sqltiming"       level="DEBUG" additivity="false"/>
        <logger name="jdbc.audit"           level="OFF"/>
        <logger name="jdbc.resultset"       level="OFF"/>
        <logger name="jdbc.resultsettable"  level="DEBUG"/>
        <logger name="jdbc.connection"      level="OFF"/>
        <root level="INFO">
            <appender-ref ref="console"/>
        </root>
    </configuration>
  1. 尝试更改依赖项,但仍然发生重复日志记录:
<dependency>
    <groupId>org.bgee.log4jdbc-log4j2</groupId>
    <artifactId>log4jdbc-log4j2-jdbc4</artifactId>
    <version>1.16</version>
</dependency>

如何让日志只打印一次???

0 个答案:

没有答案