有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我写了一个map reduce代码,我想调试它

为了做到这一点,我不能使用标准输出,因为Hadoop平台不会将其打印到屏幕上,除非出现错误

相反,我尝试使用logger来创建日志文件

我使用处理程序将其拆分为两个文件,不幸的是,“严重”日志文件为空,而常规日志文件只记录主线程中发生的事情,而不记录map reduce函数中发生的事情

问题如下:

hadoop和日志文件有问题吗?还是我的日志配置有问题?如果是,如何纠正

日志配置代码: 我对整个应用程序使用一个记录器(这次是根记录器)

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;

    }

共 (1) 个答案

  1. # 1 楼答案

    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");
    

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

    conf/log4j.properties