来自:
林炳文Evankaka原创作品。转载请注明出处
摘要:本文主要介绍了如何在spring、springMVC中使用logback
一、logback与Spirng结合使用
1、maven添加引用:
其中logback-ext-spring这个jar包是为了和spring一起使用的。log4j log4j ${log4j.version} org.slf4j slf4j-api ${slf4j.version} ch.qos.logback logback-classic 1.1.2 ch.qos.logback logback-core 1.1.2 org.logback-extensions logback-ext-spring 0.1.1
2、src/main/resource添加logback.xml
%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread]%logger{56}.%method\(\):%L -%msg%n ${log.base}/${log.moduleName}.log ${log.base}/archive/${log.moduleName}_all_%d{yyyy-MM-dd}.%i.log.zip ${log.max.size} %date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread]%logger{56}.%method\(\):%L -%msg%n
其中,下面这几个参数 是在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" />参数内容如下:
dev true com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/learning root christmas258@ ssm-project logs DEBUG DEBUG ]]>
3、如果单独的跑一个spring项目,不带web页面的话,那么这时跑个单元测试就可以打印日志了
看看输出的文件:
![](http://static.open-open.com/lib/uploadImg/20160205/20160205200739_880.png)
二、logback与spingMVC结合使用
其实与spingMVC只需要在上面的工程中,在web.xml里添加如下内容即可。
然后本地启动tomcat,把项目加载进来,注意,此时的日志输出路径 不会像上面一样出现在工程所在路径的logs目录下,而会放在eclipse安装目录下,自动新建一个logs目录 下:logbackConfigLocation classpath:logback.xml ch.qos.logback.ext.spring.web.LogbackConfigListener
![](http://static.open-open.com/lib/uploadImg/20160205/20160205200739_452.png)
而如果将此war包上传到linux下的tomcat的webapp目录后,日志文件会保存在tomcat/bin/logs目录下,记得,这个是web项目和非web项目日志保存路径的不同!
下面这一个是配置比较复杂的,大的工程更多的是以这种方式来配置的,针对不同的包,不同级别的日志来分别打印,如下:
还有另一个网上的找的配置文件,笔者 没有使用过,不过,大家可以参考下来写:%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method\(\):%L -%msg%n ${log.base}/${log.moduleName}.log ${log.base}/archive/${log.moduleName}_all_%d{yyyy-MM-dd}.%i.log.zip ${log.max.size} %date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method\(\):%L -%msg%n ${log.base}/${log.moduleName}_other.log ${log.base}/archive/${log.moduleName}_other_%d{yyyy-MM-dd}.%i.log.zip ${log.max.size} %date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method\(\):%L -%msg%n ${log.base}/${log.moduleName}_err.log ${log.base}/archive/${log.moduleName}_err_%d{yyyy-MM-dd}.%i.log.zip ${log.max.size} %date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method\(\):%L - %msg%n ERROR ACCEPT DENY 0 256 true 0 256 true
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n ${logPath}/debug/debug.log ${logPath}/debug/debug.%d{yyyy-MM-dd}.log ${maxHistory} %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n UTF-8 ${logPath}/info/info.log ${logPath}/info/info.%d{yyyy-MM-dd}.log ${maxHistory} %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n UTF-8 INFO ACCEPT DENY ${logPath}/warn/warn.log ${logPath}/warn/warn.%d{yyyy-MM-dd}.log ${maxHistory} %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n UTF-8 WARN ${logPath}/error/error.log ${logPath}/error/error.%d{yyyy-MM-dd}.log ${maxHistory} %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n UTF-8 ERROR ${logPath}/sql/sql.log ${logPath}/sql/sql.%d{yyyy-MM-dd}.log ${maxHistory} %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n UTF-8 ${logPath}/business/business.log ${logPath}/business/business.%d{yyyy-MM-dd}.log ${maxHistory} %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n UTF-8
附件
<pattern>里面的转换符说明:
转换符 | 作用 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
c {length } lo {length } logger {length } | 输出日志的logger名,可有一个整形参数,功能是缩短logger名,设置为0表示只输入logger最右边点符号之后的字符串。
| ||||||||||||||||||||||||
C {length } class {length } | 输出执行记录请求的调用者的全限定名。参数与上面的一样。尽量避免使用,除非执行速度不造成任何问题。 | ||||||||||||||||||||||||
contextName cn | 输出上下文名称。 | ||||||||||||||||||||||||
d {pattern } date {pattern } | 输出日志的打印日志,模式语法与java.text.SimpleDateFormat 兼容。
| ||||||||||||||||||||||||
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