logback与Spring、SpringMVC结合使用教程

        林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

        摘要:本文主要介绍了如何在spring、springMVC中使用logback

一、logback与Spirng结合使用

1、maven添加引用:

 

		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>${log4j.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.1.2</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-core</artifactId>
			<version>1.1.2</version>
		</dependency>
		<dependency>
			<groupId>org.logback-extensions</groupId>
			<artifactId>logback-ext-spring</artifactId>
			<version>0.1.1</version>
		</dependency>


其中logback-ext-spring这个jar包是为了和spring一起使用的。

 

2、src/main/resource添加logback.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!-- 尽量别用绝对路径,如果带参数不同容器路径解释可能不同,以下配置参数在pom.xml里 -->
	<property name="log.root.level" value="${log.root.level}" /> <!-- 日志级别 -->
	<property name="log.other.level" value="${log.other.level}" /> <!-- 其他日志级别 -->
	<property name="log.base" value="${log.base}" /> <!-- 日志路径,这里是相对路径,web项目eclipse下会输出到eclipse的安装目录下,如果部署到linux上的tomcat下,会输出到tomcat/bin目录 下 -->
	<property name="log.moduleName" value="${log.moduleName}" />  <!-- 模块名称, 影响日志配置名,日志文件名 -->
	<property name="log.max.size" value="100MB" /> <!-- 日志文件大小 -->

	<!--控制台输出 -->
	<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<Pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread]%logger{56}.%method\(\):%L -%msg%n</Pattern>
		</encoder>
	</appender>

  <!-- 日志文件输出 -->
	<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>${log.base}/${log.moduleName}.log</File><!-- 设置日志不超过${log.max.size}时的保存路径,注意如果 是web项目会保存到Tomcat的bin目录 下 -->
		<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。-->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${log.base}/archive/${log.moduleName}_all_%d{yyyy-MM-dd}.%i.log.zip
			</FileNamePattern>
			<!-- 当天的日志大小 超过${log.max.size}时,压缩日志并保存 -->
			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>${log.max.size}</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<!-- 日志输出的文件的格式  -->
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread]%logger{56}.%method\(\):%L -%msg%n</pattern>
		</layout>
	</appender>
 
	<!-- 为某个包下的所有类的指定Appender 这里也可以指定类名称例如:com.aa.bb.ClassName -->
	<logger name="com.lin" additivity="false">
		<level value="debug" />
		<appender-ref ref="stdout" />
		<appender-ref ref="file" />
	</logger>
	<!-- root将级别为“DEBUG”及大于“DEBUG”的日志信息交给已经配置好的名为“Console”的appender处理,“Console”appender将信息打印到Console -->
	<root level="debug">
		<appender-ref ref="stdout" /> <!-- 标识这个appender将会添加到这个logger -->
		<appender-ref ref="file" />
	</root>
</configuration>

 

其中,下面这几个参数 是在pom.xml里配置的,如果你不想在pom.xml里来配置,也可以直接写死就是

<property name="log.root.level" value="${log.root.level}" /> 
<property name="log.other.level" value="${log.other.level}" /> 
<property name="log.base" value="${log.base}" /> 
<property name="log.moduleName" value="${log.moduleName}" />  
<property name="log.max.size" value="10kb" />

参数内容如下:

 

<profiles>
		<!-- 开发环境 -->
		<profile>
			<id>dev</id>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
			<!-- 以下配置properties中用到一些变量,如数据库连接参数、日志打印等 -->
			<properties>
				<!-- DB Resource -->
				<jdbc_driverClassName>com.mysql.jdbc.Driver</jdbc_driverClassName>
				<jdbc_url>jdbc:mysql://localhost:3306/learning</jdbc_url>
				<jdbc_username>root</jdbc_username>
				<jdbc_password>christmas258@</jdbc_password>

				<log.moduleName>ssm-project</log.moduleName>
				<log.base>logs</log.base>
				<log.other.level>DEBUG</log.other.level>
				<log.root.level>DEBUG</log.root.level>
				<log.stdout.ref><![CDATA[<appender-ref ref="stdout" />]]></log.stdout.ref>
			</properties>
		</profile>
	</profiles>

 

 

3、如果单独的跑一个spring项目,不带web页面的话,那么这时跑个单元测试就可以打印日志了

 

看看输出的文件:

二、logback与spingMVC结合使用

