/*
* Copyright (c) 2002-2012 Alibaba Group Holding Limited.
* All rights reserved.
*
* Licensed 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 com.alibaba.citrus.logconfig;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import java.net.URL;
import com.alibaba.citrus.logconfig.log4j.Log4jConfigurator;
import org.junit.Test;
public class Log4jConfiguratorTests extends AbstractLogConfiguratorTests {
@Test
public void getConfigurator_autoDiscovery() throws Exception {
invokeInLoader("log4j", "getConfigurator");
}
@Test
public void getConfigurator_withName() throws Exception {
invokeInLoader("log4j", "getConfigurator", (String) null);
invokeInLoader("log4j", "getConfigurator", " "); // trimming to null
invokeInLoader("log4j", "getConfigurator", "loG4j"); // case insensitive
}
@Test
public void getConfigurator_wrongContext() throws Exception {
// 在logback的环境中,创建log4j,成功,但打印警告。
invokeInLoader("logback", "getConfigurator", "log4j");
assertThat(err, containsString("WARN: The current logging system [logback] used by SLF4J may not be configured, " +
"because it is not in the configuration list: [log4j]."));
}
@SuppressWarnings("unused")
private void getConfigurator() throws Exception {
LogConfigurator configurator = LogConfigurator.getConfigurator();
assertThat(configurator, instanceOf(Log4jConfigurator.class));
}
@SuppressWarnings("unused")
private void getConfigurator(String logSystem) throws Exception {
LogConfigurator configurator = LogConfigurator.getConfigurator(logSystem);
assertThat(configurator, instanceOf(Log4jConfigurator.class));
}
@Test
public void configureDefault_debug() throws Exception {
invokeInLoader("log4j", "configureDefault", true);
assertThat(out, containsString("test trace"));
assertThat(out, containsString("test debug"));
assertThat(out, containsString("test info"));
assertThat(out, not(containsString("test warn")));
assertThat(out, not(containsString("test error")));
assertThat(err, not(containsString("test trace")));
assertThat(err, not(containsString("test debug")));
assertThat(err, not(containsString("test info")));
assertThat(err, containsString("test warn"));
assertThat(err, containsString("test error"));
}
@Test
public void configureDefault_noDebug() throws Exception {
invokeInLoader("log4j", "configureDefault", false);
assertThat(out, not(containsString("test trace")));
assertThat(out, not(containsString("test debug")));
assertThat(out, containsString("test info"));
assertThat(out, not(containsString("test warn")));
assertThat(out, not(containsString("test error")));
assertThat(err, not(containsString("test trace")));
assertThat(err, not(containsString("test debug")));
assertThat(err, not(containsString("test info")));
assertThat(err, containsString("test warn"));
assertThat(err, containsString("test error"));
}
@SuppressWarnings("unused")
private void configureDefault(Boolean debug) throws Exception {
LogConfigurator configurator = LogConfigurator.getConfigurator();
if (debug == null) {
configurator.configureDefault();
} else {
configurator.configureDefault(debug);
}
log();
}
@Test
public void configure_failure() throws Exception {
invokeInLoader("log4j", "configure", (URL) null);
assertThat(err, containsString("WARN: Failed to configure log4j using null"));
assertThat(err, containsString("NullPointerException"));
}
@Test
public void configure() throws Exception {
invokeInLoader("log4j", "configure", getClass().getClassLoader().getResource("META-INF/my-log4j.xml"));
assertThat(err, containsString("INFO: configuring \"log4j\" using "));
assertThat(err, containsString("META-INF/my-log4j.xml"));
assertThat(out, not(containsString("test trace")));
assertThat(out, not(containsString("test debug")));
assertThat(out, containsString("test info"));
assertThat(out, containsString("test warn"));
assertThat(out, containsString("test error"));
}
@SuppressWarnings("unused")
private void configure(URL configFile) throws Exception {
LogConfigurator configurator = LogConfigurator.getConfigurator("log4j");
configurator.configure(configFile, configurator.getDefaultProperties());
log();
}
}