做一个产品或者项目,在测试时一般要打印详细的log,发布以后,因为打印有效率问题,所以通常将log4j级别设置为最高,以提高效率,一旦客户那里出了问题,要查看详细的日志信息才能确定,因此打印日志就是很重要的事情,但是让客户手工修改log4j配置文件,不是很好的事情。 修改log4j级别 public class Log4jConfig { public void enableInfo(String target){ LogManager.getLogger(target).setLevel(Level.INFO); } public void enableWarn(String target){ LogManager.getLogger(target).setLevel(Level.WARN); } public void enableError(String target){ LogManager.getLogger(target).setLevel(Level.ERROR) ; } public void enableDebug(String target){ LogManager.getLogger(target).setLevel(Level.DEBUG) ; } } 写个jsp可以很简单的做到,合理使用jstl <%@ page import="org.apache.log4j.*" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=GBK" language="java" %> <html> <head><title>Log4J级别控制</title></head> <meta http-equiv="Content-Type" content="text/html; charset=gbk" /> <body> <h1>Log4J级别控制</h1> <% String logName = request.getParameter("log"); if (null != logName) { Logger log = ("".equals(logName) ? Logger.getRootLogger() : Logger.getLogger(logName)); log.setLevel(Level.toLevel(request.getParameter("level"), Level.DEBUG)); } %> <c:set var="rootLogger" value="<%= Logger.getRootLogger() %>"/> <form> <table border="1"> <tr> <th>Level</th> <th>Logger</th> <th>Set New Level</th> </tr> <tr> <td>${rootLogger.level}</td> <td>${rootLogger.name}</td> <td> <c:forTokens var="level" delims="," items="DEBUG,INFO,WARN,ERROR,OFF"> <a href="log4j.jsp?log=&level=${level}">${level}</a> </c:forTokens> </td> </tr> <c:forEach var="logger" items="${rootLogger.loggerRepository.currentLoggers}"> <c:if test="${!empty logger.level.syslogEquivalent || param.showAll}"> <tr> <td>${logger.level}</td> <td>${logger.name}</td> <td> <c:forTokens var="level" delims="," items="DEBUG,INFO,WARN,ERROR,OFF"> <a href="log4j.jsp?log=${logger.name}&level=${level}">${level}</a> </c:forTokens> </td> </tr> </c:if> </c:forEach> <tr> <td></td> <td><input type="text" name="log"/></td> <td> <select name="level"> <c:forTokens var="level" delims="," items="DEBUG,INFO,WARN,ERROR,OFF"> <option>${level}</option> </c:forTokens> </select> <input type="submit" value="Add New Logger"/></td> </tr> </table> </form> Show <a href="log4j.jsp?showAll=true">所有已知 loggers</a> </body> </html> 如果使用spring 2.0和jmx会很简单 [servletname]-servlet.xml配置 <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter"> <property name="beans"> <map> <entry key="bean:name=logBean" value-ref="/hello.htm" /> </map> </property> </bean> spring加入另外的两个配置 <entry key="bean:name=logBean" value-ref="logManager" /> <bean name="logManager" class="com.xx.Log4JManager"/> 写入 public class Log4JManager { public void setLogger(String packageName, String level) { LogManager.getLogger(packageName).setLevel(Level.toLevel(level)); } } 可以用JConsole 进行控制。 典型的log4j配置文件 # For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml! # For all other servers: Comment out the Log4J listener in web.xml to activate Log4J. log4j.rootLogger=INFO,stdout,logfile log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n log4j.appender.logfile=org.apache.log4j.RollingFileAppender log4j.appender.logfile.File=../../MgrWeb/log/mgrweb.log log4j.appender.logfile.MaxFileSize=1024KB # Keep three backup files. log4j.appender.logfile.MaxBackupIndex=20 # Pattern to output: date priority [category] - message log4j.appender.logfile.layout=org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern=%d %p [%c\:%t\:%l] - %m%n log4j.logger.org.hibernate.SQL=DEBUG 本blog的代码 没有发布在启明星辰的任何产品中 包括utm产品,请大家放心使用。
|