2010-10-24 36 views
0

我正在编写一个命令行工具,它可以对我们的服务器执行一些测试并将输出报告给屏幕。我目前使用log4j的将文本打印到控制台的最佳技术

打印到屏幕和日志文件。

但是,我想知道是否有更好的技术来管理一个类的所有打印,而不是将“打印”命令分散在我的代码中。

例如

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)); 
} 

这是现在散布在我所有代码中的输出示例。

难道是最好有一个处理所有的打印格式化类?

什么是创建它的最佳方法?

你觉得像什么:

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); 
} 

回答

0

您是否尝试过使用log4j.properties来格式化文本。我想如果你想为每个类别唯一地设定格式,那么使用log4j.properties仍然是可能的。

这里是log4j.properties

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

您可以使用格局的性质,像这样的一个简单的例子:

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

嗨,Amir,我现在正在使用log4j,正如你所说。但是,我不想从代码的不同部分进行打印,但我宁愿有一个处理打印的单个/外部类。这样,如果我想改变显示输出的方式,我不必去查找所有类中的打印语句。 – Alessandro 2010-10-25 19:01:58

+0

你打算在未来改变什么?无论如何,是不是通过属性文件来控制格式和记录级别?是否有理由仅抽出一行函数调用? – 2010-10-26 02:01:52

0

log4j的有追加程序将日志信息重定向到不同的位置。报价“控制台,文件,GUI组件,远程套接字服务器,JMS,NT事件记录器和远程UNIX系统日志守护进程存在多个appender”引用