logback日志配置

1. application-dev.properties 配置文件添加logback配置

logging.config=classpath:logback-spring.xml

2. 复制 logback-spring.xml 到 /src/main/resources目录

3. 输出SQL日志

  • 修改RelationDBAccessor的日志级别为DEBUG,默认不输出SQL,生产环境不建议输出SQL.
  • 分表ShardingSphere-SQL日志控制,INFO为打开,ERROR为关闭
  • 如果不想输出到控制台:去掉 <appender-ref ref="STDOUT" />
<logger name="com.sie.snest.engine.db.relationdb.RelationDBAccessor" level="DEBUG" additivity="false">
	<appender-ref ref="STDOUT" />
	<appender-ref ref="SQL_LOG" />
</logger>

 <!-- 分表SQL日志控制,INFO为打开,ERROR为关闭-->
<logger name="ShardingSphere-SQL" level="INFO" additivity="false">
	<appender-ref ref="STDOUT" />
	<appender-ref ref="SQL_LOG" />
</logger>

4. logback-spring.xml 配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
	<property name="LOG_BASE" value="logs"/>
	<!--控制台日志 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n</pattern>
		</encoder>
	</appender>
	
	<!--普通日志 -->
	<appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n</pattern>
		</encoder>
		<file>${LOG_BASE}/root.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${LOG_BASE}/root.%d{yyyyMMdd}.%i.log</fileNamePattern>
			<maxFileSize>128MB</maxFileSize>
			<maxHistory>60</maxHistory>
			<totalSizeCap>30GB</totalSizeCap>
		</rollingPolicy>
	</appender>
	
	<!--错误日志 -->
	<appender name="ERROR_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n</pattern>
		</encoder>
		<file>${LOG_BASE}/error.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${LOG_BASE}/error.%d{yyyyMMdd}.%i.log
			</fileNamePattern>
			<!-- 每天一个日志文件,当天的日志文件超过10MB时,生成新的日志文件,当天的日志文件数量超过totalSizeCap/maxFileSize,日志文件就会被回滚覆盖。 -->
			<maxFileSize>128MB</maxFileSize>
			<maxHistory>60</maxHistory>
			<totalSizeCap>30GB</totalSizeCap>
		</rollingPolicy>
	</appender>
	
	<!--SQL日志 -->
	<appender name="SQL_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n</pattern>
		</encoder>
		<file>${LOG_BASE}/sqllogfile.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${LOG_BASE}/sqllogfile.%d{yyyyMMdd}.%i.log</fileNamePattern>
			<maxFileSize>128MB</maxFileSize>
			<maxHistory>60</maxHistory>
			<totalSizeCap>30GB</totalSizeCap>
		</rollingPolicy>
	</appender>
	
	<!-- SQL异步输出 -->
	<appender name="SQL_ASYNC_LOG" class="ch.qos.logback.classic.AsyncAppender">
		<discardingThreshold>0</discardingThreshold>
		<queueSize>512</queueSize>
		<appender-ref ref="SQL_LOG"/>
	</appender>
	
	<!-- root定义全局日志级别为INFO  -->
	<root level="INFO">
		<appender-ref ref="STDOUT"/>
		<appender-ref ref="LOG_FILE"/>
		<appender-ref ref="ERROR_LOG"/>
	</root>
	
	<!-- logger:可以为特定包或类设置不同的日志级别 -->
	<logger name="org.hibernate" level="ERROR"/>
	<logger name="io.netty" level="ERROR"/>
	<logger name="org.springframework" level="WARN"/>
	<logger name="org.redisson" level="ERROR"/>
	<logger name="com.alibaba.druid.sql.SQLUtils" level="ERROR"/>
	
	<!-- 耗时统计 -->
	<logger name="com.sie.snest.engine.utils.TimeCounter" level="DEBUG"/>
	
	<!-- SQL日志输出到控制台和SQL_LOG文件,additivity=false表示不向root传递打印信息. DEBUG为打开,INFO为关闭 -->
	<logger name="com.sie.snest.engine.db.relationdb.RelationDBAccessor" level="INFO" additivity="false">
		<appender-ref ref="STDOUT"/>
		<appender-ref ref="SQL_LOG"/>
	</logger>
	<!-- 分表SQL日志控制.INFO为打开;ERROR为关闭 -->
	<logger name="ShardingSphere-SQL" level="ERROR" additivity="false">
		<appender-ref ref="STDOUT"/>
		<appender-ref ref="SQL_LOG"/>
	</logger>
	
