나는 데이터베이스 log4j appender를 Play에 쓴다.Play에서 데이터베이스 로거 작성하기 - 오류 처리 방법
append()
메서드에서 모델 엔터티 Log4jLine의 새 인스턴스를 만들고 JPA를 통해 saves()
을 만듭니다.
디버그/정보 로그에서 정상적으로 작동합니다. 그러나 예외는 기록되지 않습니다. 프레임 워크 코드에서이 appender에 대한 호출이 있지만이 시점에서 JPA 세션이 유효하지 않아 작동하지 않는다고 생각됩니다.
이 사용 사례를 지원하기 위해 코드를 어떻게 적용 할 수 있습니까?
public class DBAppender extends AppenderSkeleton {
@Override
protected void append(LoggingEvent loggingEvent) {
Log4jLine logLine = new Log4jLine(...);
logLine.save();
}
}
어떻게 수정해야할지 모르겠지만 컨트롤러 메서드 중 하나에서 예외가 발생하면 Play Framework가 트랜잭션을 setRollbackOnly로 표시하기 때문에 이러한 상황이 발생합니다. – Todd
@Todd - 로그를 별도의 트랜잭션으로 작성해야합니다. – ripper234