Comment réaliser un log dans une application java?

Après avoir cherché longtemps ce qui pouvait se faire de mieux en matière de logging en java, j’en suis revenu aux sources.

En effet, le namespace java.util contient une classe logger suffisement complète pour pouvoir y faire tout ce que l’on désire.

Cette classe, à elle seule ne sert pas à grand chose, mais combinée à un Handler ainsi qu’un Formater, qui sont toutes deux des classes de java.util, va permettre de créé des logs, aussi bien directement sur la console que dans un fichier ou un socket sur la toile.

Ce qui m’intéresse ici, c’est un log au format xml. Il existe une classe XmlFormater toute faite pour le réaliser mais elle ne donne pas de référence à un fichier xsl pour la conversion automatique par un browser internet. J’ai donc créé un nouveau Formater avec cette fameuse ligne en plus et créé également ce fichier xsl.

Pour information, il ne reste plus que internet explorer qui accepte de réaliser la conversion localement. Pour les autres browser, il faut passer par un serveur web pour une question de sécurité parait il…

Voici donc les listings qui me permettent de créer un log en java. Je ne rentrerai pas dans des explications en détail mais si vous avez besoin d’informations, vous pouvez toujours laisser un commentaire sous l’article, je me ferai un plaisir de le lire et d’y répondre.

	private static Logger logger;

	public static void createLogger() {
		logger = Logger.getLogger("binanceshell.application");
		Handler loghandler;
		try {
			loghandler = new FileHandler("myTestingLogFile.xml");
			loghandler.setFormatter(new MyXmlFormatter());
			//System.out.println(loghandler.getFormatter().getTail(loghandler));
			logger.addHandler(loghandler);
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
	}

Pour écrire un log, il suffit de faire:

logger.log(Level.INFO,"Application Start!");

Ci dessous, je donne une copie de la classe MyXmlFormatter, qui crée une sortie au format xml le plus simplement possible:

package be.dagal.java.crypto.application.binanceshell;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.LogRecord;

public class MyXmlFormatter extends Formatter {
	private static final SimpleDateFormat SDF = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss");
	@Override
	public String getHead(Handler h) {
		return "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\r\n"
				+ "<?xml-stylesheet href=\"logger.xsl\" type=\"text/xsl\"?>\r\n"
				+ "<!DOCTYPE log SYSTEM \"logger.dtd\">\r\n"
				+ "<log>\r\n";
	}
	@Override
	public String getTail(Handler h) {
		return "</log>\r\n";
	}
	@Override
	public String format(LogRecord record) {
		return "<record>\r\n"
				+ "  <date>" + SDF.format(new Date(record.getMillis())) + "</date>\r\n"
				+ "  <millis>" + record.getMillis() + "</millis>\r\n"
				+ "  <sequence>" + record.getSequenceNumber() + "</sequence>\r\n"
				+ "  <logger> " + record.getResourceBundleName()+"</logger>\r\n"
				+ "  <level>" + record.getLevel() + "</level>\r\n"
				+ "  <class>" + record.getSourceClassName() + "</class>\r\n"
				+ "  <method>" + record.getSourceMethodName() + "</method>\r\n"
				+ "  <thread>" + record.getThreadID() + "</thread>\r\n"
				+ "  <message>" + record.getMessage() + "</message>\r\n"
				+ "</record>\r\n";
	}

}

J’espère que cela suffira à donner des idées à certains.

Étant donné qu’il faut absolument que les fichiers xml et xsl soient sur un serveur, j’ai installé un serveur XAMPP qui fourni Apache, MySQL, PHP, Perl, Tomcat, et j’en passe bien d’autre. Ce bundle de serveur pour GNU/Linux, MS Windows, Mac OS est entièrement gratuit, et je crois même que tout est open source, sans vouloir m’avancer trop loin.

Maintenant que j’ai un serveur web opérationnel, et tout ce qui va avec, je vais pouvoir trouver un emplacement pour y mettre mes fichiers de log mais aussi un semblant de site internet qui va me permettre de faire tout mes tests.

Je vais donc commencer à réfléchir à ce que je vais mettre dans ce site, et par la même occasion, à ce que je dois écrire en java, php, html, xml, xhtml, xsl, dtd, css, …

Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Share via
Copy link
Powered by Social Snap