Управление функциями ведения журнала в hadoop

Как управлять функциями ведения журнала в hadoop? Hadoop использует log4j по умолчанию.файл свойств для управления журналами. Мой вариант использования-управлять журналами, созданными моими классами.

демоны Hadoop, как JobTracker, TaskTracker, сетевой протокол и DataNode процессы демона используют log4j.файл свойств из соответствующего узла узла hadoop-conf-directory. В rootLogger имеет значение "информация", "консоль" который регистрирует все сообщения на уровень INFO в консоли.

Я запускаю задания hadoop, используя рабочий процесс Oozie. Я попытался передать свой пользовательский log4j.файл свойств для задания, установив -Dlog4j.configuration=path/to/log4j.properties системное свойство, но оно не работает. Все равно, к log4j свойства по умолчанию.

Я не должен касаться log4j по умолчанию.файл свойств.

Я использую Oozie-v3.1.3-инкубация, hadoop-v0.20 и cloudera CDH-v4.0.1.

Как я могу переопределить log4j по умолчанию.файл свойств ?? или Как я могу управлять журналами для своих классов ??

1 ответов


чего конкретно вы пытаетесь достичь с помощью своего собственного файла Log4J? Я спрашиваю, потому что журналы распределены по вашему кластеру, но, регистрируя их в rootLogger, вы должны иметь возможность видеть их через трекер заданий (путем детализации попыток задания).

Если вы хотите использовать скользящие файлы, то вам трудно получить эти файлы позже (опять же, потому что они распределены по узлам задачи).

Если вы хотите динамически задавать уровни журнала, это должно быть достаточно просто:

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

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

Если вы хотите добавить собственных аппендеров, то вы должны быть в состоянии сделать это программно (см. Это поэтому вопрос), в методе установки, как указано выше.