переопределить log4j.properties в hadoop - PullRequest
15 голосов
/ 31 января 2012

Как мне переопределить стандартные log4j.properties в hadoop? Если я установлю консоль hadoop.root.logger = WARN, он не будет печатать журналы на консоли, тогда как я хочу, чтобы он не печатал INFO в файле журналов. Я добавил файл log4j.properties в свой jar-файл, но не могу переопределить файл по умолчанию. Короче говоря, я хочу, чтобы файл журнала печатал только ошибки и предупреждения.

# Define some default values that can be overridden by system properties
hadoop.root.logger=INFO,console
hadoop.log.dir=.
hadoop.log.file=hadoop.log

#
# Job Summary Appender 
#
# Use following logger to send summary to separate file defined by 
# hadoop.mapreduce.jobsummary.log.file rolled daily:
# hadoop.mapreduce.jobsummary.logger=INFO,JSA
# 
hadoop.mapreduce.jobsummary.logger=${hadoop.root.logger}
hadoop.mapreduce.jobsummary.log.file=hadoop-mapreduce.jobsummary.log

# Define the root logger to the system property "hadoop.root.logger".
log4j.rootLogger=${hadoop.root.logger}, EventCounter

# Logging Threshold
log4j.threshold=ALL

#
# Daily Rolling File Appender
#

log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DRFA.File=${hadoop.log.dir}/${hadoop.log.file}

# Rollver at midnight
log4j.appender.DRFA.DatePattern=.yyyy-MM-dd

# 30-day backup
#log4j.appender.DRFA.MaxBackupIndex=30
log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout

# Pattern format: Date LogLevel LoggerName LogMessage
log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
# Debugging Pattern format
#log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n


#
# console
# Add "console" to rootlogger above if you want to use this 
#

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n

#
# TaskLog Appender
#

#Default values
hadoop.tasklog.taskid=null
hadoop.tasklog.iscleanup=false
hadoop.tasklog.noKeepSplits=4
hadoop.tasklog.totalLogFileSize=100
hadoop.tasklog.purgeLogSplits=true
hadoop.tasklog.logsRetainHours=12

log4j.appender.TLA=org.apache.hadoop.mapred.TaskLogAppender
log4j.appender.TLA.taskId=${hadoop.tasklog.taskid}
log4j.appender.TLA.isCleanup=${hadoop.tasklog.iscleanup}
log4j.appender.TLA.totalLogFileSize=${hadoop.tasklog.totalLogFileSize}

log4j.appender.TLA.layout=org.apache.log4j.PatternLayout
log4j.appender.TLA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n

#
#Security appender
#
hadoop.security.log.file=SecurityAuth.audit
log4j.appender.DRFAS=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.DRFAS.File=${hadoop.log.dir}/${hadoop.security.log.file}

log4j.appender.DRFAS.layout=org.apache.log4j.PatternLayout
log4j.appender.DRFAS.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
#new logger
# Define some default values that can be overridden by system properties
hadoop.security.logger=INFO,console
log4j.category.SecurityLogger=${hadoop.security.logger}

#
# Rolling File Appender
#

#log4j.appender.RFA=org.apache.log4j.RollingFileAppender
#log4j.appender.RFA.File=${hadoop.log.dir}/${hadoop.log.file}

# Logfile size and and 30-day backups
#log4j.appender.RFA.MaxFileSize=1MB
#log4j.appender.RFA.MaxBackupIndex=30

#log4j.appender.RFA.layout=org.apache.log4j.PatternLayout
#log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} - %m%n
#log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n

#
# FSNamesystem Audit logging
# All audit events are logged at INFO level
#
log4j.logger.org.apache.hadoop.hdfs.server.namenode.FSNamesystem.audit=WARN

# Custom Logging levels

#log4j.logger.org.apache.hadoop.mapred.JobTracker=DEBUG
#log4j.logger.org.apache.hadoop.mapred.TaskTracker=DEBUG
#log4j.logger.org.apache.hadoop.hdfs.server.namenode.FSNamesystem.audit=DEBUG

# Jets3t library
log4j.logger.org.jets3t.service.impl.rest.httpclient.RestS3Service=ERROR

#
# Event Counter Appender
# Sends counts of logging messages at different severity levels to Hadoop Metrics.
#
log4j.appender.EventCounter=org.apache.hadoop.metrics.jvm.EventCounter

#
# Job Summary Appender
#
log4j.appender.JSA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.JSA.File=${hadoop.log.dir}/${hadoop.mapreduce.jobsummary.log.file}
log4j.appender.JSA.layout=org.apache.log4j.PatternLayout
log4j.appender.JSA.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
log4j.appender.JSA.DatePattern=.yyyy-MM-dd
log4j.logger.org.apache.hadoop.mapred.JobInProgress$JobSummary=${hadoop.mapreduce.jobsummary.logger}
log4j.additivity.org.apache.hadoop.mapred.JobInProgress$JobSummary=false

#
# MapReduce Audit Log Appender
#

# Set the MapReduce audit log filename
#hadoop.mapreduce.audit.log.file=hadoop-mapreduce.audit.log

# Appender for AuditLogger.
# Requires the following system properties to be set
#    - hadoop.log.dir (Hadoop Log directory)
#    - hadoop.mapreduce.audit.log.file (MapReduce audit log filename)

#log4j.logger.org.apache.hadoop.mapred.AuditLogger=INFO,MRAUDIT
#log4j.additivity.org.apache.hadoop.mapred.AuditLogger=false
#log4j.appender.MRAUDIT=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.MRAUDIT.File=${hadoop.log.dir}/${hadoop.mapreduce.audit.log.file}
#log4j.appender.MRAUDIT.DatePattern=.yyyy-MM-dd
#log4j.appender.MRAUDIT.layout=org.apache.log4j.PatternLayout
#log4j.appender.MRAUDIT.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n

