Spring Boot logback 自定義 Appender 讀取 Apollo配置


公司有個項目想通過Appender接入公司的統一日志系統,在讀取Apollo配置時候遇到問題,最后在大家的努力下有了解決方案

1.application.properties的配置

注意logging.config要使用自定義的名稱

# apollo配置中心
app.id=app.id
apollo.meta=http://127.0.0.1:30225
apollo.bootstrap.enabled=true
apollo.bootstrap.namespaces=application
apollo.bootstrap.eagerLoad.enabled=true
#日志配置要放在Apollo配置之后,不要使用默認的logback.xml名稱。
logging.config=classpath:logback-custom.xml

2.logback-custom.xml的配置,其中ordercenter.order.elk.log.url為Apollo配置

<!-- elk日志路徑 -->
<springProperty scope="context" name="ordercenter.order.elk.log.url" source="ordercenter.order.elk.log.url"></springProperty>
<!-- ELK日志 -->
<appender name="elkLog" class="com.XXXX.ordercenter.commonservice.logAppender.ElkAppender">
<layout>
<Pattern>%d [%level] %logger{36} %line - %msg%n</Pattern>
</layout>
<orderElkLogUrl>${ordercenter.order.elk.log.url}</orderElkLogUrl>
</appender>
<!-- ELK日志異步執行 -->
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<queueSize>2048</queueSize>
<appender-ref ref="elkLog" />
</appender>

<!-- 基於dubug處理日志:具體控制台或者文件對日志級別的處理還要看所在appender配置的filter,如果沒有配置filter,則使用root配置 -->
<root level="info">
<appender-ref ref="ASYNC" />
</root>

3.ElkAppender.java 為自定義Appender,添加orderElkLogUrl屬性

@Data
public class ElkAppender extends AppenderBase<ILoggingEvent> {
/**
* 讀取Apollo配置
* 由logback-custom.xml傳入
*/
private String orderElkLogUrl;
private Layout<ILoggingEvent> layout;

@Override
public void start() {
if (this.layout == null) {
addError("No layout set for the appender named [" + name + "].");
return;
}
super.start();
}

@Override
protected void append(ILoggingEvent event) {
        System.out.println(this.orderElkLogUrl);
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM