• logback 简单配置总述


           近来有一个系统日志分模块输出的需求。

    事实上需求非常easy,仅仅是第一次使用slf4j+logback的日志架构。

    故參照了非常多博客和一些实例进行配置和測试。

    在測试过程中发现网上有非常多配置是错误的,有非常多是误导的,故将自己前前后后,反重复复測试了非常多遍,最后完美通过的实例拿上来和大家分享一下。

           一、主要标签释义(由于都能够在网上查找到,我仅仅列举几个重要的和我用到的)

    1.configuration。是整个配置文件的父标签。有三个属性,我用到的是debug。默认false,由于途中须要看调试信息,查看配置是否有错误,故将该属性设置为true。

    2.appender。负责写日志的组件。必要属性name指定appender的名称(能够自己定义);class指定appender的全限定名。

    appender有几种现实方式。较为经常使用的有三种。

    (1)ConsoleAppender是把日志打印到控制台。

    由于我做的日志系统没有这部分打印需求,故没有使用。

    (2)FileAppender把日志打印到文件。能够实现结尾追加。也能够不结尾追加。

    (3)RollingFileAppender滚动记录日志。先将日志记录到指定文件。当符合某个条件的时候将日志记录到其它文件。由于我的需求使用的是该方式实现。

    故重点讲该方式。

    3.logger。该标签是子域,设定某包下的日志输出路径。

    关键属性是additivity,默觉得true,为true时则表明向上级结构输出。

    4.root。该标签为父域,为根的意思。是logger的父。

           二、滚动生成日志策略实现

    主要是实现日志的按天生成日志,旧日志会自己主动压缩备份。同一时候假设当天的日志文件大小超过1g。则自己主动创建新日志文件,旧日志文件进行压缩备份。

    <appender name="FRONT-FILE"
    		class="ch.qos.logback.core.rolling.RollingFileAppender">
    		<file>${LOG_HOME}/front/front.log</file>
    		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    			<fileNamePattern>${LOG_HOME}/front/front.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
    			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    				<maxFileSize>1024MB</maxFileSize>
    			</timeBasedFileNamingAndTriggeringPolicy>
    			<maxHistory>30</maxHistory>
    		</rollingPolicy>
    		<layout class="ch.qos.logback.classic.PatternLayout">
    			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{55} -
    				%msg%n
    			</pattern>
    		</layout>
    	</appender>
    对于这里的注意点有两个:

    (1)网上非常多网页误导人的一句是这里:

    <fileNamePattern>${LOG_HOME}/front/front.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
    丢写了%i。这样会导致每次都会覆盖原来文件。并没有达到备份的效果。
    (2)时间和大小共同制约的策略实现。

    有一些人是这样配置的(这种方式是实现不了目的的):

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    			<fileNamePattern>${LOG_HOME}/front/front.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
    			<maxHistory>30</maxHistory>
    		</rollingPolicy>
    		<layout class="ch.qos.logback.classic.PatternLayout">
    			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{55} -
    				%msg%n
    			</pattern>
    		</layout>
     

    
    
    <triggeringPolicy
    		class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
    			<MaxFileSize>30MB</MaxFileSize>
    		</triggeringPolicy>
    使用triggeringPolicy标签来实现。事实证明,这个是logback的一个bug,是实现不了。所以要务必注意。


               三、日志多模块输出

    一般日志会要求业务进行单独输出,这种话能够理解为一个业务模块相应一个日志,多个业务模块相应不同日志。

    <appender name="FRONT-FILE"
    		class="ch.qos.logback.core.rolling.RollingFileAppender">
    		<file>${LOG_HOME}/front/front.log</file>
    		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    			<fileNamePattern>${LOG_HOME}/front/front.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
    			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    				<maxFileSize>1024MB</maxFileSize>
    			</timeBasedFileNamingAndTriggeringPolicy>
    			<maxHistory>30</maxHistory>
    		</rollingPolicy>
    		<layout class="ch.qos.logback.classic.PatternLayout">
    			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{55} -
    				%msg%n
    			</pattern>
    		</layout>
    	</appender>
    	
    	<appender name="GOODS-FILE"
    		class="ch.qos.logback.core.rolling.RollingFileAppender">
    		<file>${LOG_HOME}/goods/goods.log</file>
    		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    			<FileNamePattern>${LOG_HOME}/goods/goods.%d{yyyy-MM-dd}.%i.log.zip</FileNamePattern>
    			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    				<maxFileSize>1024MB</maxFileSize>
    			</timeBasedFileNamingAndTriggeringPolicy>
    			<maxHistory>30</maxHistory>
    		</rollingPolicy>
    		<layout class="ch.qos.logback.classic.PatternLayout">
    			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{55} -
    				%msg%n
    			</pattern>
    		</layout>
    	</appender>
    <logger name="com.test.goods" level="INFO" additivity="false">
     <appender-ref ref="GOODS-FILE"/>
    </logger>
    
    <root level="INFO">
     <appender-ref ref="FRONT-FILE" />
    </root>

    须要注意的是logger中的additivity属性。设置成为false。

    这样该模块的日志则不会在root模块的日志同步输出了!

    这样配置就能实现多模块输出了。以goods模块为模版,进行多模版配置就可以。与相关业务相关的日志会打印到各自的日志中,与业务无关的日志则会打印到FRONT-FILE日志中。

    希望对大家有些用处,共勉。


  • 相关阅读:
    asp.net发送email
    把GridView控件完全放入UpdatePanel中时,实现了点击编辑、更新等按钮时,页面不再刷新,对话框不起作用
    【原】 POJ 2352 Stars 树状数组 解题报告
    【原】 POJ 2739 Sum of Consecutive Prime Numbers 筛素数+积累数组 解题报告
    【原】 POJ 2262 Goldbach's Conjecture 筛素数 解题报告
    【原】 POJ 2593 Max Sequence 动态规划 解题报告
    【原】 POJ 2159 Tree Recovery 解题报告
    【原】 POJ 3067 Japan 2D树状数组+逆序数 解题报告
    【原】 POJ 2299 UltraQuickSort 逆序数 解题报告
    【原】 POJ 2499 Binary Tree 优化经典 解题报告
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10945705.html
Copyright © 2020-2023  润新知