/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.logging; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.File; import java.io.InputStream; import javax.servlet.ServletContextEvent; import org.apache.commons.io.FileUtils; import org.apache.log4j.Appender; import org.apache.log4j.FileAppender; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.geoserver.platform.GeoServerResourceLoader; import org.geoserver.platform.resource.FileSystemResourceStore; import org.geoserver.platform.resource.MemoryLockProvider; import org.junit.Before; import org.junit.Test; import org.springframework.core.io.FileSystemResource; import org.springframework.mock.web.MockServletContext; public class LoggingStartupContextListenerTest { @Before public void cleanupLoggers() { LogManager.resetConfiguration(); } @Test public void testLogLocationFromServletContext() throws Exception { File tmp = File.createTempFile("log", "tmp", new File("target")); tmp.delete(); tmp.mkdirs(); File logs = new File(tmp, "logs"); assertTrue(logs.mkdirs()); FileUtils.copyURLToFile(getClass().getResource("logging.xml"), new File(tmp, "logging.xml")); MockServletContext context = new MockServletContext(); context.setInitParameter("GEOSERVER_DATA_DIR", tmp.getPath()); context.setInitParameter("GEOSERVER_LOG_LOCATION", new File(tmp, "foo.log").getAbsolutePath()); Logger logger = Logger.getRootLogger(); assertNull("Expected geoserverlogfile to be null. But was: "+logger.getAppender("geoserverlogfile"), logger.getAppender("geoserverlogfile")); String rel = System.getProperty(LoggingUtils.RELINQUISH_LOG4J_CONTROL); System.setProperty(LoggingUtils.RELINQUISH_LOG4J_CONTROL, "false"); try { new LoggingStartupContextListener().contextInitialized(new ServletContextEvent(context)); } finally { System.setProperty(LoggingUtils.RELINQUISH_LOG4J_CONTROL, "rel"); } Appender appender = logger.getAppender("geoserverlogfile"); assertNotNull(appender); assertTrue(appender instanceof FileAppender); assertEquals(new File(tmp, "foo.log").getCanonicalPath().toLowerCase(), ((FileAppender)appender).getFile().toLowerCase()); } @Test public void testInitLoggingLock() throws Exception { final File target = new File("./target"); FileUtils.deleteQuietly(new File(target, "logs")); GeoServerResourceLoader loader = new GeoServerResourceLoader(target); FileSystemResourceStore store = (FileSystemResourceStore) loader.getResourceStore(); store.setLockProvider(new MemoryLockProvider()); // make it copy the log files LoggingUtils.initLogging(loader, "DEFAULT_LOGGING.properties", false, null); // init once from default logging LoggingUtils.initLogging(loader, "DEFAULT_LOGGING.properties", false, null); // init twice, here it used to lock up LoggingUtils.initLogging(loader, "DEFAULT_LOGGING.properties", false, null); } }