2010-10-24 6 views
0

J'écris un outil de ligne de commande qui effectue un certain nombre de tests sur nos serveurs et signale une sortie à l'écran. J'utilise actuellement log4j pour imprimer à l'écran et dans un fichier journal.Meilleure technique pour imprimer du texte sur la console

Cependant, je me demandais s'il y avait une meilleure technique pour gérer toutes les impressions d'une classe au lieu d'avoir les commandes "impression" dispersées partout dans mon code.

par exemple.

logger.info("Connecting to environment: " + envName); 

if (cmd.hasOption(OPTION_CHECK_PRIMARY)) { 
    //print primary leg 
    String primaryLegName = env.getPrimaryLeg().getLegName(); 
    String message = "is primary"; 

    logger.info(String.format("%s : %-4s %s", envName, primaryLegName, message)); 
} 

Ceci est un exemple de la sortie qui est maintenant dispersée dans tout mon code.

Serait-il préférable d'avoir une classe Formatter qui gère toutes les impressions?

Quelle est la meilleure approche pour le créer?

Que pensez-vous quelque chose comme:

Formatter pf = new PlainFormatter(); 
... 
pf.printEnvironment(envName); 

if (cmd.hasOption(OPTION_CHECK_PRIMARY)) { 
    //print primary leg 
    String primaryLegName = env.getPrimaryLeg().getLegName(); 
    pf.printPrimary(envName, primaryLegName); 
} 

Répondre

0

Avez-vous essayé d'utiliser log4j.properties pour formater le texte. Je pense que si vous essayez de formater uniquement pour chaque classe, cela est toujours possible en utilisant log4j.properties.

Voici un exemple simple de log4j.properties

log4j.rootLogger=INFO, A1 
log4j.appender.A1=org.apache.log4j.ConsoleAppender 
log4j.appender.A1.layout=org.apache.log4j.PatternLayout 

Vous pouvez utiliser modèle dans les propriétés comme ceci:

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 
+0

Bonjour Amir, J'utilise log4j pour le moment, donc je fais exactement comme tu dis. Cependant, je ne veux pas imprimer à partir d'une partie différente du code, mais je préfère avoir une classe unique/externe qui gère l'impression. De cette façon, si je veux changer la façon dont j'affiche la sortie, je n'ai pas besoin d'aller chercher les instructions d'impression dans toutes mes classes. – Alessandro

+0

Qu'envisagez-vous de changer à l'avenir? Le formatage et le niveau de journalisation ne sont-ils pas contrôlés via le fichier de propriétés? Y aurait-il une raison pour extraire juste un appel de fonction d'une ligne? –

0

log4j a appenders pour rediriger les messages du journal à des endroits différents. quote "Plusieurs appenders existent pour la console, les fichiers, les composants graphiques, les serveurs socket distants, JMS, les Event Loggers NT et les démons UNIX Syslog distants" unquote

Questions connexes