0
ErrorHandlerを実装するJavaクラスに関するログを書きたいと思います。私のクラスは、XMLファイルの読み込みに起因するエラーを処理するために使用されます。 私はウェブサイトで自分のベストを見てみるが、なぜこのコードがログファイルを空にしているのか分からない。 また、アプリケーションでロガーを管理する方法がわかりません。ベストプラクティスは何ですか?ログファイルが1つ以上あることをお勧めしますか?複数のエラーハンドラをログする必要があります:すべてのログコードをエラーハンドラクラスに入れることをお勧めしますか?私はホールアプリケーションのロガーを実装する必要がありますか?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);
}
}
EDIT: 私は、ログを初期化するために行うすべては、次のとおりです。
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
documentBuilder.setErrorHandler(new XmlErrorHandler());
私は分かりませんハンドラの仕組み私はハンドラーがエラーを処理するときにログを単独で呼び出すが、私はコード – user1315621
の上に置いてあります。私は例外を記録する例を使って答えを編集しました。たぶん主メソッドから最初に呼び出すようにして、Sax ErrorHandlerとして登録する必要があります。しかし、私がやることは、あなたのロガー用のクラスとあなたのErrorHandler用のクラスを作成し、それらを別々にテストすることです。 –