속성 파일을 사용하여 Java 로깅을 설정하는 방법은 무엇입니까? (java.util.logging)


82

멍청한 자바 로깅 문제가 있습니다. 앱 구성 파일에서 로깅 구성을로드하고 있습니다.하지만 파일을 읽은 후에는 아무것도 로깅하지 않습니다. 추가 응용 프로그램 구성-제거해도 도움이되지 않습니다.) "초기화 중 ..."로그 줄은 정상적으로 표시되지만 "시작 앱"및 추가 메시지는 콘솔에 기록되지 않으며 로그 파일도 생성되지 않습니다. 내가 여기서 무엇을 놓치고 있습니까?

Logger 코드는 다음과 같습니다.

...
Logger log = Logger.getLogger("myApp");
log.setLevel(Level.ALL);
log.info("initializing - trying to load configuration file ...");

Properties preferences = new Properties();
try {
    FileInputStream configFile = new FileInputStream("/path/to/app.properties");
    preferences.load(configFile);
    LogManager.getLogManager().readConfiguration(configFile);
} catch (IOException ex)
{
    System.out.println("WARNING: Could not open configuration file");
    System.out.println("WARNING: Logging not configured (console output only)");
}
log.info("starting myApp");
...

그리고 이것은 구성 파일입니다.

appconfig1 = foo
appconfig2 = bar

# Logging
handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
.level = ALL

# File Logging
java.util.logging.FileHandler.pattern = %h/myApp.log
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.FileHandler.level = INFO

# Console Logging
java.util.logging.ConsoleHandler.level = ALL

답변:


28

좋아요, 첫 번째 직감이 여기 있습니다 :

handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
.level = ALL

Java prop 파일 파서는 그다지 똑똑하지 않습니다.이 문제를 처리 할 수 ​​있을지 모르겠습니다. 하지만 다시 문서를 보러 갈 게요 ....

그동안 다음을 시도하십시오.

handlers = java.util.logging.FileHandler
java.util.logging.ConsoleHandler.level = ALL

최신 정보

아뇨, 커피가 더 필요 했어요. 신경 쓰지 마.

더 많이 생각하지만 속성 의 메서드를 사용하여 prop-file을로드하고 인쇄 할 수 있습니다. Java가 해당 파일에서 읽은 내용을 확인하기 위해 최소한의 프로그램을 작성하는 것이 좋습니다.


또 다른 업데이트

이 줄 :

    FileInputStream configFile = new FileInputStream("/path/to/app.properties"));

여분의 괄호가 있습니다. 컴파일되지 않습니다. 자신이 생각하는 클래스 파일로 작업하고 있는지 확인하십시오.


글쎄, 그것은 readConfiguration 라인과 관련이있는 무언가를하기 위해 이음새를 가지고 있습니다. 디버거로 이것을 밟았고이 호출 후에 LogManager의 모든 속성이 지워졌습니다.
VolkA 2009

5
오 예, 알았습니다-동일한 입력 스트림을 두 번 사용하고 있으므로 configFile.reset ()을 사용하여 위치를 변경해야합니다. 그렇지 않으면 loadConfiguration () 호출에 읽을 내용이 없습니다. Btw. )는 내 작업 코드에서 복사 오류였습니다.
VolkA 2009

1
여기에 대한 답이 무엇인지 잘 모르겠습니다.
Ondra Žižka

@ OndraŽižka 대답은 "구문 오류로 인해 코드가 작동하지 않았습니다."입니다.
Charlie Martin

101

명령 줄을 통해 로깅 구성 파일을 설정할 수 있습니다.

$ java -Djava.util.logging.config.file=/path/to/app.properties MainClass

이 방법은 더 깨끗하고 유지하기 쉬운 것 같습니다.


1
예,이 속성이 설정되어 있는지 확인하고 내 구성을 덮어 쓰도록 할 것입니다.하지만 기본적으로 작동하는 하나의 구성 파일에이 모든 것이 포함되어 있으면 좋을 것입니다. 감사!
VolkA 2009

12

위 코드에서 코드를 시도했지만 [preferences.load (configFile);] 문을 사용하지 마십시오. 그러면 작동합니다. 여기에서 샘플 코드를 실행하고 있습니다.

public static void main(String[]s)
{

    Logger log = Logger.getLogger("MyClass");
    try {
    FileInputStream fis =  new FileInputStream("p.properties");
    LogManager.getLogManager().readConfiguration(fis);
    log.setLevel(Level.FINE);
    log.addHandler(new java.util.logging.ConsoleHandler());
    log.setUseParentHandlers(false);

    log.info("starting myApp");
    fis.close();

    } 
    catch(IOException e) {
    e.printStackTrace();
    }
}

1
메인 클래스와 관련하여 p.properties는 어디에 있어야합니까?
루이스 소아레스

9
Logger log = Logger.getLogger("myApp");
log.setLevel(Level.ALL);
log.info("initializing - trying to load configuration file ...");

//Properties preferences = new Properties();
try {
    //FileInputStream configFile = new //FileInputStream("/path/to/app.properties");
    //preferences.load(configFile);
    InputStream configFile = myApp.class.getResourceAsStream("app.properties");
    LogManager.getLogManager().readConfiguration(configFile);
} catch (IOException ex)
{
    System.out.println("WARNING: Could not open configuration file");
    System.out.println("WARNING: Logging not configured (console output only)");
}
log.info("starting myApp");

이것은 작동합니다 .. :) readConfiguration ()에서 InputStream을 전달해야합니다.


3

올바른 경로에서 로그 파일을 찾고 있습니까 : % h / one % u.log

여기서 % h는 집으로 확인됩니다. Windows에서 기본값은 C : \ Documents and Settings (user_name)입니다.

게시 한 샘플 코드를 시도했으며 구성 파일 경로 (코드 또는 Java args를 통해 logging.properties)를 지정하면 제대로 작동합니다.


선생님, % h가 내 집으로 해결되고, % u가 다른 것으로 해결되는 등의 온라인 문서가 어디에 있는지 알고 싶습니다.
Luk Aron
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.