林炳文Evankaka原创作品。转载请注明出处http://blog.youkuaiyun.com/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 > < 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 = "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 > < 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 > < logger name = "com.lin" additivity = "false" > < level value = "debug" /> < appender-ref ref = "stdout" /> < appender-ref ref = "file" /> </ logger > < root level = "debug" > < appender-ref ref = "stdout" /> < 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 > < 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项目日志保存路径的不同!
下面这一个是配置比较复杂的,大的工程更多的是以这种方式来配置的,针对不同的包,不同级别的日志来分别打印,如下:
还有另一个网上的找的配置文件,笔者 没有使用过,不过,大家可以参考下来写:
附件
<pattern>里面的转换符说明:
转换符 作用 c {length } lo {length } logger {length } 输出日志的logger名,可有一个整形参数,功能是缩短logger名,设置为0表示只输入logger最右边点符号之后的字符串。
Conversion specifier Logger name Result %logger mainPackage.sub.sample.Bar mainPackage.sub.sample.Bar %logger{0} mainPackage.sub.sample.Bar Bar %logger{5} mainPackage.sub.sample.Bar m.s.s.Bar %logger{10} mainPackage.sub.sample.Bar m.s.s.Bar %logger{15} mainPackage.sub.sample.Bar m.s.sample.Bar %logger{16} mainPackage.sub.sample.Bar m.sub.sample.Bar %logger{26} mainPackage.sub.sample.Bar mainPackage.sub.sample.Bar
C {length } class {length } 输出执行记录请求的调用者的全限定名。参数与上面的一样。尽量避免使用,除非执行速度不造成任何问题。 contextName cn 输出上下文名称。 d {pattern } date {pattern } 输出日志的打印日志,模式语法与java.text.SimpleDateFormat 兼容。
Conversion Pattern Result %d 2006-10-20 14:06:49,812 %date 2006-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', ''}"
参考文章:http://www.360doc.com/content/14/1016/15/8072791_417440479.shtml