首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >春兔使用log4j2 AmqpAppender

春兔使用log4j2 AmqpAppender
EN

Stack Overflow用户
提问于 2017-05-19 07:47:32
回答 1查看 818关注 0票数 0

版本的库

软版:弹簧-兔子1.7.1

log4j2 : 2.8.2

slf4j : 1.7.7

log4j2 config

代码语言:javascript
复制
<appenders>
    <console name="console" target="SYSTEM_OUT">
        <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
    </console>
    <!--<Kafka name="Kafka" topic="log-test">-->
        <!--<PatternLayout pattern="%date %message"/>-->
        <!--<Property name="bootstrap.servers">192.168.3.166:9090,192.168.3.166:9091,192.168.3.166:9092</Property>-->
    <!--</Kafka>-->
    <RabbitMQ name="rabbitmq_logdata_tojson"
              host="${sys:rabbitmq_host}"
              port="${sys:rabbitmq_port}"
              user="${sys:rabbitmq_user}"
              password="${sys:rabbitmq_password}"
              virtualHost="/"
              exchange="${sys:rabbitmq_exchange}"
              exchangeType="${sys:rabbitmq_exchangeType}"
              declareExchange="true"
              durable="true"
              autoDelete="false"
              applicationId="${sys:rabbitmq_qname_4logdata.json}"
              routingKeyPattern="${sys:rabbitmq_qname_4logdata.json}"
              contentType="text/plain"
              contentEncoding="${sys:log4j2_charset}"
              generateId="false"
              deliveryMode="NON_PERSISTENT"
              charset="${sys:log4j2_charset}"
              senderPoolSize="1" maxSenderRetries="5">
    </RabbitMQ>

    <!--flume appender的配置,此处采用Avro类型 -->
    <!--<Flume name="flume_logdata_in" compress="false" type="Avro" >-->
        <!--<Agent host="192.168.2.111" port="4444"/>-->
    <!--</Flume>-->

</appenders>

<loggers>

    <logger name="${sys:rabbitmq_qname_4logdata.json}" level="info">
        <appender-ref ref="rabbitmq_logdata_tojson"/>
    </logger>

    <!--<logger name="${sys:rabbitmq_qname_4logdata}" level="info">-->
        <!--<appender-ref ref="rabbitmq_logdata_tobyte"/>-->
    <!--</logger>-->

    <root level="debug">
        <appender-ref ref="console"/>
        <!--<appender-ref ref="Kafka"/>-->
    </root>
</loggers>

Java代码

代码语言:javascript
复制
private static final Logger writeQueueLog= LoggerFactory.getLogger(System.getProperty("rabbitmq_qname_4logdata.json"));
writeQueueLog.info(jsonObject.toString());

System.properties

代码语言:javascript
复制
rabbitmq_qname_4logdata.json=user.behavior.countmessage.queue
rabbitmq_qname_4logdata=user.behavior.logdatainfo.queue

当我用户AMQPAppender发送消息到rabbitmq时,总是有一些其他的记录器消息。

我已经调试了APQPAppender源代码,当方法“追加”被调用时,所有的事件都是正确的。但是发件人正在运行,总是有来自其他记录器的一些事件,最后,消息计数是正确的。

然后,我将追加队列更改为如下字符串:private final LinkedBlockingQueue<String> eventsStrs = new LinkedBlockingQueue<String>();,并在方法append()中添加数据,

我看到所有的值都是正确的,但是事件中的值有一些错误的信息。

我想这件事在别的地方已经变了。

我不知道,你能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-19 12:59:43

我在Log4J2中找到了这个代码..。

代码语言:javascript
复制
    if (LOG_EVENT_FACTORY == null) {
        LOG_EVENT_FACTORY = Constants.ENABLE_THREADLOCALS
                ? new ReusableLogEventFactory()
                : new DefaultLogEventFactory();
    }

如果您使用-Dlog4j2.enable.threadlocals=false运行,它将是线程安全的。

我将向Spring添加一个选项,以在调用线程上发送消息,而不是传递到另一个线程,这将使使用ReusableLogEventFactory安全。

还可以使用Log4jLogEventFactory显式设置事件工厂。

请参见系统属性 这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44064369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档