楔子:今天也是平凡的一天,也要繼續努力噢!
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) %
注:
- 上述日誌配置中的 ProducerGroup、Topic、Tag、NameServerAddress 需要配置成自己項目對應的配置
- 如果使用的是 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的重試機制