logback에서 dbAppender를 사용하여 데이터를 쓰는 테이블을 변경하는 방법이 있습니까? dbAppender를 사용하기 전에 만들어야하는 세 개의 기본 테이블이 있지만이 테이블을 하나의 테이블에 작성하도록 사용자 지정하고 싶습니다. 내 선택. 로그를 데이터베이스에 삽입 할 때 실행되는 SQL을 지정할 수있는 Log4J와 비슷한 점이 있습니다.Logback dbAppender 사용자 지정 SQL
답변
당신은 ch.qos.logback.classic.db.names.DBNameResolver
를 구현하고 구성에서 사용해야합니다
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
<dbNameResolver class="com.example.MyDBNameResolver"/>
<!-- ... -->
</appender>
안녕하세요, 답변 주셔서 감사합니다. 구현 된 예제가 어디에 있는지 알고 있습니까? DBNameresolver를 구현했습니다. 그들이 돌아온다. – Magezy
기본적으로이 클래스는'ch.qos.logback.classic.db.names.ColumnName'의 인스턴스를 취하여 각 열거 형 값의 이름을 반환합니다. Logback 배포에서 두 가지 구현을 살펴보십시오. 이 기능을 문서화하려면 문제를 제기하십시오. –
토마스, 어쩌면 내가 뭔가를 놓친 해요하지만 난 그냥 사용자 정의 DBNameResolver를 사용하여 Magezy이 무엇을 요구에 대한 해답이 될 수 표시되지 않습니다 . DBNameResolver는 SQLBuilder를 통해 DBAppender에서 3 개의 SQL 삽입 쿼리를 생성하는 데 사용됩니다. - DBNameResolve를 통해 데이터가 삽입되는 테이블과 컬럼의 이름에만 영향을 미칠 수 있지만 한 테이블에만 삽입하는 것을 제한 할 수는 없습니다. 실제로 삽입되는 것을 제어 할 수단이 없습니다.
log4j의 JDBCAppender IMO와 일치 시키려면 logback의 DBAppender 또는 DBAppenderBase를 확장해야하거나 완전히 새로운 사용자 정의 Appender를 구현해야 할 수도 있습니다.
나를 위해 가장 쉬운 방법은 처음부터 appender를 만드는 것이 었습니다. 스프링 JDBC를 사용하여 하나의 테이블에 추가하고 있습니다. 그것은 이런 식으로 작동합니다 :
public class MyAppender extends AppenderBase<ILoggingEvent>
{
private String _jndiLocation;
private JDBCTemplate _jt;
public void setJndiLocation(String jndiLocation)
{
_jndiLocation = jndiLocation;
}
@Override
public void start()
{
super.start();
if (_jndiLocation == null)
{
throw new IllegalStateException("Must have the JNDI location");
}
DataSource ds;
Context ctx;
try
{
ctx = new InitialContext();
Object obj = ctx.lookup(_jndiLocation);
ds= (DataSource) obj;
if (ds == null)
{
throw new IllegalStateException("Failed to obtain data source");
}
_jt = new JDBCTemplate(ds);
}
catch (Exception ex)
{
throw new IllegalStateException("Unable to obtain data source", ex);
}
}
@Override
protected void append(ILoggingEvent e)
{
// log to database here using my JDBCTemplate instance
}
}
내가 SLF4J에 문제로 실행 - 대체 로거 오류가 여기에 설명 : http://www.slf4j.org/codes.html#substituteLogger
This thread on multi-step configuration 그 문제를 해결하기 위해 나를 수 있었다.
Java MyDbAppender에는 setter가있는 문자열 jndiLocation이 있어야합니다. 이제 jndi 조회를 수행하십시오 (해결책은 10 월 17 일 16:03에 응답 함 참조)
- 1. logback 사용자 정의 로그 수준 처리
- 2. Logback 튜토리얼
- 3. Logback 신뢰성
- 4. 사용자 지정 SQL Server 드라이버
- 5. Liquibase 롤백 사용자 지정 SQL
- 6. Logback SMTPAppender 제한 속도
- 7. Logback 로깅 클래스 일관성
- 8. Logback 구성 파일
- 9. Logback + 작은 도구의 스윙
- 10. 내가 애플릿에 logback 사용하고
- 11. SQL Server의 사용자 지정 정렬 기능
- 12. SQL Server 2005 사용자 우선 순위 지정
- 13. Linq to SQL + 사용자 지정 데이터 형식
- 14. PerformancePoint DashBoard 디자이너의 사용자 지정 SQL 쿼리
- 15. LINQ to SQL 사용자 지정 속성 쿼리에서
- 16. SQL 2005에서 사용자 지정 서버 역할 만들기
- 17. SQL 쿼리에 사용자 지정 페이징 추가
- 18. 규칙으로 사용자 지정 SQL 순서 만들기
- 19. SQL Server 보고서의 사용자 지정 코드 액세스
- 20. 사용자 지정 범주에 대한 SQL 데이터베이스 구조
- 21. SQL Server 2005에 사용자 지정 값 저장
- 22. 트리거를 통한 SQL 사용자 지정 복제
- 23. SQL Server의 사용자 지정 데이터 형식 연산자?
- 24. django 관리자에서 사용자 지정 SQL 설정
- 25. Linq-SQL 복잡한 사용자 지정 개체 (
- 26. 사용자 지정 레이아웃으로 검색시 사용자 지정 제안
- 27. Codeigniter : 사용자 지정 'MY_Router'클래스의 사용자 지정 메서드
- 28. Sharepoint : 사용자 지정 목록의 사용자 지정 SiteMapProvider
- 29. 사용자 지정 어셈블리의 사용자 지정 httphandler 사용
- 30. 사용자 지정 컨트롤 사용자 지정 함수
[DBAppender - 기본 테이블 이름을 변경하는 방법?] (http://stackoverflow.com/questions/4690381)/dbappender-how-to-change-default-table-names) –