我能創建使用FileAppender,RollingFileAppender進行,等等。日誌文件中的Java文件,如何創建二進制日誌使用Log4J的
我的問題是,日誌寫入以純文本格式,任何人都可以讀,但我想將我的日誌註冊爲不可讀的二進制文件。
任何人都可以幫助我建議創建一個示例代碼的二進制日誌文件。
我能創建使用FileAppender,RollingFileAppender進行,等等。日誌文件中的Java文件,如何創建二進制日誌使用Log4J的
我的問題是,日誌寫入以純文本格式,任何人都可以讀,但我想將我的日誌註冊爲不可讀的二進制文件。
任何人都可以幫助我建議創建一個示例代碼的二進制日誌文件。
它不是一個好主意,做你寫的東西,但如果你真的需要,寫一個自己的appender是這樣的:
package de.steamnet.loggingUtils;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.spi.LoggingEvent;
public class BinaryAppender extends AppenderSkeleton {
FileOutputStream fout;
public BinaryAppender() throws FileNotFoundException {
fout = new FileOutputStream("/tmp/somefile.log.bin");
}
@Override
protected void append(LoggingEvent le) {
String origMessage = le.getLoggerName() + " said: " + le.getMessage();
byte[] obscure = origMessage.getBytes();
for(int ii = 0; ii < obscure.length; ii++) {
if(obscure[ii] == Byte.MAX_VALUE) {
obscure[ii] = Byte.MIN_VALUE;
} else {
obscure[ii] = (byte)(obscure[ii] +1); // thats a really bad idea to create 'nonesense stuff' that way!
}
}
try {
fout.write(obscure);
} catch (IOException ex) {
System.out.println("too bad. File writer bombed.");
}
}
@Override
public boolean requiresLayout() {
return false; // we do all layouting in here.
}
@Override
public void close() {
try {
fout.close();
} catch (IOException ex) {
System.out.println("too bad. could not close it.");
}
}
}
然後在你的log4j的配置使用這個類的附加目的地你完成了寫作部分。對於讀取部分,您需要再次讀取每個字節的字節數,並將字節數減1,然後從中加載字符串。
祝你好運。
我會使用DataOutputStream BufferedOutputStream和FileOutputStream來編寫二進制文件。我假設你想要這些文件是機器可讀的而不是不可讀的。 ;)
Log4j專爲文本文件而設計,但您可以使用它的日誌級別。
private static final Log LOG =
static DataOutputStream out = ... FileOutputStream ...
if(LOG.isDebugEnabled()) {
// write a debug log to out
}
我通過在java文件中編碼得到它.. –
在log4jconfig [xml或properties]中創建二進制日誌文件的可能方法是什麼? –
所有的標準記錄器都設計爲記錄文本和**僅文本**。如果你想寫二進制文件,你必須按照我的建議自己做。 –