2010-10-24 59 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」引用