其实与spingMVC只需要在上面的工程中,在web.xml里添加如下内容即可。

    <!-- 添加日志监听器 -->
	<context-param>
		<param-name>logbackConfigLocation</param-name>
		<param-value>classpath:logback.xml</param-value>
	</context-param>
	<listener>
		<listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
	</listener>

然后本地启动tomcat,把项目加载进来,注意,此时的日志输出路径 不会像上面一样出现在工程所在路径的logs目录下,而会放在eclipse安装目录下,自动新建一个logs目录 下:

而如果将此war包上传到linux下的tomcat的webapp目录后,日志文件会保存在tomcat/bin/logs目录下,记得,这个是web项目和非web项目日志保存路径的不同!

 

下面这一个是配置比较复杂的,大的工程更多的是以这种方式来配置的,针对不同的包,不同级别的日志来分别打印,如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!-- 尽量别用绝对路径,如果带参数不同容器路径解释可能不同,以下配置参数在pom.xml里 -->
	<property name="log.root.level" value="${log.root.level}" /> <!-- 日志级别 -->
	<property name="log.other.level" value="${log.other.level}" /> <!-- 其他日志级别 -->
	<property name="log.base" value="${log.base}" /> <!-- 日志路径,这里是相对路径,web项目eclipse下会输出到eclipse的安装目录下,如果部署到linux上的tomcat下,会输出到tomcat/bin目录 下 -->
	<property name="log.moduleName" value="${log.moduleName}" />  <!-- 模块名称, 影响日志配置名,日志文件名 -->
	<property name="log.max.size" value="100MB" /> <!-- 日志文件大小,超过这个大小将被压缩 -->

	<!--控制台输出 -->
	<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<Pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method\(\):%L -%msg%n</Pattern>
		</encoder>
	</appender>

	<!-- 用来保存输出所有级别的日志 -->
	<appender name="file.all" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>${log.base}/${log.moduleName}.log</File><!-- 设置日志不超过${log.max.size}时的保存路径,注意如果 
			是web项目会保存到Tomcat的bin目录 下 -->
		<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${log.base}/archive/${log.moduleName}_all_%d{yyyy-MM-dd}.%i.log.zip
			</FileNamePattern>
			<!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份) -->
			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>${log.max.size}</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<!-- 日志输出的文件的格式 -->
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method\(\):%L -%msg%n</pattern>
		</layout>
	</appender>
	
	<!-- 这也是用来保存输出所有级别的日志 -->
	<appender name="file.all.other" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>${log.base}/${log.moduleName}_other.log</File>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${log.base}/archive/${log.moduleName}_other_%d{yyyy-MM-dd}.%i.log.zip
			</FileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>${log.max.size}</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method\(\):%L -%msg%n</pattern>
		</layout>
	</appender>

	<!-- 只用保存输出error级别的日志 -->
	<appender name="file.error"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>${log.base}/${log.moduleName}_err.log</File>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${log.base}/archive/${log.moduleName}_err_%d{yyyy-MM-dd}.%i.log.zip
			</FileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>${log.max.size}</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method\(\):%L - %msg%n</pattern>
		</layout>
		<!-- 下面为配置只输出error级别的日志 -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>

   <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
    <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
    <!-- 添加附加的appender,最多只能添加一个 -->
	<appender name="file.async" class="ch.qos.logback.classic.AsyncAppender">
		<discardingThreshold>0</discardingThreshold>
		<queueSize>256</queueSize>
		<includeCallerData>true</includeCallerData>
		<appender-ref ref="file.all" />
	</appender>

	<appender name="file.async.other" class="ch.qos.logback.classic.AsyncAppender">
		<discardingThreshold>0</discardingThreshold>
		<queueSize>256</queueSize>
		<includeCallerData>true</includeCallerData>
		<appender-ref ref="file.all.other" />
	</appender>

	<!-- 为某个包下的所有类的指定Appender 这里也可以指定类名称例如:com.aa.bb.ClassName -->
	<logger name="com.lin" additivity="false">
		<level value="${log.root.level}" />
		<appender-ref ref="stdout" /> 
		<appender-ref ref="file.async" /><!-- 即com.lin包下级别为 ${log.root.level}的才会使用file.async来打印 -->
		<appender-ref ref="file.error" />
	</logger>
	
	<!-- root将级别为${log.root.level}及大于${log.root.level}的日志信息交给已经配置好的名为“Console”的appender处理,“Console”appender将信息打印到Console,其它同理 -->
	<root level="${log.root.level}">
		<appender-ref ref="stdout" /> <!--  标识这个appender将会添加到这个logger -->
		<appender-ref ref="file.async.other" />
		<appender-ref ref="file.error" />
	</root>
