私は大学のプロジェクトとして小さな XMPP クライアントを書いています。
有効な XML マークアップを生成するには、標準ライブラリの XMLStreamWriter を使用します。
デバッグの目的で、それによって出力ストリームに書き込まれたすべてのコンテンツを表示したい、つまり、開かれたソケットを介して世界に送信し、stderr にログを記録します。私が見つけた解決策の 1 つは、Writer クラスのサブクラスを作成して、新しい XMLStreamWriter を構築することです。
次のコードのようなもの:
public XMPPWriter(final Writer out) throws XMLStreamException {
XMLOutputFactory factory = XMLOutputFactory.newInstance();
factory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true);
this.writer = factory.createXMLStreamWriter(new Writer() {
@Override
public void flush() throws IOException {
System.err.println("");
out.flush();
}
@Override
public void write(char[] cbuf, int off, int len) throws IOException {
System.err.write(String.valueOf(cbuf, off, len).getBytes());
out.write(cbuf, off, len);
}
@Override
public void close() throws IOException {
out.close();
}
});
}
もちろん、これは最も単純なケースであり、このソリューションはさまざまな方法で改善できます。しかし、そのようなロギングを行うための標準的なよく知られた方法はあるのでしょうか?