Fork me on GitHub

Programming Design Notes

自訂 EclipseLink Logger

| Comments



預設的 EclipseLink logger 是會將所有訊息都會打印到 System.out 去,但 System.out 的記錄通常很難查找。如果不同的應用程式都在同一台 Server 上運行就更加混亂,不同的應用程式都會向 System.out 送出資料,根本不能拿來分析特定一個應用程式的行為。通常做法是會將不同的應用程式都設定不同的日誌檔案,以便分析。

要將 EclipseLink 的日誌寫到自己的日誌檔案是很簡單的,只需 Extend org.eclipse.persistence.logging.AbstractSessionLog 這個 class,並且實現 public void log(SessionLogEntry sessionLogEntry) 就可以了,以下有一個例子是將 EclipseLink 的日誌經由 Slf4j 傳送到自訂的日誌檔案中。

package com.ctlok.pro.log

import org.eclipse.persistence.logging.AbstractSessionLog;
import org.eclipse.persistence.logging.SessionLogEntry;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyEclipseLinkLogger extends AbstractSessionLog {

private static final Logger logger = LoggerFactory.getLogger(MyEclipseLinkLogger.class);

@Override
public void log(SessionLogEntry sessionLogEntry) {
switch (sessionLogEntry.getLevel()) {
case SEVERE:
logger.error(sessionLogEntry.getMessage());
break;
case WARNING:
logger.warn(sessionLogEntry.getMessage());
break;
case INFO:
logger.info(sessionLogEntry.getMessage());
break;
case FINE:
default:
logger.debug(sessionLogEntry.getMessage());
}
}

}

然後在 persistence.xml 的 propertiese 中加上:
<property name="eclipselink.logging.logger" value="com.ctlok.pro.log.MyEclipseLinkLogger "/>

這樣就可以令 EclipseLink 使用自訂的 Logger 去打印日誌了。