2016-05-31 61 views
0

我在運行測試自動化時使用log4j寫入日誌。使用log4j寫入日誌時出現堆棧溢出錯誤

這裏是我的方法來寫日誌:

public class Log { 

private static Logger Log = Logger.getLogger(Log.class.getName()); 

public static void info(String message) 
{ 
    Log.info(message); 
} 

} 

但每當我使用它,堆棧溢出錯誤被拋出類似如下:

調用方法:

Log.info("Click action is performed on My Account link"); 

錯誤:

java.lang.StackOverflowError at 
helpers.Log.info(Log.java:21) at 
helpers.Log.info(Log.java:21) at 
helpers.Log.info(Log.java:21) at 
helpers.Log.info(Log.java:21) 

任何人都可以請幫忙嗎?

+2

提示:在所有地方使用非常相同的名字來表示非常不同的對象和類是非常糟糕的主意;因爲它會導致你現在面臨的這些有趣的問題。另外:請閱讀關於Java編碼風格的約定。例如,如果您已經調用了Logger對象'logger'(而不是將其稱爲'Log',那麼您也應該避免這個問題)。所以:字段/成員名稱以小寫字母開頭! – GhostCat

回答

0

我看不到log4j.properties文件的配置。試試這個

import org.apache.log4j.Logger; 
import org.apache.log4j.xml.DOMConfigurator; 
public class Logs { 

    public static Logger Application_Log = Logger.getLogger(Logs.class.getName()); 

    public Logs(){ 
     DOMConfigurator.configure("log4j-config.xml"); 
    } 
public void info(String message){ 
     Application_Log.info(message); 
    } 
+0

Hi @ karthick23 我不使用log4j.properties文件,而是使用log4j.xml代替。下面是我的文件: \t \t \t \t \t \t \t <佈局類=「org.apache.log4j。的PatternLayout 「> \t \t \t \t \t \t \t \t \t <電平值= 「INFO」/> \t \t <附加器-REF REF = 「fileAppender」/> \t

+0

使用XML應該使用DOMConfigurator已經更新了代碼 – karthick23

+0

它那直到不工作,StackOverflowError。 –

1

您正在調用您的班級'info(String)方法,而不是Loggerinfo(String)方法:您的班級也被稱爲Log

使用Log.Log.info代替 - 或重命名Log類,或重命名Log成員變量。

這是遵循Java命名約定的原因之一。

+0

我試着重命名Log成員變量來記錄 'package helpers; import org.apache.log4j.Logger; public class Log private Logger log = Logger.getLogger(Log.class.getName()); public static void info(String message) { log.info(message); } }' 但仍然有問題。你能幫忙嗎? @Andy Turner –