</configuration>


还有另一个网上的找的配置文件,笔者 没有使用过,不过,大家可以参考下来写:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds" debug="false">

    <!--打印logback初始化日志系统信息,debug="true"是同等效果-->
    <!--<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/>-->

    <!-- 将日志输出在当前项目的根目录下 -->
    <property name="contextPath" value="/home/logs/valiuser"/>
	<!-- 日志的上下文路径 -->
    <property name="logPath" value="${contextPath}"/>
	<!-- 配置日志的滚动时间 -->
	<property name="maxHistory" value="90"/>
	
	
	<!-- 打印日志到控制台 -->
    <appender name="rootConsole" class="ch.qos.logback.core.ConsoleAppender">
    	<!-- encoder 在控制台打印日志的格式 -->  
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
        </encoder>
    </appender>

    <!--
    	定义日志的输出方式:输出在文件夹debug/debug.log文件中
    	配置所有类所有级别的滚动日志
    -->
    <appender name="rootRollingDebug" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/debug/debug.log</file>
		
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/debug/debug.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 设置日志的滚动时间 -->
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
	
    <!--
    	定义日志的输出方式:输出在文件夹info/root.log文件中
    	配置所有类INFO级别的滚动日志
    -->
    <appender name="rootRollingInfo" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/info/info.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/info/info.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 设置日志的滚动时间 -->
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 
        	info/root.log文件中的日志级别是 INFO以上的级别
         	<filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 和
         	<filter class="ch.qos.logback.classic.filter.LevelFilter">的区别是什么呢?
         	
         	LevelFilter:严格限制日志的输出级别,使用LevelFilter设置,只会在文件中出现级别为INFO级别的日志内容。
         --> 
        <filter class="ch.qos.logback.classic.filter.LevelFilter"> 
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>  
    		<onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--
    	定义日志的输出方式:输出在文件夹warn/root.log文件中
    	配置所有类WARN级别的滚动日志
    -->	
    <appender name="rootRollingWarn" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/warn/warn.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/warn/warn.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 设置日志的滚动时间 -->
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder> 
        <!-- warn/root.log文件中的日志级别是 WARN以上的级别  -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
        </filter>
    </appender>
    <!--
    	定义日志的输出方式:输出在文件夹error/root.log文件中
    	配置所有类ERROR级别的滚动日志
    -->
    <appender name="rootRollingError" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/error/error.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/error/error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 设置日志的滚动时间 -->
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- error/root.log文件中的日志级别是 ERROR以上的级别 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
        </filter>
    </appender>

    <!--
    	定义日志的输出方式:输出在文件夹sql/root.log文件中
    	配置所有类SQL的日志
    -->
    <appender name="rootRollingSql" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/sql/sql.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/sql/sql.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 设置日志的滚动时间 -->
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
	
    <!--
    	定义日志的输出方式:输出在文件夹business/rootsql.log文件中
    	打印业务逻辑级别的日志到business文件下
    -->
    <appender name="businessRollingDebug" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/business/business.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/business/business.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 设置日志的滚动时间 -->
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
	
	<!-- 
		默认的日志主线程<root>
		定义输出日志的级别.DEBUG级别
		下面设置的意思是:会将debug级别的日志输出在一下这五个appender-ref对应的appender上
	 -->
    <root level="DEBUG">
        <appender-ref ref="rootConsole"/> 
        <appender-ref ref="rootRollingDebug"/>
    </root>
    <root level="WARN">
        <appender-ref ref="rootRollingWarn"/> 
    </root>
    <root level="ERROR">
        <appender-ref ref="rootRollingError"/> 
    </root>
    <root level="INFO">
        <appender-ref ref="rootRollingInfo"/> 
    </root>

	<!-- 
		除了使用默认的日志主线程<root>外,还可以通过<logger>标签定制其他日志线程如:
		其中name指定线程针对的包路径,level是日志级别,<appender-ref>定义使用那种appender。
	 -->

    <!--log4jdbc   begin -->
    
    <!-- 
    	jdbc.sqlonly不显示sql执行的时间
    	jdbc.sqltiming显示sql执行的时间{executed in 2 msec} 
    	二者使用一个即可
    
    <logger name="jdbc.sqlonly" level="DEBUG"  addtivity="false">
        <appender-ref ref="rootConsole"/>
        <appender-ref ref="rootRollingSql"/>
    </logger>
    
    -->
    <logger name="jdbc.sqltiming" level="DEBUG" addtivity="false">
        <appender-ref ref="rootConsole"/>
        <appender-ref ref="rootRollingSql"/>
    </logger>
    
    <!--log4jdbc   end -->
    
	<!-- 
		打印项目中com包下的日志到appender-ref指定的appender中  打印级别是debug
		这里可以用来专门打印某一类别的日志到某一个特定的文件中.
		比如:可以打印所有的业务逻辑到业务逻辑文件中;打印所有的controller请求到指定的文件中.
	-->
    <logger name="com" level="DEBUG" addtivity="true">
        <appender-ref ref="businessRollingDebug"/>
    </logger> 
	<!-- 
		打印具体的某个文件中的日志到某个文件夹下.
		注意:不是打印com.baihui.LogBackTest2文件夹下的日志,而是LogBackTest2文件的日志
		addtivity="false" 表示打印的日志不向上传递,如果设置成addtivity="true"会怎么样呢?没错,日志打印了两遍
	 -->
	<logger name="com.baihui" level="DEBUG" addtivity="false">
        <appender-ref ref="rootConsole"/>
    </logger>
    
    <logger name="baihui" level="ERROR" addtivity="false">
        <appender-ref ref="rootConsole"/>
    </logger>
    
