log4j2 异步打印日志 保存不到数据库里面

发布于 2022-09-11 19:53:04 字数 3561 浏览 14 评论 0

之前能打印日志并且输出到数据库的 我改成全局异步处理。
发现只是输出到控制台,数据库并没有保存,这是为什么呢?

这是log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">

<Appenders>

    <!-- 优先级从高到低分别是 OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL -->
    <!-- 单词解释: Match:匹配 DENY:拒绝 Mismatch:不匹配 ACCEPT:接受 -->
    <!-- DENY,日志将立即被抛弃不再经过其他过滤器; NEUTRAL,有序列表里的下个过滤器过接着处理日志; ACCEPT,日志会被立即处理,不再经过剩余过滤器。 -->
    <!--输出日志的格式
     %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间
     %p : 日志输出格式
     %c : logger的名称
     %m : 日志内容,即 logger.info("message")
     %n : 换行符
     %C : Java类名
     %L : 日志输出所在行数
     %M : 日志输出所在方法名
     hostName : 本地机器名
     hostAddress : 本地ip地址 -->

    <!--这个输出控制台的配置,这里输出除了warn和error级别的信息到System.out -->
    <Console name="console_out_appender" target="SYSTEM_OUT">
        <!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) . -->
        <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
        <!-- 输出日志的格式 -->
        <PatternLayout pattern="%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n"/>
    </Console>

    <!-- 这个输出控制台的配置,这里输出error级别的信息到System.err,在eclipse控制台上看到的是红色文字 -->
    <Console name="console_err_appender" target="SYSTEM_ERR">
        <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
        <PatternLayout pattern="%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n"/>
    </Console>
    

    <JDBC name="databaseAppender" tableName="UNITIME_LOG">
        <ConnectionFactory class="com.unicorn.resourceapi.factory.LogConnectionFactory"
                           method="getDatabaseConnection"/>
        <Column name="UNIQUEID" literal="UNITIME_LOG_S.NEXTVAL"/>
        <Column name="TS" isEventTimestamp="true"/>
        <Column name="LOG_LEVEL" pattern="%level"/>
        <Column name="TEXT" pattern="%message"/>
        <Column name="USER_ID" pattern="%X{UserId}"/>
        <Column name="USER_NAME" pattern="%X{UserName}"/>
        <Column name="NM_SPACE" pattern="%X{NameSpace}"/>

        <Column name="AGENT" pattern="%X{Agent}"/>
        <Column name="REMOTE_HOST" pattern="%X{RemoteHost}"/>
    </JDBC>

</Appenders>

<Loggers>
    <Root level="INFO" includeLocation="true">
        <AppenderRef ref="console_out_appender"/>
        <AppenderRef ref="console_err_appender"/>

    </Root>
</Loggers>

</Configuration>

我是在执行打印日志前设置了 这个属性 但是好像没有用 System.setProperty("log4j2.contextSelector","org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");

这是依赖:

<dependency>

        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
    <dependency>
        <groupId>com.lmax</groupId>
        <artifactId>disruptor</artifactId>
        <version>3.4.2</version>
    </dependency>


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓝礼 2022-09-18 19:53:04
  1. 没见异步appender的配置
  2. 也没见用数据库appender的logger

简单说就配错了…

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文