在hadoop中控制日志功能

ua4mk5z4  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(256)

如何在hadoop中控制日志功能?hadoop使用默认的log4j.properties文件来控制日志。我的用例是控制类生成的日志。
hadoop守护进程(如jobtracker、tasktracker、namenode和datanode守护进程)使用来自各自主机节点的log4j.properties文件 hadoop-conf-directory . rootlogger被设置为“info,console”,它将info级别的所有消息记录到控制台。
我使用oozie工作流触发hadoop作业。我尝试通过设置 -Dlog4j.configuration=path/to/log4j.properties 系统属性,但它不工作。不过,它从默认的log4j属性获取log4j属性。
我不应该碰默认的log4j.properties文件。
我正在使用oozie-v3.1.3-incubating、hadoop-v0.20和cloudera-cdh-v4.0.1。
如何重写默认的log4j.properties文件??或者如何控制我的类的日志??

ltskdhd1

ltskdhd11#

你想用自己的log4j文件具体实现什么?我这样问是因为日志分布在集群中,但是通过将它们记录到rootlogger,您应该能够通过job tracker(通过深入查看作业尝试)看到它们。
如果您想利用滚动文件,那么以后很难检索这些文件(同样是因为它们分布在任务节点上)。
如果要动态设置日志级别,这应该足够简单:

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

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

如果您想添加自己的appender,那么您应该能够在上面的setup方法中以编程方式(参见这个so问题)完成这项工作。

相关问题