1. 程式人生 > >自定義log4j Appender

自定義log4j Appender

MySQL中可以自定義Appender,這裡給出一個自定義的將日誌輸出到指定的檔案的appender:

1、繼承AbstractAppender類

FileAppender.class

@Plugin(name = FileAppender.FILE_APPENDER, category = "Core", elementType = Appender.ELEMENT_TYPE, printObject = true)
public class FileAppender extends AbstractAppender {
    
    public static final String FILE_APPENDER = "FileAppender";
    private String fileName;

    /* 建構函式 */
    public FileAppender(String name, Filter filter, Layout<? extends Serializable> layout, boolean ignoreExceptions, String fileName) {
        super(name, filter, layout, ignoreExceptions);
        this.fileName = fileName;
    }

    @Override
    public void append(LogEvent event) {
        final byte[] bytes = getLayout().toByteArray(event);
        writerFile(bytes);

    }

    /*  接收配置檔案中的引數 */
    @PluginFactory
    public static FileAppender createAppender(@PluginAttribute("name") String name,
                                              @PluginAttribute("fileName") String fileName,
                                              @PluginElement("Filter") final Filter filter,
                                              @PluginElement("Layout") Layout<? extends Serializable> layout,
                                              @PluginAttribute("ignoreExceptions") boolean ignoreExceptions) {
        if (name == null) {
            LOGGER.error("no name defined in conf.");
            return null;
        }
        if (layout == null) {
            layout = PatternLayout.createDefaultLayout();
        }
        // 建立檔案
        if (!createFile(fileName)) {
            return null;
        }
        return new FileAppender(name, filter, layout, ignoreExceptions, fileName);
    }

    private static boolean createFile(String fileName) {
        Path filePath = Paths.get(fileName);
        try {
            // 每次都重新寫檔案,不追加
            if (Files.exists(filePath)) {
                Files.delete(filePath);
            }
            Files.createFile(filePath);
        } catch (IOException e) {
            LOGGER.error("create file exception", e);
            return false;
        }
        return true;
    }

    private void writerFile(byte[] log) {
        try {
            Files.write(Paths.get(fileName), log, StandardOpenOption.APPEND);
        } catch (IOException e) {
            LOGGER.error("write file exception", e);
        }
    }
}

分析說明:

1、append()方法:

即為將要列印的資料輸出到指定地方。

2、craeteAppender()方法:

初始化配置

3、編寫對應的建構函式

4、在log4j2.xml檔案中配置如下:

<!-- 這個就是自定義的Appender -->
<FileAppender name="File" fileName="log.log">
    <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] [%-5p] {%F:%L} - %m%n" />
</FileAppender>
<root level="all">
    <appender-ref ref="File"/>
</root>

4、當列印的log日誌時,在專案的根目錄下可以找到log.log檔案

注意:

 @PluginElement("Filter") final Filter filter,
 @PluginElement("Layout") Layout<? extends Serializable> layout,

這裡是用@PluginElement註解。

相關推薦

定義log4j Appender

