Logback应用及自定义节点


  说明:Logback是由log4j创始人设计的另一个开源日志组件,拥有更优越的性能,Springboot默认的集成日志,它有一个核心模块logback-core和两个基本模块logback-classic、logback-access更多可以上官方网站:http://logback.qos.ch了解一下,这些暂不是我们的重点。
  本节的主要介绍:1、了解logback.xml的常用配置 2、自定义自己的日志输出节点 3、了解常用的属性(可参考配置中注释)。


1、工程描述


  说明:日志测试比较简单,引入一个logback.xml文件,如果logback.xml位置比较特殊可以在application.propertis中指定引入,另外一个对外测试接口Log.java。


2、代码步骤


  第一:定义logback.xml(太长,只显示error节点和自定义的节点),我在error节点中写了很详细的注释,感觉这样比拿出来说明更易理解 。

<configuration>
	<!-- 输出到控制台 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<!-- 输出格式 -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -
				%msg%n</pattern>
		</encoder>
	</appender>

	<!-- error级别单独记录 -->
	<appender name="errorAppender"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>logs/test-error-today.log</file>
		<!-- 以day为单位自动回滚 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 按天回滚 daily -->
			<fileNamePattern>logs/test-error/test-error-%d{yyyy-MM-dd}.%i.log.gz
			</fileNamePattern>
			<!-- 日志最大的历史30天 删除策略https://www.jianshu.com/p/d9c08785430a-->
			<maxHistory>30</maxHistory>
			<!-- 日志文件最大的大小,若当天日志达到最大maxFileSixe时,%i会自动加1 -->
			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>100MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<!-- 日志输出格式:%d表示日期时间,%thread表示线程名,%-5level:级别从左显示5个字符宽度
    		 %logger{35} 表示logger名字最长35个字符,否则按照句点分割。 %msg:日志消息,%n是换行符
    	-->
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] 
				%-5level%logger{35} - %msg%n</pattern><!-- https://blog.csdn.net/sinat_25076521/article/details/80513543 -->
		</encoder>
		<!-- error级别过滤器 -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
		<!-- 只显示ERROR级别 -->
			<level>ERROR</level>
			<!--匹配到就允许-->
			<onMatch>ACCEPT</onMatch>
			<!--没匹配到就禁止-->
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	<property name="log.path" value="logs/captcha-info" />
	<property name="serverNode" value="node236" />
	<!-- collect info级别单独记录 -->
	<appender name="logCollect"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>logs/test-collect-today.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${log.path}/collect.%d{yyyy-MM-dd}.%i.log
			</FileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>5kb</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<encoder>
			 <pattern>%msg%n</pattern><!-- 日志格式使用类似csv的格式,所以不要其他信息了 -->
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	<!-- 自定义异步-->
	<appender name="async" class="ch.qos.logback.classic.AsyncAppender">
		<discardingThreshold>0</discardingThreshold>
		<queueSize>1024</queueSize>
		<appender-ref ref="logCollect" />
	</appender>
	<!-- additivity为false表示只在自已定义的级别输出,不会继承root(否则也会在root里输出,输出两次) -->
	<logger name="logCollect" additivity="false" level="INFO"><!-- INFO级别 -->
		<appender-ref ref="async"></appender-ref>
	</logger>

	<!-- 根,所有logger的祖先 -->
	<root level="INFO">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="errorAppender" />
		<appender-ref ref="warnAppender" />
		<appender-ref ref="infoAppender" />
	</root>
</configuration>

第二:application.properties中引入logback.xml,初始级别为INFO,默认级别为DEBUG。

logging.config: file:./logback.xml
logging.level.JaninoLogger: INFO

第三:对外提供的接口代码。

@RestController
public class Log {
	Logger logger = LoggerFactory.getLogger("logCollect");
	Logger log = LoggerFactory.getLogger(this.getClass());
	@RequestMapping("/log")
	public String logTest1() {
		for (int i = 0; i < 10000; i++) {
			logger.info("参数{},参数{},参数{},参数{},参数{},参数{},参数{}", i, i + 1, i + 2, i + 3, i + 4, i + 5, i + 6);
		}
		return "hello log";
	}
	@RequestMapping("/log1")
	public String logTest2() {
		for (int i = 0; i < 10000; i++) {
			log.info("参数{},参数{},参数{},参数{},参数{},参数{},参数{}", i, i + 1, i + 2, i + 3, i + 4, i + 5, i + 6);
			log.warn("参数{},参数{},参数{},参数{},参数{},参数{},参数{}", i, i + 1, i + 2, i + 3, i + 4, i + 5, i + 6);
			log.error("参数{},参数{},参数{},参数{},参数{},参数{},参数{}", i, i + 1, i + 2, i + 3, i + 4, i + 5, i + 6);
		}
		return "hello log1";
	}
}

3、自定义节点解析


  在logback.xml中logCollect为自定义节点,大多数属性说明可以参考上面error节点注释,这里几个上面没有出现的说明一下。
 property:定义属性变量,可以在下面直接引用 ;
 pattern:%msg%n表示只输出内容CVS格式内容,不定义头,方便解析 ;
 filter:只定义了INFO级别,说明logCollect节点只能用到INFO上;
 additivity=“false”:表示不从root根上继承,只输出自定义的INFO级别,否则会被输出两次 ;


4、测试说明


日志输出.png
  可以看出图中自定义的日志进行了切分,而且输出内容只是简单的逗号分隔,cvs可以直接打开,其它日志可以自行运行代码打开查看(会有定义的头信息)。


5、打包下载


链接:https://pan.baidu.com/s/1Yr8pXlkpqzkzqioMj7onSg 
提取码:upl3 

若链接莫名失效,可以留言联系,也可以按照上述的方式自行配置。
【更多可关注】更多可关注

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值