Home / Programmazione / Java / Creare file di log in Java
Mattepuffo

Creare file di log in Java

Creare file di log in Java

Java ha una classe standard per la creazione di file di log: la classe Logger che fa parte del package java.util.logging.

Diciamo che a meno che non si voglia qualcosa di più completo e raffinato, per la creazione di file di log va benissimo.

Sennò ci sta la libreria log4j.

Io per ora uso la libreria standard e qui vi posto una semplice classe per la, creazione formatta di file di log.

Formtatta perchè di default vengono creati file con struttura a xml, quindi poco leggibili.

 

import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

public class CreationLog {

private FileHandler fh;

public void createLog() throws SecurityException, IOException {
fh = new FileHandler("file.log", true);
}

public void writeLog(String message) throws SecurityException, IOException {
Logger logger = Logger.getLogger("BookLog");
logger.addHandler(fh);
logger.setLevel(Level.ALL);
SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(formatter);
logger.log(Level.ALL, message);
}
}

Qui abbiamo due metodi.

Il primo si occupa solo della creazione del file di log, che poi viene richiamato nel secondo metodo.

Questo perchè se si mette tutto insieme, ogni volta che viene richiamato il metodo succede che i nuovi messaggi vengono aggiunti al file originale, ma viene anche creato un nuovo file di log inutile.

Così invece possiamo richiamare il metodo di crezione del file in uno specifico evento (ad esempio apertura di finestra) e poi richiamare writeLog dove vogliamo per aggiungere messaggi.

FlieHandler si occupa direttamente della creazione del file; gli passiamo due argomenti:

  • il path del file da creare in forma di stringa
  • un valore booleano che indica se vogliamo fare l'appendo dei nuovi messaggi; impostiamo a true per dirgli di aggiungere tutti i messaggi in coda

Questo oggetto ha anche altri costruttori che vi consiglio di andare a guardare.

Passiamo adesso al secondo metodo che si occupa di scrivere i messaggi dentro al file di log.

Come vedete richiede un parametro stringa che gli apsseremo in fase di chiamata.

Creiamo un oggetto Logger; getLogger cerca o crea un file di log con il nome passato come stringa: se non c'è lo crea.

All'oggetto applichiamo tutta una serie di metodi:

  • addHandler aggiunge un Handler per ricevere messaggi; come argomento viene passato l'oggetto FileHandler creato prima
  • setLevel setta il livello generale dei messaggi; OFF disabilita il logging

L'oggetto SimpleFormatter, come detto prima, serve per rendere il messaggio le leggibile.

Infine usiamo il metodo log per salvare i messaggi.

Per richiamare questo metodo:

private CreationLog opfile = new CreationLog();

.......

private void formWindowOpened(java.awt.event.WindowEvent evt) {                                 
try {
opfile.createLog();
} catch (FileNotFoundException ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
}

.....

private void btnAddEditorActionPerformed(java.awt.event.ActionEvent evt) {                                             
if (textAddEditor.getText().length() == 0) {
JOptionPane.showMessageDialog(null, "Choose an editor");
} else {
try {
dbman.insertEditor(textAddEditor.getText());
opfile.writeLog("Editor inserted: " + textAddEditor.getText());
JOptionPane.showMessageDialog(null, "Editor inserted: " + textAddEditor.getText());
textAddEditor.setText("");
fillCbEditor();
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
} catch (ClassNotFoundException ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
}
}

Prima creaimo un oggetto della nostra classe; poi vi ho postato due eventi presi dal mio JFrame.

Il primo si avvia in apertura di finestra e crea il log.

Il secondo viene attivato quando si aggiunge un editore al mio db.