菜鸟学SpringMVC之—— SpringMVC+Log4j实现日志管理
SpringMVC
SpringMVC+Log4j实现日志管理:
导入依赖
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
引入配置文件
### 配置根 ###
log4j.rootLogger = debug,console ,fileAppender,dailyRollingFile,ROLLING_FILE,MAIL,DATABASE
### 设置输出sql的级别,其中logger后面的内容全部为jar包中所包含的包名 ###
log4j.logger.org.apache=dubug
log4j.logger.java.sql.Connection=dubug
log4j.logger.java.sql.Statement=dubug
log4j.logger.java.sql.PreparedStatement=dubug
log4j.logger.java.sql.ResultSet=dubug
### 配置输出到控制台 ###
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n
@Service
public class UserServiceImpl implements IUserService {
@Autowired
UserMapper mapper;
Logger logger = Logger.getLogger(UserServiceImpl.class);
@Override
public User login(User user) {
logger.debug("ZAQ");
return mapper.findUser(user);
}
}
登录成功后在控制台打印的日志信息:
但是项目中肯定是要将日志信息保存到硬盘中,这时修改一下log4j的配置文件就行了,给上面的配置文件中加入下面配置。
# 日志文件(logFile)
log4j.appender.fileAppender=org.apache.log4j.FileAppender
#级别,记录DEBUG及以上级别
log4j.appender.fileAppender.Threshold=DEBUG
log4j.appender.fileAppender.ImmediateFlush=true
#后缀往上加
log4j.appender.fileAppender.Append=true
log4j.appender.fileAppender.File=Z:/logs/log.log4j
log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
# 输出的格式 %d:时间;%l:级别;%m:信息;%n:下一行
log4j.appender.fileAppender.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
成功后输出到对应的文件中
这时我们发现,以后所有的查询等涉及敏感操作的过程都要在service中给其加入日志打印功能,这时就让service层的代码很乱。怎么解决呢?那就用AOP解决,这就让我们的日志系统更加灵活。
要使用AOP,先导入aspectJ依赖包
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.5</version>
</dependency>
并且在配置文件中启动AOP注解驱动
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd ">
<mvc:annotation-driven></mvc:annotation-driven><!--mvc注解驱动-->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>
实现增强:
@Aspect
@Component
public class LogAdvice {
Logger logger = Logger.getLogger(Logger.class);
@Pointcut("execution(* com.home.test.service..*.*(..))")//这里可以指定方法,指定给service包下的具体哪些服务加入日志系统
public void pointCut(){ }
@Before("pointCut()")
public void before(JoinPoint joinPoint) {
logger.debug(joinPoint.getTarget() + " : " + joinPoint.getSignature());
logger.debug("方法执行参数: " + Arrays.toString(joinPoint.getArgs()));
}
@Around("pointCut()")
public Object around(ProceedingJoinPoint pjp) {
Object result = null;
try {
result = pjp.proceed(pjp.getArgs());
logger.debug("方法的执行结果:" + result);
} catch (Throwable throwable) {
throwable.printStackTrace();
}
return result;
}
}
成功的打印日志信息:
如果真正发布项目到生产环境的时候将日志信息输出级别调整至warn就可以了,因为debug级别比较低,一般没必要输出。(风险级别排序:debug < info< warn < error)
还没有评论,来说两句吧...