RocketMQ進擊(八)RocketMQ的日誌收集Logappender


楔子:今天也是平凡的一天,也要繼續努力噢!

RocketMQLog WARN

在 Windows 環境進行 RocketMQ 測試時,打印出 RocketMQLog:WAR 警告信息:

RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent).
RocketMQLog:WARN Please initialize the logger system properly.
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent).
RocketMQLog:WARN Please initialize the logger system properly.
log4j:WARN No appenders could be found for logger (RocketmqRemoting).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

是什麼原因呢?我們可以這樣排除分析一下:

  • 確定項目/模塊已經正常引入了 log 依賴的 GAV
  • 項目/模塊是否有配置正確的 log 日誌配置文件
  • 項目模塊需要,但是又沒有找到日誌配置文件

看看基礎款的日誌配置文件 log4j.properties,並沒有發現什麼問題:

log4j.rootLogger=WARN, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.mq=org.apache.rocketmq.logappender.log4j.RocketmqLog4jAppender
log4j.appender.mq.Topic=TOPIC_MEIWEI_SMS_NOTICE_TEST
log4j.appender.mq.Tag=PID_MEIWEI_SMS_RETRY_TIMEOUT
log4j.appender.mq.ProducerGroup=meiwei-producer-retry
log4j.appender.mq.NameServerAddress=127.0.0.1:9876;127.0.0.1:9877
log4j.appender.mq.layout=org.apache.log4j.PatternLayout
log4j.appender.mq.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-4r [%t] (%F:%L) %

注:

  1. 上述日誌配置中的 ProducerGroup、Topic、Tag、NameServerAddress 需要配置成自己項目對應的配置
  2. 如果使用的是 Windows 環境安裝的 RocketMQ,且使用的是默認日誌配置,則可以在路徑 C:\Users\yourname\logs\rocketmqlogs 下查看 RocketMQ 相關日誌

那就是沒有加載到已經配置好的日誌文件。

仔細一想,原來是自己把 Producer 程序寫在了項目的 Service 模塊下,這是一個純服務層,沒有 WEB-INF 來加載日誌配置。這樣的話,移動這個 Producer 代碼到 WEB 項目下,再配置好上面的 log4j.properties 文件,用 applicationContext.xml 的 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer 來加載 log4j.properties 就解決了。

 

RocketMQ Logappender

RocketMQ 的 Logappender 提供 log4j、log4j2 和 logback 日誌框架作爲業務應用。

log4j 樣例

按下面樣例使用 log4j.properties 屬性配置:

log4j.appender.mq=org.apache.rocketmq.logappender.log4j.RocketmqLog4jAppender
log4j.appender.mq.Tag=yourTag
log4j.appender.mq.Topic=yourLogTopic
log4j.appender.mq.ProducerGroup=yourLogGroup
log4j.appender.mq.NameServerAddress=yourRocketmqNameserverAddress
log4j.appender.mq.layout=org.apache.log4j.PatternLayout
log4j.appender.mq.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-4r [%t] (%F:%L) %-5p - %m%n

按下面樣例使用 log4j.xml 配置來使用異步添加日誌:

<appender name="mqAppender1" class="org.apache.rocketmq.logappender.log4j.RocketmqLog4jAppender">
    <param name="Tag" value="yourTag" />
    <param name="Topic" value="yourLogTopic" />
    <param name="ProducerGroup" value="yourLogGroup" />
    <param name="NameServerAddress" value="yourRocketmqNameserverAddress"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss}-%p %t %c - %m%n" />
    </layout>
</appender>

<appender name="mqAsyncAppender1" class="org.apache.log4j.AsyncAppender">
    <param name="BufferSize" value="1024" />
    <param name="Blocking" value="false" />
    <appender-ref ref="mqAppender1"/>
</appender>

log4j2 樣例

用 log4j2 時,配置如下,如果想要非阻塞,只需要使用異步添加引用即可:

<RocketMQ name="rocketmqAppender" producerGroup="yourLogGroup" nameServerAddress="yourRocketmqNameserverAddress"
     topic="yourLogTopic" tag="yourTag">
    <PatternLayout pattern="%d [%p] hahahah %c %m%n"/>
</RocketMQ>

logback 樣例

<import resource="classpath*:dubbo/user-dubbo-provider.xml"/>

<appender name="mqAppender1"class="org.apache.rocketmq.logappender.logback.RocketmqLogbackAppender">
      <tag>yourTag</tag>
      <topic>yourLogTopic</topic>
      <producerGroup>yourLogGroup</producerGroup>
      <nameServerAddress>yourRocketmqNameserverAddress</nameServerAddress>
      <layout>
          <pattern>%date %p %t - %m%n</pattern>
      </layout>
</appender>
<appender name="mqAsyncAppender1"class="ch.qos.logback.classic.AsyncAppender">
      <queueSize>1024</queueSize>
      <discardingThreshold>80</discardingThreshold>
      <maxFlushTime>2000</maxFlushTime>
      <neverBlock>true</neverBlock>
      <appender-ref ref="mqAppender1"/>
</appender>

參考資料:
http://rocketmq.apache.org/docs/logappender-example/
http://logging.apache.org/log4j/1.2/faq.html#noconfig


RocketMQ進擊物語:
RocketMQ進擊(零)RocketMQ這個大水池子
RocketMQ進擊(一)Windows環境下安裝部署Apache RocketMQ
RocketMQ進擊(二)一個默認生產者,兩種消費方式,三類普通消息詳解分析
RocketMQ進擊(三)順序消息與高速公路收費站
RocketMQ進擊(四)定時消息(延時隊列)
RocketMQ進擊(五)集羣消費模式與廣播消費模式
RocketMQ進擊(六)磕一磕RocketMQ的事務消息
RocketMQ進擊(七)盤一盤RocketMQ的重試機制

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章