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

本文详细介绍了如何使用Logback进行日志配置,包括控制台输出、按日生成日志文件、根据级别过滤日志等高级配置,并提供了具体示例。
<?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"); 

 

151136_M0iW_938910.png

转载于:https://my.oschina.net/matol/blog/784800

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值