如何在使用hadoop时使用logger api编写java日志文件

我写了一个地图减少我想要调试的代码。

为了做到这一点,我无法使用标准输出,因为除非发生错误,否则Hadoop平台不会将其打印到屏幕上。

相反,我试图使用记录器,以创建日志文件。

我使用处理程序将它拆分为两个文件,遗憾的是,“严重”的日志文件是空的,一般日志文件只记录主线程中发生的事情,而不是映射减少函数。

问题如下:

有没有hadoop和日志文件的问题,还是我的记录器配置有问题? 如果是这样,如何纠正它。

日志配置代码:我使用一个记录器来处理整个应用程序(这次是root logger)

public static Logger configureLogging() { try { logger=Logger.getLogger(""); //FileSystem hdfs=FileSystem.get(URI.create(Misc.S3FS),getConfiguration()); logger.setLevel(Level.ALL); //StreamHandler handler=new StreamHandler(hdfs.create(new Path(Misc.LOGS_PATH+"mylog.log")),new SimpleFormatter()); FileHandler handler=new FileHandler(Misc.LOGS_PATH+"mylog.xml",true); FileHandler severeHandler=new FileHandler(Misc.LOGS_PATH+"mylogSevere.xml",true); severeHandler.setLevel(Level.INFO); logger.addHandler(handler); logger.addHandler(severeHandler); } catch (Exception e) { e.printStackTrace(); } return logger; } 

Hadoop附带预配置的log4j。 您所要做的就是导入两个类:

 import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; 

现在,您可以在映射器,缩减器和任何您想要的位置定义记录器:

 private static final Log LOG = LogFactory.getLog(MyClass.class); 

并记录您需要的内容:

 LOG.info("My message"); 

这些消息将在作业执行期间显示。 您可以使用调整log4j配置

 conf/log4j.properties