在hadoop中控制日志功能

在hadoop中控制日志功能,hadoop,log4j,Hadoop,Log4j,如何控制hadoop中的日志功能?Hadoop使用默认的log4j.properties文件来控制日志。我的用例是控制类生成的日志 Hadoop守护进程,如JobTracker、TaskTracker、NameNode和DataNode守护进程使用各自主机节点的Hadoop conf目录中的log4j.properties文件。rootLogger设置为“INFO,console”,它将INFO级别的所有消息记录到控制台 我使用Oozie工作流触发hadoop作业。我试图通过设置-Dlog4j.

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

Hadoop守护进程,如JobTrackerTaskTrackerNameNodeDataNode守护进程使用各自主机节点的
Hadoop conf目录中的log4j.properties文件。rootLogger设置为“INFO,console”,它将INFO级别的所有消息记录到控制台

我使用Oozie工作流触发hadoop作业。我试图通过设置
-Dlog4j.configuration=path/to/log4j.properties
系统属性将自定义log4j.properties文件传递给作业,但该文件不起作用。尽管如此,它还是从默认属性中获取log4j属性

我不应该触摸默认的log4j.properties文件

我正在使用Oozie-v3.1.3-Cubating、hadoop-v0.20和cloudera CDH-v4.0.1

如何覆盖默认的log4j.properties文件??或
我如何控制我的类的日志???

您使用自己的Log4J文件具体想要实现什么?我这样问是因为日志分布在集群中,但是通过将它们记录到rootLogger,您应该能够通过作业跟踪器(通过深入查看作业任务尝试)看到它们

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

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

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

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

如果您想添加自己的appender,那么您应该能够通过上述设置方法以编程方式(参见此)完成此操作。

感谢您回复chris:-)这对我有很大帮助。是的,这很有帮助。。谢谢