JAVA程序离不开日志的支持,特别是生成环境服务器,查问题的时候更是离不开日志的支持,现将slf+log4j整合到spring框架中的配置写一下:
项目结构如下:
?
一、在web.xml中添加log4j的配置文件和监听器
<context-param>
? <param-name>log4jConfigLocation</param-name>
? <param-value>classpath:resources/log4j.properties</param-value>
</context-param>
<listener> ?
? ? ? ? <listener-class> ?
? ? ? ? ? ? org.springframework.web.util.Log4jConfigListener ?
? ? ? ? </listener-class> ?
?</listener>
?
二、设置log4j配置文件,位置src/resources/log4j.properties,内容如下:
log4j.rootLogger=DEBUG,stdout,InfoFile,ErrorFile
?
#kong zhi tai shu chu she ding
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.layout.ConversionPattern=Log4j:[%d{yyyy-MM-dd HH:mm:ss}] %5p %c{1}:%L - %m%n
?
#info?
log4j.appender.InfoFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.InfoFile.Threshold=DEBUG
log4j.appender.InfoFile.file=${catalina.base}/logs/activitiLogs/InfoFile.log
log4j.appender.InfoFile.DatePattern='.'yyyy-MM-dd
log4j.appender.InfoFile.layout=org.apache.log4j.PatternLayout
log4j.appender.InfoFile.layout.ConversionPattern=Log4j:[%d{yyyy-MM-dd HH:mm:ss}] %5p %c{1}:%L - %m%n
?
#error
log4j.appender.ErrorFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ErrorFile.Threshold=Error
log4j.appender.ErrorFile.File=${catalina.base}/logs/activitiLogs/ErrorFile.log
log4j.appender.ErrorFile.DatePattern='.'yyyy-MM-dd
log4j.appender.ErrorFile.layout=org.apache.log4j.PatternLayout
log4j.appender.ErrorFile.layout.ConversionPattern=Log4j:[%d{yyyy-MM-dd HH:mm:ss}] %5p %c{1}:%L - %m%n
?
配置中主要设置了控制台、info日志文件和error日志文件的产出:
控制台:输出Debug及以上的日志信息
info、error日志文件:
输出DEBUG及以上日志信息;
每天产生一个新的日志文件;
${catalina.base}表示tomcat服务器根目录(bin文件夹和conf文件夹的父目录);
eclipse中直接启动Tomcat插件服务,则日志输出在workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp3\logs\activitiLogs(tmp3是会改变的,规律是tmp*);
info级别的只会输入在InfoFile.log文件中,error级别的日志会同时出现在InfoFile.log和errorFile.log文件中;
?
配置文件还可以设置单个类产生的日志信息单独输出到一个日志文件中,此处没有进行这么细致的配置,仅仅简单的根据级别区分了一下
?
三、java代码中调用
?
package com.pb.modult.admin.biz.service;
?
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
?
import com.pb.modult.admin.biz.bo.AdminBO;
/**
?* 管理员
?* @author Administrator
?*
?*/
@Service
public class AdminService {
@Autowired
private AdminBO adminBO;
?
Logger logger = Logger.getLogger(AdminService.class);
?
org.slf4j.Logger logger2 = org.slf4j.LoggerFactory.getLogger("InfoFile");
?
public void login(){
logger.info("info日志");
logger.error("error日志");
logger2.debug("debug日志,主键{}", "主键值");
}
}
?
slf可以设置占位符直接进行字符串的拼接
?
?