簡體   English   中英

創建自定義log4j Appender時出錯

[英]Error on creating custom log4j Appender

我正在嘗試創建一個自定義Appender,它將使用JPA將日志持久化到數據庫。

問題是我正在使用像這樣的PersistenceContext屬性

package com.foobar.logging;

import com.foobar.model.SysLog;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.MDC;
import org.apache.log4j.spi.LoggingEvent;
import javax.ejb.Stateless;

@Stateless
public class LogManager extends AppenderSkeleton {

    @PersistenceContext(unitName = "primary")
    private EntityManager em;

    @Override
    protected void append(LoggingEvent le) {
        SysLog log = new SysLog();
        log.setDescripcion(le.getMessage().toString());
        if (MDC.get("IdUsuario") != null) {
            log.setIdUsuario(MDC.get("IdUsuario").toString());
        }
        log.setSysAccionLog(null);

        this.em.persist(log);
    }

    @Override
    public void close() {
    }

    @Override
    public boolean requiresLayout() {
        return false;
    }

}

現在,當我將WAR部署到JBoss AS 7.1時,它失敗了,我收到錯誤:

java.lang.VerifyError: class com.foobar.logging.LogManager$Proxy$_$$_Weld$Proxy$ overrides final method getName.()Ljava/lang/String;

如何使用CDI將我的EntityManager注入AppenderSkeleton? 有沒有人使用CDI在AppenderSkeleton中完成JPA持久性?

我也嘗試不使用CDI,但由於我的應用程序中的每個其他對象都使用它(JAX-RS類),它會崩潰。

EJB是代理。 AppenderSkeleton有一個getName方法,是最終的。 我認為對於您的用例,您需要直接實現Appender 這將避免bean方法getName

但是,我不得不質疑嘗試將一個附加組件作為EJB的想法。 你是如何實例化它的?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM