学习笔记-LogBack日志框架

配置logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--
 scan属性:默认为true,Logback将会扫描配置文件,如果配置文件发生改变时,会自动加载
 scanPeriod属性:Logback扫描配置文件时间间隔,默认单位为毫秒,可配置单位为毫秒、秒、分、时 milliseconds, seconds, minutes or hours
 debug属性:默认为false,是否打印Logback内部信息,当为true时可以查看Logback的运行信息
 packagingData属性:默认false,在打印异常堆栈时是否打印相关包信息
-->
<configuration 
  		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://www.padual.com/java/logback.xsd"
	    scan="true" scanPeriod="60 seconds" debug="false" packagingData="true">
    <!-- 定义参数变量 -->
    <property name="APP_NAM" value="logback_demo" />
    <!-- 日志级别参数 -->
    <property name="log.level" value="debug" />
    <!-- 文件保留时间 -->
    <property name="log.maxHistory" value="30" />
    <!-- 文件大小 -->
    <property name="log.maxSize" value="4MB"/>
	<!-- 日志文件是否覆盖 -->
    <property name="log.append" value="true"/>
    <!-- 日志输出编码 -->
    <property name="log.encode" value="UTF-8" />
    <!-- 日志存储路径 -->
    <property name="log.filePath" value="c:/log" />
    
    <!-- 日志的显式格式 -->
    <property name="log.pattern"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n"></property>

    <!--配置logger上下文名称,默认名称为default,用于区分不同应用程序的日志记录-->
    <contextName>${APP_NAM}</contextName>
    <!--获取时间戳字符串 key为名称  datePattern为将解析配置文件的时间作为当前时间格式化的标准-->
    <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>


    <!-- consoleAppender:控制台输出 -->
    <appender name="STDOUT"
              class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoder:对日志日期格式化,类似于layout,除了将时间转化为数组,还会将转换后的数组输出到相应的文件中 -->
        <encoder>
            <!-- 定义日志的输出格式 -->
            <pattern>${log.pattern}</pattern>
            <!-- 设置信息编码 -->
            <charset>${log.encode}</charset>
        </encoder>
    </appender>


    <!-- 文件输出策略设置 -->
    <appender  name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件路径 -->
        <file>${log.filePath}/logback_debug.log</file>
        <!-- 日志输出格式设置-->
        <encoder>
            <!-- 输出格式设置 -->
            <pattern>${log.pattern}</pattern>
            <!-- 编码设置 -->
            <charset>${log.encode}</charset>
        </encoder>
        <!--TimeBasedRollingPolicy:配置日志所生成的目录以及生成文件名的规则 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 设置文件名称 -->
            <fileNamePattern>
                ${log.filePath}/logback/logback_debug-%d{yyyy-MM-dd}.%i.log.zip
            </fileNamePattern>
            <!-- 写入文件方式 -->
            <append>${log.append}</append>
            <!-- 设置最大保存周期 -->
            <MaxHistory>${log.maxHistory}</MaxHistory>
            <!-- 日志总保存量为10GB -->
            <totalSizeCap>10GB</totalSizeCap>

            <!-- 策略触发器:告知 RollingFileAppender 合适激活滚动 -->
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--文件达到 最大值时会被压缩和切割 -->
                <maxFileSize>${log.maxSize}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 过滤器,过滤掉不是指定日志水平的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 设置日志级别 -->
            <level>DEBUG</level>
            <!-- 如果跟该日志水平相匹配,则接受 -->
            <onMatch>ACCEPT</onMatch>
            <!-- 如果跟该日志水平不匹配,则过滤掉 -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 文件输出策略设置 -->
    <appender  name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件路径 -->
        <file>${log.filePath}/logback_info.log</file>
        <!-- 日志输出格式设置-->
        <encoder>
            <!-- 输出格式设置 -->
            <pattern>${log.pattern}</pattern>
            <!-- 编码设置 -->
            <charset>${log.encode}</charset>
        </encoder>
        <!--TimeBasedRollingPolicy:配置日志所生成的目录以及生成文件名的规则 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 设置文件名称 -->
            <fileNamePattern>
                ${log.filePath}/logback/logback_info-%d{yyyy-MM-dd}.%i.log.zip
            </fileNamePattern>
            <!-- 写入文件方式 -->
            <append>${log.append}</append>
            <!-- 设置最大保存周期 -->
            <MaxHistory>${log.maxHistory}</MaxHistory>
            <!-- 日志总保存量为10GB -->
            <totalSizeCap>10GB</totalSizeCap>

            <!-- 策略触发器:告知 RollingFileAppender 合适激活滚动 -->
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--文件达到 最大值时会被压缩和切割 -->
                <maxFileSize>${log.maxSize}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 过滤器,过滤掉不是指定日志水平的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 设置日志级别 -->
            <level>DEBUG</level>
            <!-- 如果跟该日志水平相匹配,则接受 -->
            <onMatch>ACCEPT</onMatch>
            <!-- 如果跟该日志水平不匹配,则过滤掉 -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 文件输出策略设置 -->
    <appender  name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件路径 -->
        <file>${log.filePath}/logback_fixed.log</file>
        <!-- 日志输出格式设置-->
        <encoder>
            <!-- 输出格式设置 -->
            <pattern>${log.pattern}</pattern>
            <!-- 编码设置 -->
            <charset>${log.encode}</charset>
        </encoder>
        <!--FixedWindowRollingPolicy:设置为按照索引的方式滚动,定义文件名称的时候使用%i作为占位符,滚动后会会用角标替换 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${log.filePath}/logback_fixed-%i.log</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>3</maxIndex>
        </rollingPolicy>
        <!-- 指定文件最大尺寸,达到该尺寸,就触发rollingPolicy对应的策略,maxFileSize属性指定文件大小 -->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>${log.maxSize}</maxFileSize>
        </triggeringPolicy>
        <!-- 过滤器,过滤掉不是指定日志水平的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 设置日志级别 -->
            <level>INFO</level>
            <!-- 如果跟该日志水平相匹配,则接受 -->
            <onMatch>ACCEPT</onMatch>
            <!-- 如果跟该日志水平不匹配,则过滤掉 -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--Logger节点,最顶级-->
    <root level = "INFO"><!-- 日志输出级别 -->
        <appender-ref ref="STDOUT" /><!-- 控制台 -->
		<appender-ref ref="FILE" /><!-- 文件 -->
    </root>

