0
我想編寫一個關於實現ErrorHandler的Java類的日誌。我的類用於處理來自讀取xml文件的錯誤。 我盡我所能在網站上看,但我不明白爲什麼這段代碼是空的日誌文件。 此外我不明白如何在我的應用程序中管理記錄器。最佳做法是什麼?你建議只有一個日誌文件或更多?我將不得不記錄多個錯誤處理程序:您是否建議將所有日誌代碼放入錯誤處理程序類中?我應該爲孔應用程序實施記錄器嗎?ErrorHandler和Log
import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXParseException;
class XmlErrorHandler implements ErrorHandler {
private static final Logger LOGGER = Logger.getLogger(XmlErrorHandler.class.getName());
FileHandler fileHandler;
public XmlErrorHandler() {
try {
fileHandler = new FileHandler("./xml.log");
LOGGER.addHandler(fileHandler);
SimpleFormatter formatter = new SimpleFormatter();
fileHandler.setFormatter(formatter);
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void error(SAXParseException e) {
log(Level.SEVERE, "Error", e);
}
public void fatalError(SAXParseException e) {
log(Level.SEVERE, "Fatal Error", e);
}
public void warning(SAXParseException e) {
log(Level.WARNING, "Warning", e);
}
private void log(Level level, String message, SAXParseException e) {
int line = e.getLineNumber();
int col = e.getColumnNumber();
String publicId = e.getPublicId();
String systemId = e.getSystemId();
message = message + ": " + e.getMessage() + ": line=" + line + ", col=" + col + ", PUBLIC=" + publicId
+ ", SYSTEM=" + systemId;
LOGGER.log(level, message);
}
}
編輯: 我要做的初始化日誌:
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
documentBuilder.setErrorHandler(new XmlErrorHandler());
我不明白處理程序如何工作。我雖然處理程序會在處理錯誤時自行調用日誌。我把上面的代碼 – user1315621
它當然會。我用一個記錄異常的例子編輯我的答案。也許你應該嘗試首先從主要方法中調用,並在工作時註冊爲Sax ErrorHandler。然而,我會做的是爲您的記錄器和另一個爲您的ErrorHandler創建一個類,並單獨測試它們。 –