`

Log4j2手册阅读随笔(Log4j2新特性)

    博客分类:
  • java
阅读更多

1.丢数据这种情况少,可以用来做审计功能。而且自身内部报的exception会被发现,但是logback和log4j不会。

2.log4j2使用了disruptor技术,在多线程环境下,性能高于logback等10倍以上。

3.(garbage free)之前的版本会产生非常多的临时对象,会造成GC频繁,log4j2则在这方面上做了优化,减少产生临时对象。尽可能少的GC

4.利用插件系统,使得扩展新的appender,filter,layout等变得容易,log4j不可以扩展  插件????

5.因为插件系统的简单性,所以在配置的时候,可以不用具体指定所要处理的类型。class

6.可以自定义level

7.Java 8 lambda support for lazy logging

8.Support for Message objects

9.对filter的功能支持的更强大

10.系统日志(Syslog)协议supports both TCP and UDP

11.利用jdk1.5并发的特性,减少了死锁的发生。

Socket LogEvent  SerializedLayout

kafka queue

 

 

一个基本的Log4j2.xml配置:

 

 

<?xml version="1.0" encoding="UTF-8"?>
<!-- 在运行时,可以动态修改配置文件,不用重启服务,在固定时长更新一次配置文件。monitorInterval设置更新配置文件时长, 单位为seconds , min senconds >= 5secondes -->
<Configuration  monitorInterval="30" >

    <Properties>
        <Property name="log.path">E:\log4j2_log\</Property>
    </Properties>

    <Appenders>
        <!-- 控制台appdener-->
        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout    charset="UTF-8" pattern="%m%n"/>
        </Console>

        <!-- File appdener-->
        <File name="MyFile" fileName="logs/app.log" bufferedIO="true" >
            <PatternLayout>
                <Charset>UTF-8</Charset>
                <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
            </PatternLayout>
        </File>

        <!-- RandomAccessFile 性能高于 File-->
        <RandomAccessFile name="MyFile" fileName="logs/RandomAccessFile.log"  >
            <PatternLayout>
                <Charset>UTF-8</Charset>
                <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
            </PatternLayout>
        </RandomAccessFile>

        <!--<RollingFile></RollingFile>-->

        <!--
            注意:一般情况下都使用RollingRandomAccessFile 。
            RollingRandomAccessFile可以按照日志名称的格式进行定期备份,拥有一定的备份策略。
            1.是否压缩备份日志:直接在filePattern属性的文件名称最后加对应的压缩后缀,如gzip压缩用 .gz
        -->
        <RollingRandomAccessFile name="RollingRandomAccessFile" fileName="logs/RollingRandomAccessFile.log"
                                 filePattern="logs/RollingRandomAccessFile-%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout>
                <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
            </PatternLayout>
            <!-- 备份策略:满足其中一个就可以启动备份-->
            <Policies>
                <!-- interval 多久执行一次备份,单位为 RollingRandomAccessFile的属性filePattern中%d{yyyy-MM-dd}的最小时间单位,此处是天-->
                <TimeBasedTriggeringPolicy  interval="1"  modulate="true"/>
                <SizeBasedTriggeringPolicy size="250 MB"/>
            </Policies>
            <!-- 默认的备份策略:max="7"表示最多只保留7份日志,fileIndex属性是在拥有多个备份日志的时候,命令是以递增的数为文件名,max值时值大的文件是最新的内容,min值时值大的是最久的内容-->
            <DefaultRolloverStrategy  fileIndex="max" max="7">
                <!-- 删除指定目录下60天之前的日志-->
                <Delete basePath="${log.path}" maxDepth="2">
                    <IfFileName glob="*/app-*.log.gz" />
                    <IfLastModified age="60d" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingRandomAccessFile>

        <!-- 异步 appder  ,使用的是ArrayBlocingQueue -->
        <Async name="Async">
            <AppenderRef ref="MyFile"/>
        </Async>

    </Appenders>

    <Loggers>
        <Root level="error">
            <AppenderRef ref="MyFile"/>
        </Root>

        <!-- logger
        additivity属性:如果设置为true(默认值)则log会被打印两次,这里的logger和root-->
        <Logger name="com.foo.bar.MyApp" level="info" additivity="true">
            <appender-ref ref="RandomAccessFile"/>
        </Logger>

        <!-- 异步 logger:使用了disruptor类库,代替Jdk中的queue,性能提高很多
        includeLocation属性是指layout中的  %C or $class, %F or %file, %l or %location, %L or %line, %M or %method,异步logger默认为false,如果设置为true,会影响logger的性能
        -->
        <AsyncLogger name="com.foo.test" level="info" additivity="false" includeLocation="false">
            <appender-ref ref="log4j2test"/>
            <appender-ref ref="STDOUT"/>
        </AsyncLogger>
    </Loggers>
</Configuration>

 

 

 

 

 

 

 

使用文档: 文档下载

用户手册:下载

 

 

 

 

 

 

 

官网 http://logging.apache.org/log4j/2.x/

0
1
分享到:
评论
1 楼 code4bread 2017-03-09  
logs/RollingRandomAccessFile-%d{yyyy-MM-dd}-%i.log.gz中的%i是什么意思啊,还有能不能在日志文件的路径上加日期?

相关推荐

Global site tag (gtag.js) - Google Analytics