2015-01-21 2 views
0

Java EE 애플리케이션을 Weblogic/JDeveloper에서 12.1.2로 12.1.3으로 업그레이드 한 후 로깅 문제가 발생합니다.java.util.logging.Logger 로그 수준이 null로 올라옴

System.out.println은 서버 로그에 잘 인쇄하지만 log.info ("test")는 아닙니다. 예를 들어 로그 수준을 설정하면 로깅이 작동합니다. log.setLevel (Level.INFO). 다음은 내 테스트 결과입니다. Oracle 설명서 당으로

// This works 
System.out.println("test1"); 
// Output when run: test1 

// This does not work. Nothing prints to the server log 
log.info("test2"); 

// The above works if I set the log level 
log.setLevel(Level.INFO); 
log.info("test3"); 
// Output when run: test3 

// This prints null. It appears that logging level is set to null on server startup 
System.out.println(" what is my current logging level: " + log.getLevel()); 

로깅 구성이 JDK/JRE/lib에 다음 기본 logging.properties를 제공하지 않는 경우

이 사용됩니다. 기본 로그 레벨은 INFO입니다.

또한 logging.properties를로드하고 log4j를 전환하려고했지만 아무 것도 작동하지 않았습니다.

모든 클래스의 로그 수준을 설정하고 싶지 않습니다. 서버 시작시이를 설정하거나 로깅 수준을 null로 설정/디버깅하는 방법이 있습니까? logger documentation 가입일

+0

어떻게 초기화 하시겠습니까? 그게 문제인 것처럼 보입니다. 또한 관리 콘솔에서 '서버 -> 로깅 탭'은 로그 수준이 어떻게 설정되는지 말합니다. 고급 섹션을 확인하십시오. '-Djava.util.logging.config.file = C : \ mydomain \ logging.properties'을 startWebLogic 스크립트에도 추가 할 수 있습니다. –

+0

다음은 관리 콘솔의 고급 로그 설정입니다. '로그의 최소 심각도 : 공지''로그 파일 : 심각도 레벨 : 정보''표준 출력 : 심각도 레벨 : 알림 ' – Superman9999

+0

또한 startWeblogic 스크립트로 -Djava.util.logging.config.file 전환을 시도했습니다. 효과적이지 않습니다. – Superman9999

답변

0

:

결과이 기록 장치의 유효 레벨의 부모로부터 상속되는 것을 의미하는, 널이 될 수있다.

그래서 루트 로거의 수준 만 설정하면됩니다. ConsoleHandler이 설치되어 있고 레벨이 INFO 이하로 설정되어 있는지 확인해야합니다. 또한 System.err에 대한 쓰기가 ConsoleHandler에 사용되는 스트림 인 로그 파일에 표시되는지 확인해야합니다.

+0

logging.properties 구성이 루트 로거로드 및 콘솔 처리기 설치를 담당 할 것으로 가정합니다. 또한 oracle 사이트에서 logging.properties를 제공하지 않으면 weblogic이 jdk/jre에서 logging.properties를로드하는 위치를 읽습니다. 그래서, 서버가 기본 루트 로거와 콘솔 핸들러 중 하나를 -Djava.util.logging.config.file 또는 jre에서 전달 된 것으로부터 선택해야한다고 생각합니다. – Superman9999

+0

ConsoleHandler가 설치되어 있고 레벨이 INFO로 설정되어 있습니까? System.err가 로그 파일에 기록합니까? – jmehrens

+0

System.err은 콘솔/로그 파일에 기록합니다. ConsoleHandler가 설치되었습니다. 이것은 logging.properties에서 가지고있는 것입니다.'handler = java.util.logging.ConsoleHandler .level = INFO' – Superman9999

0

이 코드를 광산 Logg 클래스에 사용하여 모든 클래스가 연결되므로 모든 클래스의 모든 예외에서이 코드를 사용합니다. 많은 수업을 듣고 싶다면이 수업을 통해 영리하고 쉬운 방법으로 로그인하십시오. 한 가지 문제가 있습니다.이 코드는 프로그램을 실행할 때마다 txt 파일을 만들고 Logg 클래스와 연결됩니다. 나는 그것을 곧 고칠 것이므로, 나는이 대답을 편집 할 것이다. 를 heres 내 코드 : 클래스의

최고

private final static Logger logger = Logger.getLogger(Logg.class.getName()); 
private static FileHandler fh = null; 

방법에있어서이있을 수 있습니다;

일부 txt 파일의 이름은 현재 연도, 날짜 및 시간으로 지정됩니다. 당신이 로그인 취득 할 수준을 선택할 수 있도록

logger.log(Level.WARNING, "Bla bla"); 

당신은 또한 설정과 같은 파일이있을 수 있습니다

Date date = new Date(); 
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm"); 
fh = new FileHandler((dateFormat.format(date) + ".log"), false); 
Logger l = Logger.getLogger(""); 
fh.setFormatter(new SimpleFormatter()); 
l.addHandler(fh); 
l.setLevel(Level.INFO); 

는 logg하려는 인수에 따라이있다. 그런 다음 속성 파일을 만들어야합니다. my는 loggconfig라는 이름입니다. 그래서 난 모든 기록 얻을
Level=WARNING 

그래서 그냥 내가 경고로이 모든 예외가, 내가 정보를 변경할 수 있습니다 : config 파일에서

나는이 코드를 가지고있다. 코드에서 두 단계 만 사용하려면 Smart.

config 파일을 사용하려면 l을 변경해야합니다.setLevel too this :

l.setLevel(Level.parse(prop.getProperty("Level"))); 

그래서 설정 파일에서 레벨을 가져옵니다.

관련 문제