我们希望将应用程序日志打印到本地节点上的文件中。我们正在使用Log4j的RollingFileAppender。
我们的log4j.properties
文件如下:
ODS.LOG.DIR=/var/log/appLogs
ODS.LOG.INFO.FILE=application.log
ODS.LOG.ERROR.FILE=application_error.log
# Root logger option
log4j.rootLogger=ERROR, console
log4j.logger.com.ournamespace=ERROR, APP_APPENDER, ERROR_APPENDER
#
# console
# Add "console" to rootlogger above if you want to use this
#
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}-%r %p %c{5}: %m%n
# Direct log messages to a log file
log4j.appender.APP_APPENDER=org.apache.log4j.RollingFileAppender
log4j.appender.APP_APPENDER.File=${ODS.LOG.DIR}/${ODS.LOG.INFO.FILE}
log4j.appender.APP_APPENDER.MaxFileSize=200MB
log4j.appender.APP_APPENDER.MaxBackupIndex=30
log4j.appender.APP_APPENDER.layout=org.apache.log4j.PatternLayout
log4j.appender.APP_APPENDER.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}-%r %p %c{10}: %m%n
log4j.appender.ERROR_APPENDER=org.apache.log4j.RollingFileAppender
log4j.appender.ERROR_APPENDER.Threshold=ERROR
log4j.appender.ERROR_APPENDER.File=${ODS.LOG.DIR}/${ODS.LOG.ERROR.FILE}
log4j.appender.ERROR_APPENDER.MaxFileSize=200MB
log4j.appender.ERROR_APPENDER.MaxBackupIndex=90
log4j.appender.ERROR_APPENDER.layout=org.apache.log4j.PatternLayout
log4j.appender.ERROR_APPENDER.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}-%r %p %c{10}: %m%n
我们的MR驱动程序日志出现在/var/log/appLogs
目录中,但我们的映射器和缩减器日志不会显示在此目录中。
我们已使用Ambari(Hortonworks数据平台)将我们的log4j.properties片段复制到hdfs-log4j,yarn-log4j,hbase-log4j和zookeeper-log4j。我们的MR作业通常使用HBase输入和输出格式类。
我们需要做些什么更改才能让mapper和reducer日志出现在/ var / log / appLogs目录中?
编辑:日志显示在JobHistory UI syslog
中,但它们未添加到日志文件中。我们缺少什么?
答案 0 :(得分:0)
例如,要配置log4j,您可以从代码中调用PropertyConfigurator.configure(properties);
,例如在mapper / reducer设置方法中。
这是存储在hdfs上的属性的示例:
InputStream is = fs.open(log4jPropertiesPath);
Properties properties = new Properties();
properties.load(is);
PropertyConfigurator.configure(properties);
其中fs是FileSystem对象,log4jPropertiesPath是hdfs上的路径。