当前位置:首页 > JavaServer Page > 正文内容

动态改变log4j的运行级别

canca17年前 (2009-02-03)JavaServer Page371

 做一个产品或者项目,在测试时一般要打印详细的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产品,请大家放心使用。

扫描二维码推送至手机访问。

版权声明:本文由Ant.Master's Blog发布,如需转载请注明出处。

本文链接:https://iant.work/post/339.html

标签: JavaServer Page
分享给朋友:

“动态改变log4j的运行级别” 的相关文章

JBoss,Tomcat 中文URL支持方法

JBOSS 找到jboss4的deploy\jbossweb-tomcat50.sar\server.xml,编辑该文件,在下面的XML节点中增加红色的字<Connector port="8080" address="${jboss.bind.address}"  &nbs...

在web.xml不认<taglib>解决办法

在web.xml不认<taglib>解决办法: 如果是头是这样的<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application&n...

<html:select>设置默认值

在ActionFrom的reset方法里赋初值就可以,这样不管是调用的action或jsp都会先调用reset方法。...

struts,ajax乱码解决方案

乱码问题好像跟我们中国程序员特别有缘,一直困扰着我们,从开始的JSP乱码问题,STRUTS乱码问题,到现在的AJAX乱码问题,无一不是搞得许多程序员焦头烂额的,整天骂XXX产品对中文支持不了,UTF-8无法使用中文啊什么的,其实这里面被骂的产品中其实99%以上是对中文支持非常好的,而出现乱码的原...

浏览网页时的错误代号

① 客户方错误    100  继续    101  交换协议  ② 成功    200  OK    201  已创建 &nbs...

session监听器

HttpSessionBindingListener:                     在把实现了...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。