2016-09-14 4 views
2

빌드 할 때 maven을 사용하는 java 프로젝트가 있습니다. 내 프로젝트에서 java.util.logging.Logger을 사용 중이며 logger.properties 파일 (명령 행 아님)을 사용하여 구성하려고합니다.자바 로거 : logger.properties 파일에서 로그 레벨을 설정할 수 없습니다.

  1. java.util.logging.SimpleFormatter.format을하고있다 : 나는 데 문제를 여기

    handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler 
    .level=WARNING 
    
    java.util.logging.SimpleFormatter.format=[%4$s] %5$s %n 
    
    java.util.logging.config.file="../../results/api.log" 
    

    있습니다

    나는 이런 logger.properties 파일을 만들었습니다. 여기서 형식을 변경하면 프로젝트에서 변경 사항을 즉시 볼 수 있습니다. 그래서 나는 적어도 파일을 올바르게 임포트하고 있다는 것을 알고 있습니다.
  2. .level은 작동하지 않습니다.. info, finest, warning 등으로 변경하려고했지만 변경 한 후에도 정보가 표시되지 않더라도 모든 INFO 메시지가 표시됩니다.
  3. java.util.logging.config.file은 작동하지 않습니다.. 나는 그것이 상대 경로이기 때문에 일하지 않을 것으로 예상된다. 누구든지 속성 파일에서 상대 경로 이름을 해결할 수있는 방법을 알고 있습니까? 결과를 저장하기 위해,

    .level=WARNING 
    
    handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler 
    
    java.util.logging.SimpleFormatter.format=[%4$s] %5$s %n 
    

    그런

    logger.properties :


솔루션

나는 다음과 같이 상단에 .level를 이동하는 데 필요한 "api.log"까지, 나는 코드에서 이것을했다 :

import org.apache.commons.io.FilenameUtils; 

public class RequestHelper { 

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

    protected RequestHelper() { 
     //SET LOGGER TO OUTPUT TO "../../results/api.log" 
     //Logs will ALSO output to console. 
     String result_file = getNormalizedAbsolutePath("../../results/api.log"); 
     Handler fh = new FileHandler(result_file); 
     Logger.getLogger("").addHandler(fh); 
    } 

    public static String getNormalizedAbsolutePath(String fileName) { 
     String path; 
     File file = new File(fileName); 
     try { 
      path = file.getCanonicalPath(); 
     } catch (IOException e) { 
      LOGGER.warning("Error while computing the canonical path of file: " + fileName); 
      path = file.getAbsolutePath(); 
     } 
     return FilenameUtils.normalize(path); 
    } 
} 
+0

-Djava.util.logging.config.file = "logging.properties"를 설정 했습니까? –

답변

2

그냥 추측 RequestHelper.java. 문서에서 :

".level"로 끝나는 모든 속성은 로거의 로그 수준을 정의하는 것으로 간주됩니다. 따라서 "foo.level"은 "foo"라는 로거의 로그 수준을 정의하고 명명 계층 구조의 해당 자식에 대해 (재귀 적으로) 정의합니다. 로그 레벨은 특성 파일에 정의 된 순서대로 적용됩니다. 따라서 트리의 하위 노드에 대한 수준 설정은 해당 부모에 대한 설정을 따라야합니다.

핸들러를 정의하기 전에 .level을 먼저 설정해보십시오. 루트 로거 수준을 먼저 설정하면 나중에 정의하는 로거가 루트 로그 수준을 상속합니다. 또한

:

프로퍼티 "설정". 이 속성은 임의의 구성 코드를 실행할 수 있도록하기위한 것입니다.

java.util.logging.config.file은 시스템 속성이며 구성 파일에서는 작동하지 않습니다. "config"를 사용해보십시오.

+1

와우 예, 당신이 그것을 가지고있어! 방금 ".level"라인을 위로 이동해야했습니다. 이제 작품은 ~^- ^ – Kayvar