</configuration>

LogAdvice

@Aspect
@Component
public class LogAdvice {
	private static Logger logger = LoggerFactory.getLogger(LogAdvice.class);
	@Before("execution(* com.zhang.controller.*.*(..))")
	public void methodBefore(JoinPoint joinpoint) {
		//System.out.println("-------------------【前置通知】-------------------");
		logger.debug("--------------------------【前置通知】------------------------------");
		logger.info("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
		logger.warn("------------------------------------");
	}

日志结果

08:57:13.365 [main] INFO org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization started
08:57:13.459 [main] DEBUG org.springframework.web.context.support.AnnotationConfigWebApplicationContext - Refreshing Root WebApplicationContext
08:57:13.782 [main] DEBUG org.springframework.web.context.support.AnnotationConfigWebApplicationContext - Registering component classes: [class com.zhang.AppRootConfig]
08:57:14.043 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalConfigurationAnnotationProcessor'
08:57:14.283 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\15288\Desktop\spring1\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\data-show-system\WEB-INF\classes\com\zhang\RedisConfig.class]
08:57:14.302 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\15288\Desktop\spring1\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\data-show-system\WEB-INF\classes\com\zhang\controller\IndexContoller.class]
08:57:14.303 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\15288\Desktop\spring1\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\data-show-system\WEB-INF\classes\com\zhang\controller\ListBookController.class]
08:57:14.304 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\15288\Desktop\spring1\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\data-show-system\WEB-INF\classes\com\zhang\controller\LoginController.class]
08:57:14.305 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\15288\Desktop\spring1\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\data-show-system\WEB-INF\classes\com\zhang\controller\ThreeDataContoller.class]
08:57:14.314 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\15288\Desktop\spring1\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\data-show-system\WEB-INF\classes\com\zhang\logger\LogAdvice.class]
08:57:14.319 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\15288\Desktop\spring1\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\data-show-system\WEB-INF\classes\com\zhang\service\IDateServiceImpl.class]
08:57:14.920 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerProcessor'
08:57:14.926 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerFactory'
08:57:14.930 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalAutowiredAnnotationProcessor'
08:57:14.940 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalCommonAnnotationProcessor'
08:57:14.959 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.aop.config.internalAutoProxyCreator'
08:57:15.329 [main] DEBUG org.springframework.ui.context.support.UiApplicationContextUtils - Unable to locate ThemeSource with name 'themeSource': using default [org.springframework.ui.context.support.ResourceBundleThemeSource@387bbd7a]
08:57:15.332 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'appRootConfig'
08:57:15.429 [main] DEBUG org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory - Found AspectJ method: public void com.zhang.logger.LogAdvice.methodBefore(org.aspectj.lang.JoinPoint)
08:57:15.434 [main] DEBUG org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory - Found AspectJ method: public void com.zhang.logger.LogAdvice.methodAfter(org.aspectj.lang.JoinPoint)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值