/* * Copyright 2006 Holger West, Ralf Joachim * * 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 log4j; import java.net.URL; import java.sql.Connection; import java.sql.Statement; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.log4j.xml.DOMConfigurator; import org.exolab.castor.jdo.Database; import org.exolab.castor.jdo.JDOManager; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; /** * Test for <code>CastorAppender</code> to showcase its usage. * * @author <a href="mailto:holger.west@syscon-informatics.de">Holger West</a> */ public final class TestCastorAppender extends TestCase { // ----------------------------------------------------------------------------------- /** The <a href="http://jakarta.apache.org/commons/logging/">Jakarta Commons * Logging </a> instance used for all logging. */ private static final Log LOG = LogFactory.getLog(TestCastorAppender.class); /** Example JDO configuration. */ private static final String JDO_CONF = "/log4j/example-jdo-conf.xml"; /** Example LOG4J configuration. */ private static final String XML_CONF = "/log4j/example-log4j.xml"; // ----------------------------------------------------------------------------------- /** * Initialize LOG4J logging with example configuration and create JUNIT test suite. * * @return JUNIT test suite. */ public static Test suite() { // load specific resource for testing URL url = TestCastorAppender.class.getResource(XML_CONF); DOMConfigurator.configure(url); TestSuite suite = new TestSuite("CastorAppender tests"); suite.addTest(new TestCastorAppender("testAppender")); return suite; } // ----------------------------------------------------------------------------------- /** * Constructs a new TestCase with the given name. * * @param name The name for the test. */ public TestCastorAppender(final String name) { super(name); } // ----------------------------------------------------------------------------------- public void setUp () throws Exception { JDOManager.loadConfiguration( TestCastorAppender.class.getResource(JDO_CONF).toString()); JDOManager jdo = JDOManager.createInstance("LOGGING"); Database db = jdo.getDatabase(); db.begin(); Connection connection = db.getJdbcConnection(); Statement statement = connection.createStatement(); statement.executeUpdate("DROP TABLE LOG_EXTENSION"); statement.executeUpdate("DROP TABLE LOG_EXCEPTION"); statement.executeUpdate("DROP TABLE LOG"); statement.executeUpdate("CREATE TABLE LOG (LOG_ID INT NOT NULL, " + " LOG_TIMESTAMP TIMESTAMP NOT NULL, " + " LOG_CLASS VARCHAR ( 100) NOT NULL, " + " LOG_LEVEL VARCHAR ( 10) NOT NULL, " + " LOG_THREAD VARCHAR ( 100) NOT NULL, " + " LOG_MESSAGE VARCHAR (1000) DEFAULT NULL, " + " LOG_COUNT INT NOT NULL)"); statement.executeUpdate("ALTER TABLE LOG ADD PRIMARY KEY (LOG_ID)"); statement.executeUpdate("CREATE TABLE LOG_EXCEPTION ( " + " LOGE_ID INT NOT NULL, " + " LOGE_LOG_ID INT NOT NULL, " + " LOGE_STACKTRACE BLOB NOT NULL)"); statement.executeUpdate("ALTER TABLE LOG_EXCEPTION ADD PRIMARY KEY (LOGE_ID)"); statement.executeUpdate("ALTER TABLE LOG_EXCEPTION ADD CONSTRAINT FK_LOGE_LOG_ID" + " FOREIGN KEY (LOGE_LOG_ID) REFERENCES LOG (LOG_ID)"); statement.executeUpdate("CREATE TABLE LOG_EXTENSION (LOGX_LOG_ID INT NOT NULL, LOGX_TYPE VARCHAR(100) NOT NULL, LOGX_VALUE VARCHAR(100) NOT NULL)"); statement.executeUpdate("ALTER TABLE LOG_EXTENSION ADD PRIMARY KEY (LOGX_LOG_ID)"); statement.executeUpdate("ALTER TABLE LOG_EXTENSION ADD CONSTRAINT FK_LOGX_LOG_ID " + " FOREIGN KEY (LOGX_LOG_ID) REFERENCES LOG (LOG_ID)"); statement.executeQuery("select count(*) from LOG"); db.commit(); db.close(); } /** * Test CastorAppender for LOG4J. * * @throws Exception If anything went wrong in the test. */ public void testAppender() throws Exception { // JDOManager.loadConfiguration( // TestCastorAppender.class.getResource(JDO_CONF).toString()); try { Integer.parseInt("cc"); } catch (Exception e) { LOG.error("exception", e); } LOG.error(null); LOG.warn("This is only a message"); LogReferenceExtension ext = new LogReferenceExtension(); ext.setMessage("this is an extension"); ext.setType(this.getClass().toString()); ext.setValue("123456789"); LOG.error(ext); // flush the buffer before exit !!!! CastorAppender.flush(); } // ----------------------------------------------------------------------------------- }