在Spring项目中使用Log4j记录日志

(1)引入log4j的jar包:

官网下载地址:http://logging.apache.org/log4j/1.2/download.html

(2)在web.xml中添加log4j配置:

1
2
3
4
5
6
7
8
< context-param >
     < param-name >log4jConfigLocation</ param-name >
     < param-value >classpath:log4j.properties</ param-value >
</ context-param >
< context-param >
     < param-name >log4jRefreshInterval</ param-name >
     < param-value >60000</ param-value >
</ context-param >

(3)log4j属性文件log4j.properties:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#Root Category
log4j.rootLogger=debug,stdout,D,E
 
#Console
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
 
#DEBUG
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ${catalina.base}/logs/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
 
#ERROR
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =${catalina.base}/logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout  
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
 
#IBATIS Category
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
 
#WS Logger for reporting
log4j.logger.WS=INFO,WS
log4j.appender.WS=org.apache.log4j.DailyRollingFileAppender    
log4j.appender.WS.File=${catalina.base}/logs/ws.log
log4j.appender.WS.layout=org.apache.log4j.PatternLayout
log4j.appender.WS.DatePattern  ='.'yyyy-MM-dd    
log4j.appender.WS.layout.ConversionPattern=%d-[ws] %p %t %c - %m%n 
 
#Other Logger
log4j.logger.org.springframework=INFO
log4j.logger.com.ibatis.db=INFO  
log4j.logger.net.sf.json=ERROR
log4j.logger.org.apache.cxf=DEBUG,WS

 

注:我这里的配置文件并不是很好,仅供参考

(4)测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package  cn.zifangsky.controller;
 
import  org.apache.log4j.Logger;
import  org.springframework.stereotype.Controller;
import  org.springframework.web.bind.annotation.RequestMapping;
 
@Controller
public  class  TestController {
     private  static  Logger logger = Logger.getLogger(TestController. class );
     
     @RequestMapping ( "/test.html" )
     public  void  test(){
         logger.info( "info测试" );
         logger.debug( "debug测试 " );
         logger.error( "error测试" );
     }
}

控制台输出如下:

1
2
3
4
5
6
[INFO ] 2016-11-06 18:01:28,000 method:cn.zifangsky.controller.TestController.test(TestController.java:13)
info测试
[DEBUG] 2016-11-06 18:01:28,007 method:cn.zifangsky.controller.TestController.test(TestController.java:14)
debug测试 
[ERROR] 2016-11-06 18:01:28,007 method:cn.zifangsky.controller.TestController.test(TestController.java:15)
error测试

debug.log文件:

1
2
3
2016-11-06 18:01:28  [ http-apr-9180-exec-10:0 ] - [ INFO ]  info测试
2016-11-06 18:01:28  [ http-apr-9180-exec-10:7 ] - [ DEBUG ]  debug测试 
2016-11-06 18:01:28  [ http-apr-9180-exec-10:7 ] - [ ERROR ]  error测试

error.log文件:

1
2016-11-06 18:01:28  [ http-apr-9180-exec-10:7 ] - [ ERROR ]  error测试
在软件开发中,尤其是基于Spring框架的应用程序里,通过为Controller层添加自定义注解来记录操作日志是一种常见的需求。这种技术可以帮助开发者跟踪用户的请求、分析系统性能以及排查潜在问题。 ### 实现步骤 1. **创建自定义注解** 首先需要定义一个新的注解用于标记哪些方法的操作应该被记录下来。 ```java @Retention(RetentionPolicy.RUNTIME) // 注解会在运行时保留 @Target(ElementType.METHOD) // 表明该注解只能应用于方法上 public @interface LogOperation { String value() default ""; // 可以在这里设置一些额外的信息字段 } ``` 2. **编写AOP切面处理逻辑** 使用Spring AOP(面向方面编程),我们可以捕获所有带有我们刚刚创建的`LogOperation`注解的方法,并在此基础上实现具体的日志记录功能。 ```java @Component @Aspect public class LogAspect { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Around("@annotation(logOperation)") public Object logMethod(ProceedingJoinPoint joinPoint, LogOperation logOperation) throws Throwable { long startTime = System.currentTimeMillis(); try { Object result = joinPoint.proceed(); // 执行目标方法 recordSuccessLog(joinPoint, logOperation, startTime); return result; } catch (Throwable e){ recordFailureLog(joinPoint, logOperation, startTime, e); throw e; // 如果希望继续抛出异常给外层,则可以加上这一句 } } private void recordSuccessLog(ProceedingJoinPoint joinPoint, LogOperation logOperation, Long startTime){ Signature signature = joinPoint.getSignature(); logger.info("成功执行了 {} 方法 - 描述: {}, 耗时: {} 毫秒", signature.getName(), logOperation.value(), System.currentTimeMillis()-startTime ); } private void recordFailureLog(ProceedingJoinPoint joinPoint, LogOperation logOperation, Long startTime, Throwable e){ Signature signature = joinPoint.getSignature(); logger.error("失败执行了 {} 方法 - 描述: {}, 耗时: {} 毫秒", signature.getName(), logOperation.value(), System.currentTimeMillis()-startTime ,e); } } ``` 此代码片段会拦截每一个加有 `@LogOperation` 的方法并自动打印相应的信息到控制台或者文件中去。 3. **使用示例** 接下来就是在实际项目里面应用它了: ```java @RestController @RequestMapping("/example") public class ExampleController { @GetMapping("/{id}") @LogOperation("获取用户详情") // 自定义描述文字 public ResponseEntity<User> getUserById(@PathVariable Integer id){ User user = userService.findById(id); if(user == null) return new ResponseEntity<>(HttpStatus.NOT_FOUND); return new ResponseEntity<>(user, HttpStatus.OK); } } ``` 当访问上述API路径 `/example/{someId}` 时,“获取用户详情”将会作为一条新纪录保存至指定位置供后续审查之用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值