2011-07-26 6 views
0

Je suis en mesure de créer des fichiers journaux à l'aide FileAppender, RollingFileAppender, etc.,Comment créer binaire fichier journal en Java en utilisant Log4J

Mon problème est que les journaux sont écrits sous forme de texte que tout le monde peut lire, mais je voulez enregistrer mes journaux en tant que fichiers binaires qui ne sont pas lisibles par l'homme.

Quelqu'un peut-il m'aider avec la suggestion de créer un fichier journal binaire pour un exemple de code.

Répondre

1

Son pas une bonne idée de faire ce que vous avez écrit, mais si vous avez vraiment besoin, écrire un propre appender comme ceci:

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."); 
     } 
    } 

} 

Puis dans votre config log4j utiliser cette classe comme appender et vous avez terminé avec la partie écrite. pour la partie de lecture, vous devez à nouveau lire l'octet par octet et réduire l'octet de un, puis charger une chaîne à partir de celui-ci.

Bonne chance.

0

J'utiliserais DataOutputStream BufferedOutputStream et FileOutputStream pour écrire des fichiers binaires. Je suppose que vous voulez que les fichiers soient lisibles par machine plutôt que non lisibles. ;)

Log4j est conçu pour les fichiers texte, mais vous pouvez utiliser ses niveaux de journalisation comme.

private static final Log LOG = 
static DataOutputStream out = ... FileOutputStream ... 

if(LOG.isDebugEnabled()) { 
    // write a debug log to out 
} 
+0

Je l'ai eu à travers le codage dans le fichier java .. –

+0

quelle est la façon possible de créer un fichier journal binaire dans log4jconfig [xml ou propriétés] ..? –

+0

Tous les enregistreurs standard sont conçus pour enregistrer du texte et ** uniquement du texte **. Si vous voulez écrire binaire, vous devez le faire vous-même comme je l'ai suggéré. –

Questions connexes