4 mei 2007

Logging

Bij het programmeren van een applicatie is logging van wezenlijk belang. Vaak wil je als beheerder of ontwikkelaar ook de mogelijkheid hebben om de "severity" van logitems in te kunnen stellen. Bij het ontstaan van problemen heb je dan eerder de mogelijkheid een aanknopingspunt te vinden voor het oplossen van het probleem.

In java 1.4.*, de versie die Lotus Domino/Notes 7.0.* geintegreerd heeft, is er een standaard logging framework aanwezig. Deze java.util.logging is precies wat je als developer nodig hebt om je applicatie te laten loggen.

Om dit logging framework te laten werken binnen Lotus Domino moet je een aantal dingen regelen:

1. Implementeer een eigen handler die extend van java.util.logging.Handler


public class DominoLogHandler extends Handler {
/* (non-Javadoc)
* @see java.util.logging.Handler#close()
*/
public void close() throws SecurityException {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see java.util.logging.Handler#flush()
*/
public void flush() {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see java.util.logging.Handler#publish(java.util.logging.LogRecord)
*/
public void publish(LogRecord arg0) {
// TODO Auto-generated method stub
}
}

2. Initialiseer de logger

Het logging framework leest standaard uit het logging.properties de configuratie van de logging. Deze kun je in code overrulen. In mijn geval was het handiger de configuratie te wissen en vervolgens mijn eigen Handler toe te voegen als handler voor de logentries.


public abstract class LogConfigurator {
public static void Configure() throws SecurityException, IOException {
/**
* This method is intended to configure the default logging of jvm 1.4 to our liking
* This method is the default and takes no parameters.
* It creates a outputstream and reconfigures the LogManager
* or even more accurate: clears the configuration, and after that add the EnCodeLogHandler to the root logger
*/
StringBuffer sb = new StringBuffer();
sb.append("#Clear the configuration#");
ByteArrayInputStream in = new ByteArrayInputStream(sb.toString().getBytes());
LogManager.getLogManager().readConfiguration(in);
EnCodeLogHandler elh = new EnCodeLogHandler();
elh.setFormatter(new SimpleFormatter());
Logger.getLogger("").addHandler(elh);
Logger.getLogger("").setLevel(Level.ALL);
}
}


Geen opmerkingen: