2010-06-01 4 views
19

java.util.logging에서 기본 로거를 사용할 때 로깅을 기록하는 데 걸리는 출력을 억제하려고합니다.java.util.logging : 날짜 행을 억제하는 방법

 
Jun 1, 2010 10:18:12 AM gamma.utility.application info 

INFO: ping: db-time=2010-06-01 10:18:12.0, local-time=20100601t101812, duration=180000
Jun 1, 2010 10:21:12 AM gamma.utility.application info
INFO: ping: db-time=2010-06-01 10:21:12.0, local-time=20100601t102112, duration=180000

나는 Jun 1, 2010... 라인을 제거하고 싶은, 그들은 내 로그 출력을 혼란 : 예를 들어, 다음은 일반적인 출력됩니다. 어떻게해야합니까?

+0

출력 형식은 사용중인 포맷터에 따라 다릅니다. http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Formatter.html. 자신의 정보를 지정하고 구성을 게시 할 수 있습니까? – Anton

+0

.properties 파일을 제공 하시겠습니까? – Bozho

+0

Anton, jdk 1.6에서 java.util.logging.SimpleFormatter를 사용합니다. 간단한 포맷터를 작성하고 형식 (LogRecord) 메소드를 대체하려고 시도했지만 도움이되지 않았습니다. – andrewz

답변

12

을 예를 들어, 다음 포맷터 (예외가 기록되는 경우와 슬로우 가능 오브젝트 스택 트레이스)에만 로그 메시지를 보여줍니다 부모 로그의 핸들러. 해결 방법은 부모 로그에서 모든 처리기를 제거한 다음 자체 사용자 지정 처리기를 추가하는 것입니다. 이 코드는 부모 로그에서 핸들러를 제거합니다 java.util.logging.SimpleFormatter.format : 자바 SE 7에서

 
     for(Handler iHandler:log.getParent().getHandlers()) 
     { 
     log.getParent().removeHandler(iHandler); 
     } 
+6

대신'log.setUseParentHandlers (false);'도 사용할 수 있습니다 –

5

java.util.logging.Formatter 클래스를 확장하는 사용자 정의 포맷터를 작성하고 필요에 따라 String format(LogRecord) 메소드를 구현하십시오.

import java.io.PrintWriter; 
import java.io.StringWriter; 
import java.util.logging.Formatter; 
import java.util.logging.LogRecord; 

class CustomRecordFormatter extends Formatter { 
    @Override 
    public String format(final LogRecord r) { 
     StringBuilder sb = new StringBuilder(); 
     sb.append(formatMessage(r)).append(System.getProperty("line.separator")); 
     if (null != r.getThrown()) { 
      sb.append("Throwable occurred: "); //$NON-NLS-1$ 
      Throwable t = r.getThrown(); 
      PrintWriter pw = null; 
      try { 
       StringWriter sw = new StringWriter(); 
       pw = new PrintWriter(sw); 
       t.printStackTrace(pw); 
       sb.append(sw.toString()); 
      } finally { 
       if (pw != null) { 
        try { 
         pw.close(); 
        } catch (Exception e) { 
         // ignore 
        } 
       } 
      } 
     } 
     return sb.toString(); 
    } 
} 

이것은 당신이 그것을 사용하는 방법 :이 문제가 발생합니다

import java.util.logging.ConsoleHandler; 
import java.util.logging.Logger; 

class A { 
    private static final Logger LOGGER = Logger.getLogger(A.class.getName()); 

    static { 
     CustomRecordFormatter formatter = new CustomRecordFormatter(); 
     ConsoleHandler consoleHandler = new ConsoleHandler(); 
     consoleHandler.setFormatter(formatter); 
     LOGGER.addHandler(consoleHandler); 
    } 

    public void doSomething() { 
     LOGGER.info("something happened"); 
    } 
} 
+0

시도해 보겠습니다.하지만 지난 번 비슷한 시도를했을 때 일하지 마라. – andrewz

+0

이 외에도 앤드류의 대답을 따라야합니다. –

+0

포매터가 마지막입니다. –

31

새로운 시스템 속성이 있습니다.

같은 등록 정보는 java.util.logging 등록 정보 파일 (logging.properties)에서도 구성 할 수 있습니다. Eclipse 사용자 인 경우 콘솔 출력의 이중 회선 메시지가 좋지 않을 경우 jre logging.properties 파일 (JDK_HOME/jre/lib/logging.properties)을 다음과 같이 변경할 수 있습니다.

java.util.logging.SimpleFormatter.format = 4 $ % S % $ 5의 S [% 1 $ TC] % N

일부 예시적인 형식이 여기 있습니다 : http://docs.oracle.com/javase/7/docs/api/index.html?java/util/logging/SimpleFormatter.html.

+1

Java 6에 대한 해결책이 있습니까? –

+1

당신은 우리 시대를 구 했어요, 고마워요. 기록을 위해 Tomcat을 사용하고 있다면 /etc/tomcat/logging.properties 아래에서 변경할 수도 있습니다. 전역 Java 설정을 변경할 필요가 없습니다. – bviktor

+0

프로그래밍 방식으로이 작업을 수행하려는 경우 여기를 참조하십시오. https://stackoverflow.com/questions/194765/how-do-i-get-java-logging-output-to-appear-on-a-singleline –

관련 문제