2013-01-07 37 views
6

如何控制hadoop中的日誌功能? Hadoop使用默認的log4j.properties文件來控制日誌。我的用例是控制我的類生成的日誌。控制hadoop中的日誌功能

Hadoop守護進程像JobTracker的的TaskTracker的NameNode的DataNode守護進程使用log4j.properties文件從各自的主機節點的hadoop-conf-directory。 rootLogger設置爲「信息,控制檯」,其將級別爲信息的所有消息記錄到控制檯。

我使用Oozie Workflow觸發hadoop作業。我嘗試通過設置-Dlog4j.configuration=path/to/log4j.properties系統屬性將我的自定義log4j.properties文件傳遞給作業,但它不起作用。儘管如此,它仍然需要使用默認的log4j屬性。

我不應該觸摸默認的log4j.properties文件。

我正在使用Oozie-v3.1.3-incubating,hadoop-v0.20和cloudera CDH-v4.0.1。

如何覆蓋默認的log4j.properties文件?或 如何控制我的課程日誌?

回答

10

您試圖用自己的Log4J文件實現什麼?我問,因爲日誌分佈在集羣中,但是通過將日誌記錄到rootLogger,您應該能夠通過作業跟蹤器查看它們(通過鑽取作業任務嘗試)。

如果您想使用滾動文件,那麼稍後您很難再檢索這些文件(因爲它們分佈在任務節點上)。

如果你想動態設置日誌級別,這應該是很簡單的:

public static Logger log = Logger.getLogger(MyMapper.class); 

@Override 
protected void setup(Context context) throws IOException, 
     InterruptedException { 
    log.setLevel(Level.WARN); 
} 

如果你想添加自己追加程序,那麼你應該能夠以編程方式做到這一點(見本SO Question)在上面的設置方法中。

+0

感謝您的回覆克里斯:-) 這可以幫助我很多。 – Suresh

+0

是的,這很有幫助..謝謝 –