logger des données

2 réponses
Avatar
brice-64
bonjour,
je voudrais logger des données que récupère une class...
pouvez-vous me filer un coup dem main, voici le source de ma class :

package fr.ldap;

import javax.naming.*;
import javax.naming.directory.*;
import java.util.Hashtable;
import java.util.Enumeration;
import org.apache.log4j.*;
import java.util.*;
import java.io.*;
import javax.naming.ldap.*;




public class openLdap {

static String LDAP_PORTAIL ="XXXXXXX";
static String SERVEUR = "XXXXXXX";
static String my_filter;
static Logger logger = Logger.getLogger(openLdap.class.getName());




static String str_nom;
static String str_prenom;
static String str_mail;
static String str_matricule;
static ArrayList retourLdapinfos;
ArrayList al_tmp = retourLdapinfos;
//Méthode concernant Ldap
/*
public ArrayList getLdapinfos(String str_matricule) {

Ldap_infos(str_matricule);
return retourLdapinfos;
}
*/

public void getLdapinfos(String str_matricule) {
try{
al_tmp = Ldap_infos(str_matricule);
str_nom = al_tmp.get(1).toString();
str_prenom = al_tmp.get(2).toString();
str_mail = al_tmp.get(0).toString();
}catch (Exception ex){
logger.warn(ex.getMessage().toString());
return;
}
}


private ArrayList Ldap_infos(String str_matricule) {

ArrayList al_retour = new ArrayList();
//Definition de la classe à utiliser
Hashtable env = new Hashtable();
DirContext ctx = null;
String tmp = new String();

//Variable d'environnement
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");

//Adresse de l'annuaire LDAP
env.put(Context.PROVIDER_URL, "ldap://" + SERVEUR + ":389");

//Definition de l'authentification
env.put(Context.SECURITY_AUTHENTICATION, "simple");
try {
//Recuperation de pointeur sur le contexte
ctx = new InitialDirContext(env);

//Definition les options de recherche
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
String my_filter = "(&(objectClass=jetspeeduser)
(uid="+str_matricule+"))";

//Options de recherche
NamingEnumeration results=ctx.search(LDAP_PORTAIL,
my_filter, constraints);
String myAttrs[] = { "mail", "sn", "givenName"};
String dn = "";

//Affichage des resultats
while ( results != null && results.hasMore() ) {
SearchResult entry = (SearchResult)results.next();
dn = entry.getName().toString();
Attributes ar = ctx.getAttributes(dn +","+
LDAP_PORTAIL,myAttrs);


Attributes attrs = entry.getAttributes();
if ( results != null ) {
//0
if ( attrs.get("mail") != null) {

al_retour.add(attrs.get("mail").toString().substring(6));
} else {
al_retour.add("Pas d'adresse mail");
}
//1
if ( attrs.get("sn") != null) {

al_retour.add(attrs.get("sn").toString().substring(4));
} else {
al_retour.add("Pas de Nom");
}
//2
if ( attrs.get("givenName") != null) {

al_retour.add(attrs.get("givenName").toString().substring(11));
} else {
al_retour.add("Pas de prénom");
}
}
}

ctx.close();
}catch (NamingException ex) {
logger.warn("erreur" + ex.getMessage().toString());
}
return al_retour;
}
}

Merci d'avance...

2 réponses

Avatar
Emmanuel PIC
Salut,

Manifestement, au vu de ton code, tu utilises Log4J.

Pour bien utiliser Log4J, il faut configurer le logger d'abord, puis le
définir.

Pour configurer le logger, dans le main par exemple, il faut utiliser un
Configurator. Après le configurateur lancé, il faut récupérer un Logger
pour pouvoir logger l'information. Voici un exemple simple qui illustre
ce fonctionnement :

<code>
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;

