2010-02-22 5 views
2

나는이 간단한 사용 사례를 사용하려고 노력했으나 할 수 없었습니다 : FILE Appender에서 INFO의 기본 임계 값을 정의하지만 DEBUG 레벨로 카테고리를 정의하십시오. 이것은 jboss 4.2.1.GA log4j.xml 파일로 java.sql 호출을 기록하고 싶습니다.log4j : appender 임계 값과 다른 카테고리 우선 순위

<appender name="SQL_FILE" class="org.jboss.logging.appender.DailyRollingFileAppender"> 
     <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/> 
     <param name="File" value="${jboss.server.log.dir}/sql.log"/> 
     <param name="Append" value="false"/> 
     <param name="Threshold" value="INFO"/> 

     <param name="DatePattern" value="'.'yyyy-MM-dd"/> 

     <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d %-5p [%c] %C %m%n"/> 
     </layout> 
    </appender> 

    <category name="java.sql"> 
    <priority value="DEBUG"/> 
    <appender-ref ref="SQL_FILE"/> 
    </category> 

    <root> 
     <appender-ref ref="SQL_FILE"/> 
    </root> 

java.sql 만 로깅하는 대신 INFO 이상을 기록하며 java.sql 정보는 포함하지 않습니다. 쉬운 해결책이 없다면 필자는 appender Threshold를 DEBUG로 설정하고 포함 된 여러 카테고리에 대한 모든 로깅을 끄는 것으로 남았습니다. 이는 시간 낭비로 보입니다.

다음을 시도했지만 작동하지 못했습니다. Configuring multiple log files in log4j while using categories. 본인이 아는

답변

0

java.sql 패키지의 클래스는 실제로 로깅을하지 않는다, 그들은 확실히의 log4j에 (또는 평민 로깅을) 쓰지 않는다 .

그러나 이론적 목적을 위해, 여기에 다른 패키지 인 경우이 문제를 해결할 것 (그리고 평민 로깅이 실제로 사용 된) 방법입니다

  1. SQL_FILE 펜더에서 임계 값을 제거 .
  2. 줄을 추가하십시오 : <priority value="INFO"/><root/> 요소 (appender-ref 앞에 있음)에 추가하십시오.
  3. JBoss를 저장하고 다시 시작하십시오.

마지막으로 특정 JDBC 문제의 경우 DriverManager.setLogWriter 메서드가 유용 할 수 있습니다 (http://java.sun.com/products/jdbc/reference/faqs/index.html#4 참조).

편집 : 당신은 당신이 실제로 iBatis를 출력 로깅에 관심이 지시 한 이후, 당신은 단지 <category name="com.ibatis"><category name="java.sql">을 변경해야합니다.

+0

감사합니다. 아래 내 솔루션을 참조하십시오. 아이러니 컬하지만, java.sql이 실제로 어떤 로깅도하지 않는다는 것이 옳다. 그러나 나는 ibatis를 통해 출력물을 얻을 수 있다고 생각합니다.다음은 샘플입니다. 2010-02-22 16:48:45,469 DEBUG [java.sql.Connection] com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl {conn-100000} Connection 2010-02-22 16 : 48 : 45,479 DEBUG [java.sql.Connection] com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl {conn-100000} 성명서 작성 : SELECT ....... –

+0

제임스에 대해서는 아이러니 컬하지 않습니다. java.sql은 핵심 자바 패키지입니다. log4j 또는 commons-logging을 사용해서는 안됩니다. java.util.logging.Logger는 사용할 수 있지만 JDK 1.4에 포함 된 JDK 클래스입니다. –

1

곧 해결책을 찾았습니다. 기본적으로 유스 케이스는 jboss 위키에 설명되어 있습니다 : http://docs.jboss.org/process-guide/en/html/logging.html10.3.5 섹션 출력 리디렉션 범주 출력. 이 블로그 기사도 도움이되었습니다. ptth : //ourcraft.wordpress.com/2008/10/23/customizing-log4j-logging-on-jboss/#comment-796. 궁극적으로 여기

내가 일한 것을 사용하는 것입니다 : 당신이 루트에서 SQL_FILE의 펜더를 정의하지 않으

<appender name="SQL_FILE" class="org.jboss.logging.appender.DailyRollingFileAppender"> 
     <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/> 
     <param name="File" value="${jboss.server.log.dir}/sql.log"/> 
     <param name="Append" value="false"/> 

     <param name="DatePattern" value="'.'yyyy-MM-dd"/> 

     <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d %-5p [%c] %C %m%n"/> 
     </layout> 

    </appender> 

<category name="java.sql.Connection" additivity="false"> 
    <priority value="DEBUG"/> 
    <appender-ref ref="SQL_FILE"/> 
</category> 

    <root> 
     <appender-ref ref="CONSOLE"/> 
     <appender-ref ref="FILE"/> 
    </root> 

참고; 몇 가지 이유. 그것은 마지막 부분이었습니다.

+0

이 솔루션은 성능에 좋지 않습니다. JBoss 4.2.1에서는 기본적으로'루트'로거가'DEBUG'로 설정되었고, 애펜더는이 문제를 해결하기 위해 임계 값을 사용합니다. 즉,'Log.isDebugEnabled()'를 검사하는 Java 코드가 실행됨을 의미합니다. 디버거에서 해보고 :-)를보십시오. 내 솔루션은이 문제를 피할 것입니다. –

+0

사실, __everything__이 iBatis뿐만 아니라 'SQL_FILE' appender에 DEBUG 출력을 쓰고 있다면 놀라지 않을 것입니다. –

0

JBoss 4.2.1.GA에 필요한 추가 단계는 전쟁에서 log4j jar 파일을 제거하는 것입니다. 이 항아리가 전쟁에 포함되어 있으면 sql.log 파일에 기록되지 않습니다.

예 받는다는의 pom.xml 항목 : 답장을

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.13</version> 
    <scope>provided</scope> 
</dependency>