</configuration>

5.生产环境配置SQL异步输出到文件

如果要添加自定义类的日志级别,追加到logger到 logback-spring.xml

<logger name="com.sie.snest.engine.utils.TimeCounter" level="DEBUG"/>
<logger name="org.springframework" level="WARN"/>

如果不想输出SQL到控制台,去掉 <appender-ref ref="STDOUT" />

<!-- SQL日志输出到控制台和SQL_LOG文件,DEBUG是开启SQL日志,INFO:为关闭 -->
<logger name="com.sie.snest.engine.db.relationdb.RelationDBAccessor" level="DEBUG" additivity="false">
	<appender-ref ref="SQL_ASYNC_LOG" />
</logger>

<!-- 分表SQL日志控制.INFO为打开;ERROR为关闭 -->
<logger name="ShardingSphere-SQL" level="INFO" additivity="false">
	<appender-ref ref="SQL_ASYNC_LOG" />
</logger>

logback-spring.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
	<property name="LOG_BASE" value="logs"/>
	<!--控制台日志 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n</pattern>
		</encoder>
	</appender>
	
	<!--普通日志 -->
	<appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n</pattern>
		</encoder>
		<file>${LOG_BASE}/root.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${LOG_BASE}/root.%d{yyyyMMdd}.%i.log</fileNamePattern>
			<maxFileSize>128MB</maxFileSize>
			<maxHistory>60</maxHistory>
			<totalSizeCap>30GB</totalSizeCap>
		</rollingPolicy>
	</appender>
	
	<!--错误日志 -->
	<appender name="ERROR_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n</pattern>
		</encoder>
		<file>${LOG_BASE}/error.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${LOG_BASE}/error.%d{yyyyMMdd}.%i.log
			</fileNamePattern>
			<!-- 每天一个日志文件,当天的日志文件超过10MB时,生成新的日志文件,当天的日志文件数量超过totalSizeCap/maxFileSize,日志文件就会被回滚覆盖。 -->
			<maxFileSize>128MB</maxFileSize>
			<maxHistory>60</maxHistory>
			<totalSizeCap>30GB</totalSizeCap>
		</rollingPolicy>
	</appender>
	
	<!--SQL日志 -->
	<appender name="SQL_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n</pattern>
		</encoder>
		<file>${LOG_BASE}/sqllogfile.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${LOG_BASE}/sqllogfile.%d{yyyyMMdd}.%i.log</fileNamePattern>
			<maxFileSize>128MB</maxFileSize>
			<maxHistory>60</maxHistory>
			<totalSizeCap>30GB</totalSizeCap>
		</rollingPolicy>
	</appender>
	
	<!-- SQL异步输出 -->
	<appender name="SQL_ASYNC_LOG" class="ch.qos.logback.classic.AsyncAppender">
		<discardingThreshold>0</discardingThreshold>
		<queueSize>512</queueSize>
		<appender-ref ref="SQL_LOG"/>
	</appender>
	
	<!-- root定义全局日志级别为INFO  -->
	<root level="INFO">
		<appender-ref ref="STDOUT"/>
		<appender-ref ref="LOG_FILE"/>
		<appender-ref ref="ERROR_LOG"/>
	</root>
	
	<!-- logger:可以为特定包或类设置不同的日志级别 -->
	<logger name="org.hibernate" level="ERROR"/>
	<logger name="io.netty" level="ERROR"/>
	<logger name="org.springframework" level="WARN"/>
	<logger name="org.redisson" level="ERROR"/>
	<logger name="com.alibaba.druid.sql.SQLUtils" level="ERROR"/>
	
	<!-- 耗时统计 -->
	<logger name="com.sie.snest.engine.utils.TimeCounter" level="DEBUG"/>
	
	<!-- SQL日志输出到控制台和SQL_LOG文件,additivity=false表示不向root传递打印信息. DEBUG为打开,INFO为关闭 -->
	<logger name="com.sie.snest.engine.db.relationdb.RelationDBAccessor" level="DEBUG" additivity="false">
		<appender-ref ref="SQL_ASYNC_LOG"/>
	</logger>
	<!-- 分表SQL日志控制.INFO为打开;ERROR为关闭 -->
	<logger name="ShardingSphere-SQL" level="INFO" additivity="false">
		<appender-ref ref="SQL_ASYNC_LOG"/>
	</logger>
	
</configuration>