2015-01-28 6 views
0

내가 JDK 로깅을 사용하고 아래와 같이 I 로그 회전 size.The 구성 파일 logging.properties에 따라 로그가 설정되어있는 설정하려고 : 내가하고 로그를 볼JDK 로그 회전

# Specify the handlers to create in the root logger 
# (all loggers are children of the root logger) 
# The following creates two handlers 
handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler 
#handlers = java.util.logging.ConsoleHandler 
#handlers = java.util.logging.FileHandler 

# Set the default logging level for the root logger 
.level = INFO 

# Set the default logging level for new ConsoleHandler instances 
java.util.logging.ConsoleHandler.level = INFO 

# Set the default logging level for new FileHandler instances, INFO, FINEST... 
java.util.logging.FileHandler.level = INFO 

# Set the default formatter for new ConsoleHandler instances 
#java.util.logging.ConsoleHandler.formatter = com.hazelcast.impl.LogFormatter 
#java.util.logging.FileHandler.formatter = com.hazelcast.impl.LogFormatter 
#java.util.logging.FileHandler.pattern = ./hazelcast%u.log 

# Set the default logging level for the logger named com.hazelcast 
com.hazelcast.level = INFO 

# Limiting size of output file in bytes: 
java.util.logging.FileHandler.limit=1024 

# Number of output files to cycle through, by appending an 
# integer to the base file name: 
java.util.logging.FileHandler.count=10 

을 파일에 기록하지만 크기에 따라 로그 회전에 영향을주지 않습니다. 저는 로저를 구현하는 hazelcast API를 사용하고 있으며 file.Help를 통해 속성을 구성하려고합니다. Hazelcast Logging Configuration 기본 로깅 프레임 워크에 따르면

감사 & 감사합니다, 라지브

답변

0

는 JDK 로깅입니다. 따라서 모든 설정은 logging.properties에서 설정됩니다.

회전하기 전에 로그 파일의 크기가 제한 (1024)을 초과해야합니다. 이 아니고은 로깅 속성에 패턴을 설정하므로 FileHandler는 기본적으로 'java0.log.0'으로 시작하는 홈 폴더로 설정됩니다.

다음 코드는 시작할 때 시스템 속성을 설정할 필요가없는 로깅 속성의 자체 포함 변환입니다.

public class JdkLogRotation { 

     private static final String LOGGER_NAME = "com.hazelcast"; 
     private static final int LIMIT = 1024; 
     private static final int COUNT = 10; 
     private static final Logger logger = Logger.getLogger(LOGGER_NAME); 

     public static void main(String[] args) throws Exception { 
      Properties props = create(); 
      read(LogManager.getLogManager(), props); 
      String msg = message(); 
      for (int i = 0; i <= COUNT; ++i) { 
       logger.log(Level.INFO, msg); 
      } 

      /* 
      try (FileOutputStream out = new FileOutputStream(
        new File(System.getProperty("user.home"), 
          "jdklogrotation.properties"))) { 
       props.store(out, "JDK log rotation"); 
       out.flush(); 
      }*/ 
     } 

     private static String message() { 
      char[] c = new char[LIMIT + 1]; 
      Arrays.fill(c, 'A'); 
      return String.valueOf(c); 
     } 

     private static Properties create() { 
      Properties props = new Properties(); 
      props.setProperty("handlers", "java.util.logging.ConsoleHandler, java.util.logging.FileHandler"); 
      props.setProperty(".level", "INFO"); 
      props.setProperty("java.util.logging.ConsoleHandler.level", "INFO"); 
      props.setProperty("java.util.logging.FileHandler.level", "INFO"); 
      props.setProperty("java.util.logging.FileHandler.limit", String.valueOf(LIMIT)); 
      props.setProperty("java.util.logging.FileHandler.count", "10"); 
      props.setProperty(LOGGER_NAME + ".level", "INFO"); 
      return props; 
     } 

     private static void read(LogManager manager, Properties props) throws IOException { 
      final ByteArrayOutputStream out = new ByteArrayOutputStream(512); 
      props.store(out, "No comment"); 
      manager.readConfiguration(new ByteArrayInputStream(out.toByteArray())); 
     } 
    } 

다음 로그 파일 이름

은 사용자의 홈 폴더에 생성됩니다

java0.log.0 
java0.log.1 
java0.log.2 
java0.log.3 
java0.log.4 
java0.log.5 
java0.log.6 
java0.log.7 
java0.log.8 
java0.log.9 

은 당신의 logging.properties를 가정하면로드 아무것도 같은 출력을 볼 것으로 예상한다 당신의 LogManager를 다시주지 않습니다.

+0

내 코드의 일부로 hazelcast API를 사용하고 있습니다. 특정 경로 아래에 로그 (cdc.log)가 저장되는 것을 발견했기 때문에 API가 파일 처리 부분을 수행합니다. 내 목표는 이러한 로그 출력을 제어하는 ​​것입니다. . 내가 성공적으로 logging.properties 파일을 사용할 수 있지만 로그 파일의 최대 크기 및 회전 설정에 관해서는 그렇게 할 수 없으며 그렇습니다. 로그를 검사 할 때 다른 로그 수준을 설정하는 hazelcast API 문서를 참조하십시오. 크기가 속성 파일에 설정된 하나를 초과합니다. 기본적으로 속성 파일의 내용이 잘못되었습니다. – user3393089

+0

"cdc.log"는 로깅 속성에서 지정한 파일 패턴이 아닙니다. 절대 패스를 사용해 FileHandler.pattern를 설정합니다. – jmehrens

0

헤즐 캐스팅 로깅 (더 일반적인 로깅 문제)은 때로는 큰 PITA가 될 수 있습니다.

먼저 시스템 등록 정보를 통해 로깅을 설정했는지 확인하십시오.이 파일을로드하기 전에 로거가 트리거 된 다음 상황이 불안정해질 수 있으므로 hazelcast.xml 파일의 속성에 의존하지 마십시오.

-Dhazelcast.logging.type = jdk와 비슷합니다.

hazelcast.xml 파일에 hazelcast.logging.type이 있으면 제거하십시오.

두 번째 단계 : hazelcast.log가 생성되는 것을 알고 있습니까? 로그 구성이 선택되었는지 확인하기 위해 완전히 다른 이름을 지정하십시오. monty-python.log. 이 파일이 표시되지 않으면 로그 파일이 선택되지 않은 것입니다.

이 파일을 가져온 경우; 그러면 당신의 설정이 작동하지 않는 이유를 알아 내려고 노력할 것입니다. 실제로 실제 구성 파일과 관련이없는 로깅 구성 문제에 너무 많은 시간을 낭비했습니다.