public class TestLogger
{
/**
* Ceci est notre logger. Le logger utilisera le nom
* de la classe pour identifier la classe qui a utilisé
* le service de log (tres utile pour tracker les bugs)
*/
Logger _logger = Logger.getLogger(TestLogger.class);

public TestLogger()
{
}

/**
* Log un message d'information
*/
public void logInfo(String message)
{
_log.info(message);
}

/**
* Log un message d'erreur
*/
public void logError(String message)
{
_log.error(message);
}

/**
* Log un message de debug
*/
public void logDebug(String message)
{
_log.debug(message);
}

public static void main(String[] args)
{
//Configure le logger avec les parametres par defaut
//c'est a dire impression sur l'ecran des logs
BasicConfigurator.configure();

TestLogger logger = new TestLogger();
logger.logInfo("Ceci est un message informatif);
logger.logError("Ceci est un message d'erreur");
logger.logDebug("Ceci est un message de debug");
}
}
</code>

Suivant comment tu configures ton logger
(<code>BasicConfigurator.configure</code>), tu peux choisir d'afficher
dans le flux standard uniquement certains messages (info par exemple) et
logger les autres messages dans un fichier (debug et error par exemple).


brice wrote:

bonjour,
je voudrais logger des données que récupère une class...
pouvez-vous me filer un coup dem main, voici le source de ma class :

package fr.ldap;

import javax.naming.*;
import javax.naming.directory.*;
import java.util.Hashtable;
import java.util.Enumeration;
import org.apache.log4j.*;
import java.util.*;
import java.io.*;
import javax.naming.ldap.*;




public class openLdap {

static String LDAP_PORTAIL ="XXXXXXX";
static String SERVEUR = "XXXXXXX";
static String my_filter;
static Logger logger = Logger.getLogger(openLdap.class.getName());




static String str_nom;
static String str_prenom;
static String str_mail;
static String str_matricule;
static ArrayList retourLdapinfos;
ArrayList al_tmp = retourLdapinfos;
//Méthode concernant Ldap
/*
public ArrayList getLdapinfos(String str_matricule) {

Ldap_infos(str_matricule);
return retourLdapinfos;
}
*/

public void getLdapinfos(String str_matricule) {
try{
al_tmp = Ldap_infos(str_matricule);
str_nom = al_tmp.get(1).toString();
str_prenom = al_tmp.get(2).toString();
str_mail = al_tmp.get(0).toString();
}catch (Exception ex){
logger.warn(ex.getMessage().toString());
return;
}
}


private ArrayList Ldap_infos(String str_matricule) {

ArrayList al_retour = new ArrayList();
//Definition de la classe à utiliser
Hashtable env = new Hashtable();
DirContext ctx = null;
String tmp = new String();

//Variable d'environnement
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");

//Adresse de l'annuaire LDAP
env.put(Context.PROVIDER_URL, "ldap://" + SERVEUR + ":389");

//Definition de l'authentification
env.put(Context.SECURITY_AUTHENTICATION, "simple");
try {
//Recuperation de pointeur sur le contexte
ctx = new InitialDirContext(env);

//Definition les options de recherche
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
String my_filter = "(&(objectClass=jetspeeduser)
(uid="+str_matricule+"))";

//Options de recherche
NamingEnumeration results=ctx.search(LDAP_PORTAIL,
my_filter, constraints);
String myAttrs[] = { "mail", "sn", "givenName"};
String dn = "";

//Affichage des resultats
while ( results != null && results.hasMore() ) {
SearchResult entry = (SearchResult)results.next();
dn = entry.getName().toString();
Attributes ar = ctx.getAttributes(dn +","+
LDAP_PORTAIL,myAttrs);


Attributes attrs = entry.getAttributes();
if ( results != null ) {
//0
if ( attrs.get("mail") != null) {

al_retour.add(attrs.get("mail").toString().substring(6));
} else {
al_retour.add("Pas d'adresse mail");
}
//1
if ( attrs.get("sn") != null) {

al_retour.add(attrs.get("sn").toString().substring(4));
} else {
al_retour.add("Pas de Nom");
}
//2
if ( attrs.get("givenName") != null) {

al_retour.add(attrs.get("givenName").toString().substring(11));
} else {
al_retour.add("Pas de prénom");
}
}
}

ctx.close();
}catch (NamingException ex) {
logger.warn("erreur" + ex.getMessage().toString());
}
return al_retour;
}
}

Merci d'avance...


Avatar
Christophe M.
Heuum System.out.println() ...

Tu peux aussi ouvrir un fichier texte dans un BufferedReader et faire
des println dessus

Sinon, y a l'API de log inclus dans java , regarde les classes de
java.util.logging.*
notament la classe LogManager

bon courage

brice wrote:

bonjour,
je voudrais logger des données que récupère une class...
pouvez-vous me filer un coup dem main, voici le source de ma class :