import
java.util.Hashtable;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.BasicConfigurator;
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.springframework.util.StringUtils;
public class LogTest extends HttpServlet ... {
protected final Log log = LogFactory.getLog(getClass());
public static final String ROOT_LOGGER = "root.logger";
public static final String BPM2_OPERATIONLOGGER = "bpm2.operation.logger";
public static final String LEVEL = ".level";
public static final String CONSOLE_ENABLLED = ".console.enabled";
private static Hashtable log4jProperty = new Hashtable();
static...{
//取得默认值
//log4jProperty.put(key, value);
}
public void init() throws ServletException ...{
log.info("Log4JInitializer starting ...");
loadLog4jParameter();
initLog4J();
//initLoggerLevel();
log.info("Log4JInitializer finished!");
}
/** *//**
* 参数准备
*/
private void loadLog4jParameter() ...{
//从数据库或其它地方取得的值
//log4jProperty.put(key, value);
}
/** *//**
* Init the log4j using the parameters. <br>
*
* @throws Exception
*/
private void initLog4J() ...{
try ...{
BasicConfigurator.configure();
Logger rootLogger = LogManager.getRootLogger();
rootLogger.removeAllAppenders();
initLog4JLogger(rootLogger, ROOT_LOGGER);
Logger accessLogger = LogManager.getLogger(AccessLog.class);
accessLogger.setAdditivity(false);
initLog4JLogger(accessLogger, BPM2_OPERATIONLOGGER);
} catch (Exception e) ...{
e.printStackTrace();
}
}
/** *//**
* 各种LOG设定
* @param logger
* @param prefix
* @throws Exception
*/
private void initLog4JLogger(Logger logger, String prefix) throws Exception ...{
// Parse and set the level to logger
if (isParamNotNull(prefix + LEVEL)) ...{
logger.setLevel(Level.toLevel(getStrParam(prefix + LEVEL)));
}
// Parse and set the console appender
if (isParamEqual(prefix + CONSOLE_ENABLLED, "true")) ...{
ConsoleAppender consoleAppender = new ConsoleAppender();
PatternLayout patternLayout = new PatternLayout(
"%-4r [%t] %-5p %c %x - %m%n");
consoleAppender.setLayout(patternLayout);
logger.addAppender(consoleAppender);
patternLayout.activateOptions();
consoleAppender.activateOptions();
}
}
private boolean isParamNotNull(String key) ...{
String result = (String) log4jProperty.get(key);
return StringUtils.hasText(result);
}
private String getStrParam(String key) ...{
String result = (String) log4jProperty.get(key);
if (!StringUtils.hasText(result)) ...{
return "";
}
return result;
}
private boolean isParamEqual(String key, String value) ...{
String result = (String) log4jProperty.get(key);
if (!StringUtils.hasText(result)) ...{
return false;
}
return result.equals(value);
}
}
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.BasicConfigurator;
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.springframework.util.StringUtils;
public class LogTest extends HttpServlet ... {
protected final Log log = LogFactory.getLog(getClass());
public static final String ROOT_LOGGER = "root.logger";
public static final String BPM2_OPERATIONLOGGER = "bpm2.operation.logger";
public static final String LEVEL = ".level";
public static final String CONSOLE_ENABLLED = ".console.enabled";
private static Hashtable log4jProperty = new Hashtable();
static...{
//取得默认值
//log4jProperty.put(key, value);
}
public void init() throws ServletException ...{
log.info("Log4JInitializer starting ...");
loadLog4jParameter();
initLog4J();
//initLoggerLevel();
log.info("Log4JInitializer finished!");
}
/** *//**
* 参数准备
*/
private void loadLog4jParameter() ...{
//从数据库或其它地方取得的值
//log4jProperty.put(key, value);
}
/** *//**
* Init the log4j using the parameters. <br>
*
* @throws Exception
*/
private void initLog4J() ...{
try ...{
BasicConfigurator.configure();
Logger rootLogger = LogManager.getRootLogger();
rootLogger.removeAllAppenders();
initLog4JLogger(rootLogger, ROOT_LOGGER);
Logger accessLogger = LogManager.getLogger(AccessLog.class);
accessLogger.setAdditivity(false);
initLog4JLogger(accessLogger, BPM2_OPERATIONLOGGER);
} catch (Exception e) ...{
e.printStackTrace();
}
}
/** *//**
* 各种LOG设定
* @param logger
* @param prefix
* @throws Exception
*/
private void initLog4JLogger(Logger logger, String prefix) throws Exception ...{
// Parse and set the level to logger
if (isParamNotNull(prefix + LEVEL)) ...{
logger.setLevel(Level.toLevel(getStrParam(prefix + LEVEL)));
}
// Parse and set the console appender
if (isParamEqual(prefix + CONSOLE_ENABLLED, "true")) ...{
ConsoleAppender consoleAppender = new ConsoleAppender();
PatternLayout patternLayout = new PatternLayout(
"%-4r [%t] %-5p %c %x - %m%n");
consoleAppender.setLayout(patternLayout);
logger.addAppender(consoleAppender);
patternLayout.activateOptions();
consoleAppender.activateOptions();
}
}
private boolean isParamNotNull(String key) ...{
String result = (String) log4jProperty.get(key);
return StringUtils.hasText(result);
}
private String getStrParam(String key) ...{
String result = (String) log4jProperty.get(key);
if (!StringUtils.hasText(result)) ...{
return "";
}
return result;
}
private boolean isParamEqual(String key, String value) ...{
String result = (String) log4jProperty.get(key);
if (!StringUtils.hasText(result)) ...{
return false;
}
return result.equals(value);
}
}
然后在WEB.XML文件中增加如下内容
<servlet>
<!-- Log Log4JInitializer -->
<servlet-name>log4j-init</servlet-name>
<servlet-class>jp.co.softbrain.bpm2.core.log.Log4JInitializer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>