文档章节

使用Sl4j+Logback根据不同日志级别生成文件

后海
 后海
发布于 2016/11/09 15:12
字数 553
阅读 627
收藏 3
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="600 seconds">
	<property resource="config.properties" />
	<contextName>${log.name}</contextName>
	
	<!--控制台输出 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder charset="UTF-8">
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
		</encoder>
	</appender>
	
	<!--按照每天生成日志文件 -->
	<appender name="infos" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${logs}/${log.name}.info.%i.%d{yyyy-MM-dd}</FileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>100MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<MaxHistory>20</MaxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss} [%-5level] - %msg%n</pattern>
		</encoder> 
		<!-- 此日志文件只记录info级别,不记录大于info级别的日志 -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>	
	<!--按照每天生成日志文件 -->
	<appender name="errors" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${logs}/${log.name}.erro.%i.%d{yyyy-MM-dd}</FileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>100MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<MaxHistory>20</MaxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss} [%-5level] {%c-%L} - %msg%n</pattern>
		</encoder>
		<!-- 此日志文件只记录error级别的 -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>error</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>	
	<!-- 按照文件名称,生成多个文件 -->		
	<appender name="FILE-THREAD" class="ch.qos.logback.classic.sift.SiftingAppender">
		<discriminator>
			<key>logFileName</key>
			<defaultValue>matols</defaultValue>
		</discriminator>
		<sift>	
			<appender name="files" class="ch.qos.logback.core.rolling.RollingFileAppender">
				<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
					<FileNamePattern>${logs}/${logFileName}.hs.%i.%d{yyyy-MM-dd}</FileNamePattern>
					<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
						<maxFileSize>100MB</maxFileSize>
					</timeBasedFileNamingAndTriggeringPolicy>
					<MaxHistory>20</MaxHistory>
				</rollingPolicy>
				<encoder>
					<pattern>%msg%n</pattern>
				</encoder>
				<!-- 此日志文件只记录warn级别的 -->
				<filter class="ch.qos.logback.classic.filter.LevelFilter">
					<level>warn</level>
					<onMatch>ACCEPT</onMatch>
					<onMismatch>DENY</onMismatch>
				</filter>
			</appender>
		</sift>
	</appender>
	
    <!--日志异步到数据库 
    <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
        <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
            <driverClass>${driver}</driverClass>
            <url>${url}</url>
            <user>${name}</user>
            <password>${pass}</password>
        </connectionSource>
    </appender>
    <logger name="java.sql.Connection">
        <level value="INFO" />
    </logger>
    <logger name="java.sql.Statement">
        <level value="INFO" />
    </logger>
    <logger name="java.sql.ResultSet">
        <level value="INFO" />
    </logger>-->
  
	<!--log 通过 LoggerFactory.getLogger(name)取得 
    <logger name="log" additivity="true" level="INFO">  
        <appender-ref ref="STDOUT" /> 
    </logger>   -->
    
	<!--设置日志级别做 -->
	<root level="INFO">
	    <appender-ref ref="STDOUT" />
		<appender-ref ref="infos" />
		<appender-ref ref="errors" />
		<appender-ref ref="FILE-THREAD" />
	</root>
	
</configuration>

 

使用到的jar:

由于新增了可以动态生成文件的功能,jar需要升级到1.1.7(core/classic/slfj-api)

MDC.put("logFileName", "399001.SZ");

log.warn("aaaaaaaaa");

MDC.remove("logFileName"); 

MDC.put("logFileName", "000001.SS");

log.warn(HsRecord.gtJson("bbbbbbbbbb");

MDC.remove("logFileName"); 

 

© 著作权归作者所有

后海

后海

粉丝 33
博文 48
码字总数 25623
作品 2
闵行
后端工程师
私信 提问
不学无数——SpringBoot入门IV

SpringBoot 1.Profiles Spring Profiles能够在不同的环境中使不同的应用配置生效。@Component和@Configuration两个注解都能够通过@Profiles来标记。下面是例子: 在配置文件中可以通过sprin...

不学无数的程序员
2018/07/23
0
0
logback--过滤器+补充

ok,这里先简单罗列下logback日志框架的好处,关于仔细的整理后面会专门写一篇博客的。 1,配置简单,易于上手 2,一个日志文件中只能某一个级别的日志 3,一个类中可以指定多个不同的日志,...

xiaomin0322
2019/05/09
21
0
关于Log4Net的使用及配置方式

目录 0.简介 1.安装程序包 2.配置文件示例 3.日记的级别:Level 4.日志的输出源:Appenders 5.日志格式:Layout 6.日志文件变换方式(回滚方式):RollingStyle 7.日志的过滤器:Filter 8.将...

shanzm
01/17
0
0
日志配置,日志收集,日志切割

linux系统中日志分析 是很重要的一部分,下面介绍一下简单的日志自定义配置和日志收集 1 日志配置 配置文件在/etc/rsyslog.conf中 日志分为日志类型,日志级别。 日志类型: mail 邮件类型 ...

wzl_up
2016/09/27
377
0
Spring Boot干货系列:(七)默认日志logback配置解析

转载自:点击打开链接 前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日志输出格式以及输出方式如何配置? 代码中如...

u012843873
2018/04/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

六、Spring Cloud之配置中心config

前言 前面我们讲了微服务的注册中心、负载均衡、熔断处理、网管服务。接下来我们讲配置中心,为什么要用配置中心呢? 其实我们接触一段时间就可以发现,我们的项目还是非常多的,每个项目都有...

quellanan2
13分钟前
33
0
在Android的EditText视图中允许多行?

如何在Android的EditText视图中允许多行? #1楼 这对我有用 ,实际上这两个属性很重要: inputType和lines 。 此外,您可能需要一个滚动条,下面的代码显示了如何制作一个: <EditText ...

技术盛宴
17分钟前
25
0
分享自己写的JS版日期格式化和解析工具类,绝对好用!

前言 本来想模仿Java里面的SimpleDateFormat()对象的,但是感觉这样用起来不方便,所以还是直接写成单独的方法算了。 原文链接 日期格式化 2.1. 使用说明 formatDate(date, fmt),其中fmt支持...

SuShine
27分钟前
42
0
快递鸟api物流查询接口实现订阅物流轨迹单号查询功能对接调用

背景: 分享一篇关于在电商系统中同步物流轨迹到本地服务器的文章,当前方案使用了快递鸟集成api做为数据来源接口,这个接口是免费使用的,不过提供的功能还是非常强大的,有专门的售后维护团...

程序的小猿
32分钟前
46
0
Day08多态,abstract,接口

1.A:多态的概述:事物存在的多种形态。 B:多态前提:要有继承关系,方法重写和父类引用子类对象。 父类引用子类对象:Animal a = new Cat(); a.eat(); //效果等同于c.eat(); 2.多态中的...

Lao鹰
37分钟前
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部