logback日志按照日志级别输出:

<configuration>
	<property name="APP_NAME" value="parkApi" />
	<property name="LOG_HOME" value="log" />
	<contextName>${APP_NAME}</contextName>
	<!-- 控制台日志输出 -->
	<appender name="stdout"
		class="ch.qos.logback.core.ConsoleAppender">
		<encoder charset="UTF-8">
			<pattern>%d{yyyy-MM-dd HH:mm:ss} %5p %c:%L %m%n</pattern>
		</encoder>
	</appender>
	<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
	<appender name="FILE"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 指定日志文件的名称 -->
		<file>${LOG_HOME}/${APP_NAME}.log</file>
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 滚动时产生的文件的存放位置及文件名称 %d{yyyy-MM-dd}:按天进行日志滚动 %i:当文件大小超过maxFileSize时,按照i进行文件滚动 -->
			<fileNamePattern>${LOG_HOME}/logbacks/${APP_NAME}-%d{yyyy-MM-dd}-%i.log
			</fileNamePattern>
			<MaxHistory>180</MaxHistory>
			<!-- 当日志文件超过maxFileSize指定的大小是,根据上面提到的%i进行日志文件滚动 注意此处配置SizeBasedTriggeringPolicy是无法实现按文件大小进行滚动的,必须配置timeBasedFileNamingAndTriggeringPolicy -->
			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>1KB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<!-- 日志输出格式:%d表示日期时间,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %logger{50} 表示logger名字最长50个字符,否则按照句点分割。 
			%msg:日志消息,%n是换行符 -->
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [
				%logger{50} : %line ] - %msg%n</pattern>
		</layout>
	</appender>

	<!-- root是所有logger的父级,当logger的additivity=false时,logger管理的日志不再父级传递 -->
	<!--root的level尽量高一些,logger的级别必须低于root的级别才能输出 -->
	<!--ALL > TRACE > FATAL > DEBUG > INFO > WARN > ERROR > OFF -->
	<root level="DEBUG">
		<appender-ref ref="stdout" />
		<appender-ref ref="FILE" />
	</root>

	<!--appender和logger一起使用 -->

	<!--appender的name可以随意指定,被logger的appender-ref标签引用 -->
	<appender name="errorAppender"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 指定日志文件的名称 -->
		<file>${LOG_HOME}/${APP_NAME}-error.log</file>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<!--只匹配ERROR级别日志 -->
			-->
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 滚动时产生的文件的存放位置及文件名称 %d{yyyy-MM-dd}:按天进行日志滚动 %i:当文件大小超过maxFileSize时,按照i进行文件滚动 -->
			<fileNamePattern>${LOG_HOME}/logbacks/${APP_NAME}-error-%d{yyyy-MM-dd}-%i.log
			</fileNamePattern>
			<MaxHistory>180</MaxHistory>
			<!-- 当日志文件超过maxFileSize指定的大小是,根据上面提到的%i进行日志文件滚动 注意此处配置SizeBasedTriggeringPolicy是无法实现按文件大小进行滚动的,必须配置timeBasedFileNamingAndTriggeringPolicy -->
			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>1KB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<!-- 日志输出格式:%d表示日期时间,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %logger{50} 表示logger名字最长50个字符,否则按照句点分割。 
			%msg:日志消息,%n是换行符 -->
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [
				%logger{50} : %line ] - %msg%n</pattern>
		</layout>
	</appender>
	<appender name="infoAppender"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 指定日志文件的名称 -->
		<file>${LOG_HOME}/${APP_NAME}-info.log</file>
		<!--只输出INFO -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<!--只匹配INFO级别日志 -->
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 滚动时产生的文件的存放位置及文件名称 %d{yyyy-MM-dd}:按天进行日志滚动 %i:当文件大小超过maxFileSize时,按照i进行文件滚动 -->
			<fileNamePattern>${LOG_HOME}/${APP_NAME}-info-%d{yyyy-MM-dd}-%i.log
			</fileNamePattern>
			<MaxHistory>180</MaxHistory>
			<!-- 当日志文件超过maxFileSize指定的大小是,根据上面提到的%i进行日志文件滚动 注意此处配置SizeBasedTriggeringPolicy是无法实现按文件大小进行滚动的,必须配置timeBasedFileNamingAndTriggeringPolicy -->
			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>1KB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<!-- 日志输出格式:%d表示日期时间,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %logger{50} 表示logger名字最长50个字符,否则按照句点分割。 
			%msg:日志消息,%n是换行符 -->
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [
				%logger{50} : %line ] - %msg%n</pattern>
		</layout>
	</appender>

	<!--logger的name作为匹配包名的作用 -->
	<!--当java代码中LoggerFactory.getLogger(XX.class);匹配该XX的类名 -->
	<!--当java代码中LoggerFactory.getLogger("loggername");时,name属性直接写loggername -->
	<logger name="com.wr.park_toolkit" additivity="false">
		<appender-ref ref="infoAppender" />
		<appender-ref ref="errorAppender" />
	</logger>

	<!--因为我之前做过项目要求某个功能单独出日志文件,我直接匹配了类名,其实这时可以单独写一个Logger,以String做参数 -->
</configuration>

更多推荐