eclipse中log4j無法輸出到控制台

來源:互聯網
上載者:User

Log4j折騰了半天就是無法輸出到控制台。log4j.properties檔案也到處放了,還是會產生please initialize the log4j system properly的錯誤。

於是決定在代碼中配置一個簡單的stdLogger,實現了基本的Log功能。

import org.apache.log4j.*;public class Log {public static Logger stdLogger=null;static{stdLogger=Logger.getLogger("stdout");ConsoleAppender ca=new ConsoleAppender(new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN),"System.out");stdLogger.addAppender(ca);}}

值得注意的是,在new ConsoleAppender的時候必須要有參數,要指定PatternLayout參數,否則就會報錯:

ERROR No output stream or file set for the appender named [null].

原因是無參數的建構函式實際沒有進行任何初始化操作。

這是ConsoleAppender的源碼:

   45     /**   46       * Constructs an unconfigured appender.   47       */   48     public ConsoleAppender() {   49     }   50      51       /**   52        * Creates a configured appender.   53        *   54        * @param layout layout, may not be null.   55        */   56     public ConsoleAppender(Layout layout) {   57       this(layout, SYSTEM_OUT);   58     }   59      60       /**   61        *   Creates a configured appender.   62        * @param layout layout, may not be null.   63        * @param target target, either "System.err" or "System.out".   64        */   65     public ConsoleAppender(Layout layout, String target) {   66       setLayout(layout);   67       setTarget(target);   68       activateOptions();   69     }

所以建構函式中必須要傳入參數。
另外,為了像printf,或System.out.format那樣格式化輸出,可以將輸出函數封裝一下:

import org.apache.log4j.*;public class Log {public static Logger stdLogger=null;static{stdLogger=Logger.getLogger("stdout");ConsoleAppender ca=new ConsoleAppender(new PatternLayout(PatternLayout.DEFAULT_CONVERSION_PATTERN),"System.out");stdLogger.addAppender(ca);stdLogger.setLevel(Level.DEBUG);}public static void debug(String format, Object... args){String str=String.format(format, args);stdLogger.debug(str);}public static void info(String format, Object... args){String str=String.format(format, args);stdLogger.info(str);}public static void warn(String format, Object... args){String str=String.format(format, args);stdLogger.warn(str);}public static void error(String format, Object... args){String str=String.format(format, args);stdLogger.error(str);}public static void fatal(String format, Object... args){String str=String.format(format, args);stdLogger.fatal(str);}}

在程式裡就可以這樣使用了:

Log.debug("Thread %s get %d",Thread.currentThread().getName(), result);
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.