• 校园商铺-2Logback配置与使用-2Logback配置


    logback配置文件加载顺序
    logback:程序在运行的时候,会按照一定的顺序去加载logbook相关的配置文件。
    如果我们在配置里面制定了logbackConfigurationFile这个属性,将使用这个属性的地址去寻找相关的配置文件,如

    java-Dlogback.configurationFile=xxxx/xxx.xml
    

    传入一个参数-DlogbackConfigurationFile并指定配置文件的路径,在启动的时候就会优先加载这个配置里面的路径
    如果没有配置这个属性的话,将会加载classpath下的logback.grove文件。
    如果也没找到logbook.grove这个文件,会加载同级目录下的logback_test.xml文件。
    如果也没有,会加载classpath下的logback.xml文件。
    如果上述的配置文件都没有找到:

    • JDK≥1.6会调用ServiceLoad的去查找com.qos.logback.classic.spi.Configurator。在这个类上边硬编码响应的配置,就会调用这个类去做相应的配置了
    • JDK<1.6,会调用com.qos.logback.classic.BasicConfiguration实现类,这个实现类的功能就是在控制台里面直接输出日志,即appender指定控制台

    logback不做配置,也不会报错,只是日志,会直接输出到控制台当中了。

    新建/src/main/resources/logback.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true" scanPeriod="60 seconds"
    	debug="false">
    	<!-- 当scan的属性设置为true的时候,配置文件如果发生改变,该文件将会被重新加载。 -->
    	<!-- scanPeriod:检测配置文件是否有修改的时间间隔。默认1分钟,默认单位是毫秒 -->
    	<!-- debug如果设置为true,它将打印出logback内部的日志信息,实时查看logback的运行状态。因为logback很稳定了,因此设置为false -->
    	<!---定义参数常量 -->
    	<!-- TRACE < DEBUG < INFO < WARN < ERROR -->
    	<!--logger.trace("msg") logger.debug... -->
    	<property name="log.level" value="debug" />
    	<!-- 日志最大保存数量 -->
    	<property name="log.maxHistory" value="30" />
    	<!-- 日志存储根路径,通过查看服务启动日志可以得到 -->
    	<property name="log.filePath"
    		value="${catalina.base}/logs/webapps" />
    	<property name="log.pattern"
    		value="%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread]%-5level%logger{50}-%msg%n" />
    	<!--控制台设置 -->
    	<appender name="consoleAppender"
    		class="ch.qos.logback.core.ConsoleAppender">
    		<!-- 类似layout,但layout仅仅是将一个event时间转换成一个字符串的功能。encoder出了event时间转换成byte数组,还会将转换后的byte数组输出到文件中。即encoder既负责转换字符串,由负责保存 -->
    		<encoder>
    			<pattern>${log.pattern}</pattern>
    		</encoder>
    	</appender>
    	<!--debug -->
    	<appender name="debugAppender"
    		class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 随着size的增大滚动出新的日志,或随着日期变化,滚出新的日志文件-->
    		<!--文件路径 -->
    		<file>${log.filePath}/debug.log</file>
    		<!-- 滚动策略 -->
    		<rollingPolicy 
    			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    			<!--随着日期的变化,非当日的日志会被打包成.gz文件 -->
    			<fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz
    			</fileNamePattern>
    			<!--文件最大保存数量 -->
    			<maxHistory>${log.maxHistory}</maxHistory>
    		</rollingPolicy>
    		<encoder>
    			<pattern>${log.pattern}</pattern>
    		</encoder>
    		<filter class="ch.qos.logback.classic.filter.LevelFilter">
    			<level>DEBUG</level>
    			<onMatch>ACCEPT</onMatch>
    			<onMismatch>DENY</onMismatch><!-- 如果忽略onMismatch,level和onMatch也不能生效,将保存全部的日志。 -->
    		</filter>
    	</appender>
    	<!--info -->
    	<appender name="infoAppender"
    		class="ch.qos.logback.core.rolling.RollingFileAppender">
    		<!--文件路径 -->
    		<file>${log.filePath}/info.log</file>
    		<rollingPolicy
    			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    			<!--文件名称 -->
    			<fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz
    			</fileNamePattern>
    			<!--文件最大保存数量 -->
    			<maxHistory>${log.maxHistory}</maxHistory>
    		</rollingPolicy>
    		<encoder>
    			<pattern>${log.pattern}</pattern>
    		</encoder>
    		<filter class="ch.qos.logback.classic.filter.LevelFilter">
    			<level>INFO</level>
    			<onMatch>ACCEPT</onMatch>
    			<onMismatch>DENY</onMismatch>
    		</filter>
    	</appender>
    	<!--warn -->
    	<appender name="warnAppender"
    		class="ch.qos.logback.core.rolling.RollingFileAppender">
    		<!--文件路径 -->
    		<file>${log.filePath}/warn.log</file>
    		<rollingPolicy
    			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    			<!--文件名称 -->
    			<fileNamePattern>${log.filePath}/warn/warn.%d{yyyy-MM-dd}.log.gz
    			</fileNamePattern>
    			<!--文件最大保存数量 -->
    			<maxHistory>${log.maxHistory}</maxHistory>
    		</rollingPolicy>
    		<encoder>
    			<pattern>${log.pattern}</pattern>
    		</encoder>
    		<filter class="ch.qos.logback.classic.filter.LevelFilter">
    			<level>WARN</level>
    			<onMatch>ACCEPT</onMatch>
    			<onMismatch>DENY</onMismatch>
    		</filter>
    	</appender>
    	<!--error -->
    	<appender name="errorAppender"
    		class="ch.qos.logback.core.rolling.RollingFileAppender">
    		<!--文件路径 -->
    		<file>${log.filePath}/error.log</file>
    		<rollingPolicy
    			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    			<!--文件名称 -->
    			<fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz
    			</fileNamePattern>
    			<!--文件最大保存数量 -->
    			<maxHistory>${log.maxHistory}</maxHistory>
    		</rollingPolicy>
    		<encoder>
    			<pattern>${log.pattern}</pattern>
    		</encoder>
    		<filter class="ch.qos.logback.classic.filter.LevelFilter">
    			<level>ERROR</level>
    			<onMatch>ACCEPT</onMatch>
    			<onMismatch>DENY</onMismatch>
    		</filter>
    	</appender>
    	<logger name="com.csj2018.o2o" level="${log.level}"
    		additivity="true">
    		<!-- name需要关注那个package下的信息 -->
    		<!-- level:用来告诉logback,log仅记录那个level以上的信息 -->
    		<!-- additivity:当为true时,logger就会将父类root下的appender-ref放到logger里面来,即logger也支持在控制台输出相关的日志信息,并且它的level不是按照root指定的level输出日志信息
    		,在控制台将按照logger指定的level指定的level输出日志信息 -->
    		<!-- 业务里面,一个类只能对应一个logger,也就是说这个类的日志信息,要么在这个logger里面输出,要么是往root里面去写。由于我们指定了packageName,package下面所有的类都和logger是对象的,
    		只在这个logger里面输出 -->
    		<appender-ref ref="debugAppender" />
    		<appender-ref ref="infoAppender" />
    		<appender-ref ref="warnAppender" />
    		<appender-ref ref="errorAppender" />
    	</logger>
    	<root level="info">
    		<!-- 如果logger中的level没有指定,就会继承root下的level,仅输出info级别以上的信息 -->
    		<appender-ref ref="consoleAppender" />
    	</root>
    </configuration>
    
  • 相关阅读:
    c#向某网址Post信息,并得到Cookies
    调度自动化系统及调度数据网安全分析探讨
    C#winform中怎么将程序最小化到系统托盘
    电力配网自动化解决方案
    .NET (c#) 模拟 Cookie
    调整数组顺序使奇数位于偶数前面
    在字符串中删除特定的字符
    在O(1)时间内删除链表结点
    单链表逆置
    从尾到头输出链表
  • 原文地址:https://www.cnblogs.com/csj2018/p/11571739.html
Copyright © 2020-2023  润新知