MySQL中可以自定義Appender,這裡給出一個自定義的將日誌輸出到指定的檔案的appender: 1、繼承AbstractAppender類 FileAppender.class @Plugin(name = FileAppender.FILE_APPENDE

定義log4jappender

實現自定義log4j Appender其實很簡單: 1、繼承log4j公共的基類:AppenderSkeleton 2、列印日誌核心方法:abstract protected void append

定義log4jappender寫es日誌

本篇和大家分享的是自定義log4j的appender,用es來記錄日誌並且通過kibana瀏覽es記錄;就目前網際網路或者一些中大型公司通常會用到第三方組合elk,其主要用寫資料到es中,然後通過視覺化工具kibana來做直觀資料檢視和統計;本篇內容節點如下: docker快速搭建es,es heade

定義log4j日誌級別

extends false nal obj customer 文件 type word ati 轉載自: http://blog.csdn.net/seven_cm/article/details/26849821 自定義log4j日誌級別 參考了網上資料: http:

定義log4j.properties的載入位置

方法一: 在main函式中新增如下程式碼 public class App { static final Logger logger = Logger.getLogger(App.class); public static void main( String[] args

Log4J日誌配置詳解和定義log4j日誌級別及輸出日誌到不同檔案實現方法

package com.jo.work.log4j; import java.util.Enumeration; import org.apache.log4j.Appender; import org.apache.log4j.FileAppender; import org.apache.log4j.

定義Log4j配置檔案位置

預設設定:Log4j配置檔案放在src下則可以被log4j.jar讀取到。 如果想要把log4j.properties檔案遷移到專案的其他位置,則可以做如下配置: <!-- 設定由Spring載入的Log4j配置檔案位置 --><context-para

如何隨心所欲地定義log4j輸出格式

在某種情況下,我們需要在不影響原有程式碼的基礎上自定義log4j的輸出格式。例如這樣的需求,硬性規定了專案的日誌格式為: 日期 日誌等級 ClassName:line - [版本號] [請求ip地址] [專案應用名稱] [服務介面模組] [模組方法] [業務引數1] [業務引

【Spring】- springmvc定義Log4j配置

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

log4j定義appender實現,處理異常堆疊

在專案中需要自定義實現一個log4j的appender。根據log中MDC裡的資訊,構造日誌儲存的目錄結構。自定義實現log4j appender的方法已經介紹過了。主要是覆蓋AppenderSkeleton中的appender方法。 @Ove

定義實現log4jappender

log4j,應用最廣泛的日誌框架。其作者後來推出logback,也是好選擇。不多說廢話。 log4j元件介紹 Log4j主要有三個元件: Logger:負責供客戶端程式碼呼叫,執行debug(Object msg)、info(Object m

Log4j2、Log4j、Logback定義Appender實現

logback: <!--異常收集 --> <appender name="gwarn"class="com.duowan.gwarn.sdk.GwarnLogbackAppender">          <filterclass="ch.qos.logback.classi

logback-Appender 定義詳解

實際上Appender可能是logback框架中最重要的元件之一,雖然Logger是記錄日誌的介面,但是如果一個Logger沒有關聯到任何Appender的話,那麼這個Logger就無法記錄任何資訊。此外雖然logback提供了很多擴充套件點,但是在應用中,我們可能很少會擴

Log4j擴充套件使用--定義輸出

package org.apache.log4j.config; import org.apache.log4j.Appender; import org.apache.log4j.Level; import org.apache.log4j.Priority; import org.apache.log4

定義日誌輸出類log4j

以下是我自己寫的一個日誌類,寫這個類的初衷是為了規範專案組各個組員的日誌輸出格式規範,為以後日誌檢視分析提供方便,在程式碼生成器里加入這個日誌類的引用,這樣就可以很好的避免組員自己直接呼叫原生的日誌框架。在這裡貼出了一是為了自己做備份,二也是讓大家看看是不是有哪

log4j使用心得之四 -- 定義DailyRollingFileAppender歸檔檔名

log4j使用DailyRollingFileAppender對日誌檔案按天進行歸檔時,可以使用datePattern指定歸檔檔名格式. 如日誌檔名為error.log,設定datePattern=yyyyMMdd,則歸檔檔名為error.logyyyyMMdd.  這樣的

log4j定義級別並將新級別日誌資訊輸出到指定帶日期格式的log檔案

log4j.xml的配置如下: <appender name="LOG.EMAIL" class="org.apache.log4j.RollingFileAppender">   <param name="File" value="${catalina.home}/logs/EMAIL_L

log4j定義配置檔案路徑

一 約定優於配置 約定優於配置(convention over configuration),也稱作按約定程式設計,是一種軟體設計正規化,旨在減少軟體開發人員需做決定的數量,獲得簡單的好處,而又不失靈活性。大量的配置檔案,確實可以讓程式在一定程度上具有很大的

log4j2實現定義Appender(輸出到檔案/RPC服務中)

1、背景 雖然log4j很強大,可以將日誌輸出到檔案、DB、ES等。但是有時候確難免完全適合自己,此時我們就需要自定義Appender,使日誌輸出到指定的位置上。 本文,將通過兩個例子說明自定義APPender,一個是將日誌寫入檔案中,另一個是將日誌傳送到遠端Thrift服

log4j配置檔案定義輸出Appender和Layout

 log4j由三個重要的元件構成: - 日誌資訊的輸出格式(佈局)Layout - 日誌資訊的輸出目的地 Appender - 日誌資訊的優先順序 Level 工程中使用配置檔案定義輸出格式Layout和輸出目的地Appender,log4j支援兩種方式的配置方式: