015_logback中的自定义Appender
生活随笔
收集整理的這篇文章主要介紹了
015_logback中的自定义Appender
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 繼承AppenderBase就可以輕松地寫自己的appender。AppenderBase處理過濾器、狀態信息和大多數appender共享的其他功能。派生類只需要實現一個append(Object
eventObject)方法。
2. 例子
2.1. 新建一個名為MyselfAppend的Java項目, 同時添加相關jar包
2.2. 在src目錄下, 新建logback.xml
<configuration><appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%-4relative [%thread] %-5level - %msg%n</pattern></encoder></appender><appender name="myAppend" class="com.fj.MyselfAppend"> <fileName>log/myAppend.xml</fileName><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%-4relative [%thread] %-5level - %msg%n</pattern></encoder></appender><root level="debug"><appender-ref ref="stdout" /><appender-ref ref="myAppend" /></root></configuration>2.3. 新建MyselfAppend.java
package com.fj;import java.io.File; import java.io.FileWriter; import java.io.IOException; import ch.qos.logback.classic.encoder.PatternLayoutEncoder; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.AppenderBase; import ch.qos.logback.core.util.FileUtil;public class MyselfAppend extends AppenderBase<ILoggingEvent> {private String fileName;private PatternLayoutEncoder encoder;public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}public PatternLayoutEncoder getEncoder() {return encoder;}public void setEncoder(PatternLayoutEncoder encoder) {this.encoder = encoder;}@Overrideprotected void append(ILoggingEvent event) {if (this.encoder == null) {addError("No layout set for the appender named [" + name + "].");return; }if (null == fileName || fileName.length() < 5 || !fileName.endsWith(".xml")) {addError("Is not xml file, fileName [" + fileName + "].");return;}File file = new File(fileName);boolean result = FileUtil.createMissingParentDirectories(file);if (!result) {addError("Failed to create parent directories for [" + file.getAbsolutePath() + "]");}StringBuffer sb = new StringBuffer();sb.append("<log>").append("\r\n");sb.append("\t").append("<relative>").append(event.getTimeStamp()).append("</relative>").append("\r\n");sb.append("\t").append("<thread>").append(event.getThreadName()).append("</thread>").append("\r\n");sb.append("\t").append("<level>").append(event.getLevel()).append("</level>").append("\r\n");sb.append("\t").append("<msg>").append(event.getMessage()).append("</msg>").append("\r\n");sb.append("</log>").append("\r\n");try {if(!file.exists()) {file.createNewFile();}FileWriter fw = new FileWriter(file, true);fw.write(sb.toString());fw.flush();fw.close();} catch (IOException e) {e.printStackTrace();}}}2.4. 新建MyAppendExample.java
package com.fj;import org.slf4j.Logger; import org.slf4j.LoggerFactory;public class MyAppendExample {private static final Logger logger = LoggerFactory.getLogger(MyAppendExample.class);public static void main(String[] args) {logger.error("繼承AppenderBase就可以輕松地寫自己的appender。");logger.warn("AppenderBase處理過濾器、狀態信息和大多數appender共享的其他功能。");logger.info("派生類只需要實現一個append(Object eventObject)方法。");} }2.5. 運行項目, 控制臺打印
2.6. 運行項目, myAppend.xml文件輸出
總結
以上是生活随笔為你收集整理的015_logback中的自定义Appender的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 014_logback中的Sifting
- 下一篇: 002_centos7上安装mysql8