/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.conf;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.apache.log4j.Appender;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.RollingFileAppender;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Test;
public class TestLog4jJsonConfiguration {
static Logger LOG = Logger.getLogger(TestLog4jJsonConfiguration.class);
private JSONObject createJSONObject() throws JSONException {
// Construct json object for log4j
JSONObject log4j_default = new JSONObject();
log4j_default.put("hadoop.root.logger", "INFO,console_test,RFA");
log4j_default.put("hadoop.log.dir", ".");
log4j_default.put("hadoop.log.file", "hadoop.log");
log4j_default.put("log4j.rootLogger", "${hadoop.root.logger}");
log4j_default.put("log4j.threshhold", "ALL");
// console appender
log4j_default.put("log4j.appender.console_test", "org.apache.log4j.ConsoleAppender");
log4j_default.put("log4j.appender.console_test.target", "System.err");
log4j_default.put("log4j.appender.console_test.layout", "org.apache.log4j.PatternLayout");
log4j_default.put("log4j.appender.console_test.layout.ConversionPattern",
"%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n");
// RFA appender
log4j_default.put("log4j.appender.RFA", "org.apache.log4j.RollingFileAppender");
log4j_default.put("log4j.appender.RFA.File", "/dev/null");
log4j_default.put("log4j.appender.RFA.MaxFileSize", "1MB");
log4j_default.put("log4j.appender.RFA.MaxBackupIndex", "30");
log4j_default.put("log4j.appender.RFA.layout", "org.apache.log4j.PatternLayout");
log4j_default.put("log4j.appender.RFA.layout.ConversionPattern",
"%d{ISO8601} %-5p %c{2} - %m%n");
// Construct the final json object consisting for core-site and hdfs-site
JSONObject log4j = new JSONObject();
log4j.put("default", log4j_default);
JSONObject properties_files = new JSONObject();
properties_files.put("log4j", log4j);
JSONObject json = new JSONObject();
json.put("properties_files", properties_files);
return json;
}
@Test
public void testLog4jJsonConfiguration() throws Exception {
JSONObject json = createJSONObject();
new Log4jJSONConfigurator().doConfigure(json, LogManager.getLoggerRepository());
Logger log = LOG.getRootLogger();
assertEquals("failure - level does not match", log.getEffectiveLevel(), Level.INFO);
Appender console_test = log.getAppender("console_test");
assertTrue("failure - no console_test appender configured", console_test != null);
assertEquals("failure - console_test logger has the wrong class", ConsoleAppender.class,
console_test.getClass());
assertEquals("failure - console_test logger target is wrong", "System.err",
((ConsoleAppender) console_test).getTarget());
assertEquals("failure - console_test logger layout is wrong", PatternLayout.class, console_test
.getLayout().getClass());
assertTrue("failure - console_test logger layout.ConversionPattern is wrong",
"%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n".equals(((PatternLayout) console_test.getLayout())
.getConversionPattern()));
Appender rfa = log.getAppender("RFA");
assertTrue("failure - no RFA appender configured", rfa != null);
assertEquals("failure - RFA logger has the wrong class", RollingFileAppender.class,
rfa.getClass());
// assertEquals("failure - RFA logger file is wrong", "./hadoop.log",
// ((RollingFileAppender) rfa).getFile());
assertEquals("failure - RFA logger MaxFileSize is wrong", 1048576l,
((RollingFileAppender) rfa).getMaximumFileSize());
assertEquals("failure - RFA logger MaxBackupIndex is wrong", 30,
((RollingFileAppender) rfa).getMaxBackupIndex());
assertEquals("failure - RFA logger layout is wrong", PatternLayout.class, rfa.getLayout()
.getClass());
assertTrue("failure - RFA logger layout.ConversionPattern is wrong",
"%d{ISO8601} %-5p %c{2} - %m%n".equals(((PatternLayout) rfa.getLayout())
.getConversionPattern()));
}
}