读书人

log4j日记输出性能优化-缓存、异步

发布时间: 2013-04-20 19:43:01 作者: rapoo

log4j日志输出性能优化-缓存、异步

  1. log4j.appender.A3.BufferedIO=true
  2. #Buffer单位为字节,默认是8K,IO BLOCK大小默认也是8K
  3. log4j.appender.A3.BufferSize=8192


以上配置说明,当日志内容达到8k时,才会将日志输出到日志输出目的地。

  1. <appender name="DRFOUT"...

    5)使用异步输出 org.apache.log4j.AsyncAppender,异步输出必须使用xml方式配置才能支持,我把上面properties形式的配置文件用xml表达一下:

    <?xml version="1.0" encoding="UTF-8"?>
    <log4j:configuration?debug="true">

    <appender?name="stdout"
    class="org.apache.log4j.ConsoleAppender">
    <layout?class="org.apache.log4j.PatternLayout">
    <param?name="ConversionPattern"?value="%d (%F:%L) %-5p %c - %m%n"?/>
    </layout>
    </appender>

    <appender?name="fileout"
    class="org.apache.log4j.DailyRollingFileAppender">
    <layout?class="org.apache.log4j.PatternLayout">
    <param?name="ConversionPattern"?value="%d [%t] (%F:%L) %-5p %c - %m%n"?/>
    </layout>
    <param?name="File"
    value="logs/server_log.txt"?/>
    </appender>

    <appender?name="monitorAppender"
    class="org.apache.log4j.DailyRollingFileAppender">
    <layout?class="org.apache.log4j.PatternLayout">
    <param?name="ConversionPattern"?value="%m%n"?/>
    </layout>
    <param?name="DatePattern"?value="'.'yyyy-MM-dd-HH"?/>?
    <param?name="File"?value="mtlogs/mt_log.txt"?/>
    <param?name="BufferedIO"?value="true"?/>
    <!--?8K为一个写单元?-->
    <param?name="BufferSize"?value="8192"?/>
    </appender>

    <appender?name="async"?class="org.apache.log4j.AsyncAppender">
    <appender-ref?ref="monitorAppender"/>
    </appender>

    <root>
    <priority?value="error"?/>
    <appender-ref?ref="stdout"?/>
    <appender-ref?ref="fileout"?/>
    </root>

    <category?name="com.danga.MemCached">
    <priority?value="error"?/>
    <appender-ref?ref="fileout"?/>
    </category?>

    <category?name="com.opensymphony">
    <priority?value="error"?/>
    <appender-ref?ref="fileout"?/>
    </category?>

    <category?name="monitorLogger"?additivity="false">
    <priority?value="info"?/>
    <appender-ref?ref="async"?/>
    </category?>
    </log4j:configuration>

    配置中红色的部分就是用于支持异步输出的,在用jmeter测试的过程中发觉使用异步方式,工作的不是很稳定。性能的提升也不显著。所以最后并没有采用。

    InputStream in=null;
    try?{
    in = Log4jConfigLocator.class.getResourceAsStream(fileName);
    if(fileName.endsWith(".xml")){
    //载入XML格式的配置文件
    Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(in);
    DOMConfigurator.configure(doc.getDocumentElement());
    }else{
    //载入properties格式的配置文件
    Properties props =?new?Properties();
    props.load(in);
    PropertyConfigurator.configure(props);
    }

读书人网 >软件开发

热点推荐