Ответы [ 9 ]

8 голосов
/ 24 октября 2012

Если вы используете файл Log4j.properties по умолчанию, параметры ведения журнала будут переопределены переменными среды из сценария запуска. Если вы хотите использовать log4j по умолчанию и просто хотите изменить уровень ведения журнала, используйте $HADOOP_CONF_DIR/hadoop-env.sh

Например, чтобы изменить регистратор на уровень журнала DEBUG и регистратор DRFA, используйте

export HADOOP_ROOT_LOGGER="DEBUG,DRFA"
6 голосов
/ 06 апреля 2012

Изменить файл log4j внутри HADOOP_CONF_DIR. Обратите внимание, что задание hadoop не будет учитывать файл log4j вашего приложения. Он будет рассматривать тот, который внутри HADOOP_CONF_DIR.

Если вы хотите, чтобы hadoop использовал какой-либо другой файл log4j, попробуйте один из них:

  1. Вы можете попробовать то, что сказал @Patrice. то есть.

    -Dlog4j.configuration = Файл: /path/to/user_specific/log4j.xml

  2. Настройте HADOOP_CONF_DIR / log4j.xml и установите уровень регистратора для «ваших» классов согласно вашему желанию. Это не повлияет на других пользователей, если только у обоих нет классов с одинаковой структурой пакета. Это не будет работать для основных классов hadoop, так как все пользователи получат подтверждение.

  3. Создайте свой настроенный файл log4j. Скопируйте каталог HADOOP_CONF_DIR и поместите в него файл log4j. экспортируйте HADOOP_CONF_DIR в ваш каталог conf. Другие пользователи будут указывать на по умолчанию.

6 голосов
/ 01 февраля 2012
  1. Вы можете удалить log4j.properties из вашего hadoop jar
  2. ИЛИ убедитесь, что ваш jar / log4j.properties является первым в пути к классам (log4j выбирает первый log4j.properties из пути к классам, который он находит)
  3. ИЛИ укажите системную переменную: -Dlog4j.configuration=PATH_TO_FILE

См. Документацию , чтобы узнать, как log4j находит конфигурацию.

3 голосов
/ 09 июля 2012

Maven Упаковка:

Как только я понял, что мне нужно добавить свой пользовательский файл debug-log.properties в src / main / java / resources, Maven добавил его в корневой каталог application.jarи тогда нужно было просто сослаться на это или нет в -Dlog4j.configuration=debug-log.properties из командной строки.

Oozie <java> Действие:

Что касается Oozie, используйте <java-opts>-Dlog4j.configuration=${log4jConfig}</java-opts> в действиях workflow.xml и определите следующее в файле job.properties.

#one of the following log4j.config parameters must be defined 
#log4jConfig=log4j.properties
log4jConfig=debug-log.properties

Узи <map-reduce> Действие:

 <property>
      <name>mapred.child.java.opts</name>
      <value>-Dlog4j.configuration=${log4jConfig}</value>
 </property> 
3 голосов
/ 06 апреля 2012

Я столкнулся с той же проблемой (CDH3U3, Hadoop 0.20.2).Я наконец нашел решение с (примечание file: префикс в пути):

-Dlog4j.configuration=file:/path/to/user_specific/log4j.xml
2 голосов
/ 05 октября 2014

Как уже упоминалось Сульфой, для hadoop 1.2.1 важно переопределить свойство task-log4j.properties, которое присутствует внутри hadoop-core.jar

Для моего псевдораспределенного режима,

Мне не удалось распечатать отладочные сообщения моих пользовательских UDF-файлов и пришлось удалить файл task-log4j.properties из hadoop-core.jar и заменить его копией $ HADOOP_INSTALL / conf / log4j.properties.

Используется

zip -d hadoop-core-1.2.1.jar task-log4j.properties #to delete

и

zip -g hadoop-core-1.2.1.jar task-log4j.properties #to add back 
0 голосов
/ 25 марта 2014

В Hadoop 1.2.1 есть 2 файла конфигурации: log4j.properties и task-log4j.properties Таким образом, чтобы приведенный выше пример работал, изменение должно быть сделано в task-log4j.properties, а не в log4j.properties

Вы можете добавить следующую строку в свой файл task-log4j.properties:

log4j.logger.org.xxx=WARN
0 голосов
/ 19 июня 2013

Поместите опцию log4j.configuration в дочерние опции java.

Т.е.

hadoop jar ... -Dmapred.child.java.opts=-Dlog4j.configuration=file:/...../log4j_debug.properties

Вы должны поместить файл log4j_debug.properties на всех подчиненных серверах в один и тот жепуть к каталогу, например /home/yourname/log4j_debug.properties или /tmp/log4j_debug.properties

Этот параметр перезаписывает настройки mapred.child.java.opts.Если вы хотите использовать другие параметры, например -Xmx32m, что означает размер кучи 32 МБ, выполните следующие действия:

hadoop jar ... -Dmapred.child.java.opts='-Xmx32m -Dlog4j.configuration=file:/...../log4j_debug.properties'
0 голосов
/ 06 июня 2013

Если в файле jar уже настроен файл свойств log4j.Вы можете переопределить, просто поместив -Dlog4j.configuration = перед -classpath

, вот пример:

java -Dlog4j.configuration = .. \ conf \ log4j.properties -classpath% CLASSPATH%

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...