본문 바로가기
컴퓨터관련

HtmlUnit ErrorLog 안보이게 설정하기

by 기록이답이다 2019. 3. 14.
반응형

HtmlUnit을 사용하다보면 errorLog가 콘솔창에 찍히는 경우가 있다.

그럴때는 아래와 같이 하면 콘솔창에 로그가 찍히지 않는다.


java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.OFF);
java.util.logging.Logger.getLogger("org.apache.http").setLevel(java.util.logging.Level.OFF);

아래는 적용된 소스이다.
public static void saveHtml(String url, String fileName) throws IOException {
	URLEncoder.encode(url, "UTF-8"); 
	
        // HtmlUnitError Log off 처리
	java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.OFF); 
	java.util.logging.Logger.getLogger("org.apache.http").setLevel(java.util.logging.Level.OFF); 
	
	WebClient webClient = new WebClient(BrowserVersion.CHROME);
	webClient.setCssErrorHandler(new ErrorHandler() {
		@Override
		public void warning(CSSParseException arg0) throws CSSException {
			return;
		}
		
		@Override
		public void fatalError(CSSParseException arg0) throws CSSException {
			return;
		}
		
		@Override
		public void error(CSSParseException arg0) throws CSSException {
			return;
		}
	});
	webClient.addRequestHeader("Accept-Language", "ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4, value");
	webClient.addRequestHeader("Accept-Charset", "windows-949,utf-8;q=0.7,*;q=0.3"); 
	webClient.getCookieManager().setCookiesEnabled(true);
	
	WebRequest webRequest = new WebRequest(new URL(url));
	HtmlPage page = webClient.getPage(webRequest); 
	
	FileUtil.createFile(fileName, page.asXml());
	
	while(true) {
		File f = new File(fileName);
		if(f.isFile()) break;
		System.out.print(".");
	}
	//System.out.println(fileName + " created!!");
}
참고로 위 소스중에 FileUtil.createFile 부분은 아래내용이다.


public static boolean createFile(String fileName, String fileText) {
	return createFile(fileName, fileText, "UTF-8");
}

public static boolean createFile(String fileName, String fileText, String charset) {
	File f = new File(fileName.substring(0, fileName.lastIndexOf(File.separator)));
	if(!f.isDirectory()) f.mkdirs();
	
	BufferedWriter bw = null;
	try {
		bw = new BufferedWriter(new FileWriterWithEncoding(fileName, charset));
		
		bw.write(fileText);
		return true;
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} finally {
		try { bw.close(); } catch(Exception ex) {}
	}
	
	return false;
}

결론은 

java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.OFF);
java.util.logging.Logger.getLogger("org.apache.http").setLevel(java.util.logging.Level.OFF);

와 같이 하면 에러로그가 발생하지 않는다.

반응형