本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告

戒除浮躁,读好书,交益友


我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:邢红瑞的blog
日志总数:523
评论数量:1142
留言数量:0
访问次数:9692753
建立时间:2004年12月20日




[j2ee]动态改变log4j的运行级别
原创空间,  文章收藏,  软件技术,  电脑与网络

邢红瑞 发表于 2007/5/22 10:41:41

 做一个产品或者项目,在测试时一般要打印详细的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.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n log4j.appender.logfile=org.apache.log4j.RollingFileAppenderlog4j.appender.logfile.File=../../MgrWeb/log/mgrweb.loglog4j.appender.logfile.MaxFileSize=1024KB# Keep three backup files.log4j.appender.logfile.MaxBackupIndex=20# Pattern to output: date priority [category] - messagelog4j.appender.logfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.logfile.layout.ConversionPattern=%d %p [%c\:%t\:%l] - %m%n log4j.logger.org.hibernate.SQL=DEBUG 本blog的代码 没有发布在启明星辰的任何产品中 包括utm产品,请大家放心使用。


阅读全文(5128) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.063 second(s), page refreshed 144767065 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号