/**
* Copyright (C) 2009 Orbeon, Inc.
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU Lesser General Public License as published by the Free Software Foundation; either version
* 2.1 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* The full text of the license is available at http://www.gnu.org/copyleft/lesser.html
*/
package org.orbeon.oxf.util;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.xml.DOMConfigurator;
import org.orbeon.oxf.common.OXFException;
import org.orbeon.oxf.pipeline.api.PipelineContext;
import org.orbeon.oxf.processor.DOMSerializer;
import org.orbeon.oxf.processor.Processor;
import org.orbeon.oxf.processor.ProcessorImpl;
import org.orbeon.oxf.properties.Properties;
import org.orbeon.oxf.properties.PropertySet;
public class LoggerFactory {
public static final String LOG4J_DOM_CONFIG_PROPERTY = "oxf.log4j-config";
static
{
// 11-22-2004 d : Current log4j tries to load a default config. This is
// why we are seeing a message about a log4j.properties being
// loaded from the Axis jar.
// Since this isn't a behaviour we want we hack around it by
// specifying a file that doesn't exist.
// 2008-05-05 a : It is clear if this solves a problem with an older version of
// Axis we were shipping with Orbeon Forms back in 2004, or a more
// complex interaction with a particular application server.
// We don't think this is relevant anymore and are commenting this out.
// Also see this thread on ops-users:
// http://www.nabble.com/Problem-with-log-in-orbeon-with-multiple-webapp-tt16932990.html
// System.setProperty( "log4j.configuration", "-there-aint-no-such-file-" );
}
public static final Logger logger = LoggerFactory.createLogger(LoggerFactory.class);
public static Logger createLogger(String name) {
return Logger.getLogger(name);
}
public static Logger createLogger(Class clazz) {
return Logger.getLogger(clazz.getName());
}
/*
* Init basic config until resource manager is setup.
*/
public static void initBasicLogger() {
// 2008-07-25 a This has been here for a long time and it is not clear why it was put there. But this doesn't
// seem to be a good idea, and is causing some problem. So: commenting. See discussion in this thread:
// http://discuss.orbeon.com/Problem-with-log-in-orbeon-with-multiple-webapp-td36786.html
// LogManager.resetConfiguration();
Logger root = Logger.getRootLogger();
root.setLevel(Level.INFO);
root.addAppender(new ConsoleAppender(new PatternLayout(PatternLayout.DEFAULT_CONVERSION_PATTERN), ConsoleAppender.SYSTEM_ERR));
}
/**
* Init log4j. Needs Orbeon Forms Properties system up and running.
*/
public static void initLogger() {
try {
// Accept both xs:string and xs:anyURI types
final PropertySet propertySet = Properties.instance().getPropertySet();
if (propertySet == null)
throw new OXFException("Property set not found.");
final String log4jConfigURL = propertySet.getStringOrURIAsString(LOG4J_DOM_CONFIG_PROPERTY, false);
if (log4jConfigURL != null) {
final Processor urlGenerator = PipelineUtils.createURLGenerator(log4jConfigURL, true);
final DOMSerializer domSerializer = new DOMSerializer();
PipelineUtils.connect(urlGenerator, ProcessorImpl.OUTPUT_DATA, domSerializer, ProcessorImpl.INPUT_DATA);
// Candidate for Scala withPipelineContext
final PipelineContext pipelineContext = new PipelineContext();
boolean success = false;
final org.w3c.dom.Element element;
try {
urlGenerator.reset(pipelineContext);
domSerializer.reset(pipelineContext);
element = domSerializer.runGetW3CDocument(pipelineContext).getDocumentElement();
success = true;
} finally {
pipelineContext.destroy(success);
}
DOMConfigurator.configure(element);
} else {
logger.info("Property " + LOG4J_DOM_CONFIG_PROPERTY + " not set. Skipping logging initialization.");
}
} catch (Throwable e) {
logger.error("Cannot load Log4J configuration. Skipping logging initialization", e);
}
}
}