控制hadoop中的日志记录功能

Sur*_*esh 6 hadoop log4j

如何在hadoop中控制日志记录功能?Hadoop使用默认的log4j.properties文件来控制日志.我的用例是控制我的类生成的日志.

JobTracker,TaskTracker,NameNodeDataNode守护进程这样的Hadoop 守护进程使用来自各自主机节点的log4j.properties文件hadoop-conf-directory.rootLogger设置为"INFO,console",它将INFO级别的所有消息记录到控制台.

我使用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文件?或者我如何控制我的类的日志?

Chr*_*ite 10

你想用你自己的Log4J文件实现什么?我问,因为日志分布在您的集群中,但是通过将它们记录到rootLogger,您应该能够通过作业跟踪器看到它们(通过向下钻取作业任务尝试).

如果您想使用滚动文件,那么以后很难检索这些文件(同样是因为它们分布在您的任务节点上).

如果要动态设置日志级别,这应该足够简单:

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

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

如果你想添加自己的appender,那么你应该能够以编程方式(请参阅此SO问题),在上面的设置方法中.