</configuration>


附件

 <pattern>里面的转换符说明:

 

转换符作用
c {length } 
lo {length } 
logger {length } 
输出日志的logger名,可有一个整形参数,功能是缩短logger名,设置为0表示只输入logger最右边点符号之后的字符串。
Conversion specifierLogger nameResult
%loggermainPackage.sub.sample.BarmainPackage.sub.sample.Bar
%logger{0}mainPackage.sub.sample.BarBar
%logger{5}mainPackage.sub.sample.Barm.s.s.Bar
%logger{10}mainPackage.sub.sample.Barm.s.s.Bar
%logger{15}mainPackage.sub.sample.Barm.s.sample.Bar
%logger{16}mainPackage.sub.sample.Barm.sub.sample.Bar
%logger{26}mainPackage.sub.sample.BarmainPackage.sub.sample.Bar

 

C {length } 
class {length } 
输出执行记录请求的调用者的全限定名。参数与上面的一样。尽量避免使用,除非执行速度不造成任何问题。
contextName 
cn 
输出上下文名称。
d {pattern } 
date {pattern } 
输出日志的打印日志,模式语法与java.text.SimpleDateFormat 兼容。
Conversion PatternResult
%d2006-10-20 14:06:49,812
%date2006-10-20 14:06:49,812
%date{ISO8601}2006-10-20 14:06:49,812
%date{HH:mm:ss.SSS}14:06:49.812
%date{dd MMM yyyy ;HH:mm:ss.SSS}20 oct. 2006;14:06:49.812
F / file输出执行记录请求的java源文件名。尽量避免使用,除非执行速度不造成任何问题。
caller{depth}caller{depth, evaluator-1, ... evaluator-n}输出生成日志的调用者的位置信息,整数选项表示输出信息深度。

例如, %caller{2}   输出为:

0    [main] DEBUG - logging statement 
Caller+0   at mainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22)
Caller+1   at mainPackage.sub.sample.Bar.createLoggingRequest(Bar.java:17)

例如, %caller{3}   输出为:

16   [main] DEBUG - logging statement 
Caller+0   at mainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22)
Caller+1   at mainPackage.sub.sample.Bar.createLoggingRequest(Bar.java:17)
Caller+2   at mainPackage.ConfigTester.main(ConfigTester.java:38)
L / line输出执行日志请求的行号。尽量避免使用,除非执行速度不造成任何问题。
m / msg / message

输出应用程序提供的信息。

M / method输出执行日志请求的方法名。尽量避免使用,除非执行速度不造成任何问题。
n输出平台先关的分行符“\n”或者“\r\n”。
p / le / level输出日志级别。
r / relative输出从程序启动到创建日志记录的时间,单位是毫秒
t / thread输出产生日志的线程名。
replace(p ){r, t}

p 为日志内容,r 是正则表达式,将p 中符合r 的内容替换为t 。

例如, "%replace(%msg){'\s', ''}"

更多技术请关注笔者微信技术公众号"单例模式"

 

 

  • 10
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值