Gab*_*l H 5 java logging hadoop
我写了一个地图减少我想要调试的代码.
为了做到这一点,我不能使用标准输出,因为除非发生错误,否则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;
}
Run Code Online (Sandbox Code Playgroud)
Hadoop带有预配置的log4j.您所要做的就是导入两个类:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Run Code Online (Sandbox Code Playgroud)
现在,您可以在映射器,缩减器和任何您想要的位置定义记录器:
private static final Log LOG = LogFactory.getLog(MyClass.class);
Run Code Online (Sandbox Code Playgroud)
并记录您需要的内容:
LOG.info("My message");
Run Code Online (Sandbox Code Playgroud)
这些消息将在作业执行期间显示.您可以使用调整log4j配置
conf/log4j.properties
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8153 次 |
| 最近记录: |