Software_programming_Guice_Log4j2

2019-08-24

 

Log4j2 配置

 

 

 

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <Configuration status="WARN">
 3     <Properties>
 4         <Property name="console-pattern">%d{yyyy-MM-dd HH:mm} [%t] [%level] %logger{36} - %msg%n</Property>
 5         <Property name="logFile">src\main\resource\log\Automation.log</Property>
 6     </Properties>
 7     <Appenders>
 8         <Console name="Console" target="SYSTEM_OUT">
 9             <PatternLayout pattern="${console-pattern}"/>
10         </Console>
11 
12         <File name="FileAppender" fileName="${logFile}">
13             <PatternLayout pattern="${console-pattern}" />
14         </File>
15 
16         <Async name="AsyncAppender">
17             <AppenderRef ref="FileAppender" />
18         </Async>
19     </Appenders>
20 
21     <Loggers>
22         <Root level="info">
23             <AppenderRef ref="Console" />
24             <AppenderRef ref="AsyncAppender" />
25         </Root>
26         <Logger name="AsyncFileLoogger" level="error" additivity="true">
27             <AppenderRef ref="AsyncAppender" />
28         </Logger>
29     </Loggers>
30 
31 </Configuration>

 

   


1 注解 Log

1 @Retention(RetentionPolicy.RUNTIME)
2 @Target(ElementType.METHOD)
3 public @interface Log {
4 
5 }

2. 实现 MethodInterceptor    LogInterceptor.java


package framework.Guice.Guice_Log;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;


public class LogInterceptor implements MethodInterceptor {

@Override
public Object invoke(MethodInvocation methodInvocation) throws Throwable {

String methodName = methodInvocation.getMethod().getName();

System.out.printf("logInterceptor method %s begin", methodName);
LoggerAuto.logger.info("log4j2 : info -> "+methodName);
LoggerAuto.logger.warn("log4j2 : warn !!");

return methodInvocation.proceed();
}
}

3.  binding  LogModule

package framework.Guice.Guice_Log;

import com.google.inject.AbstractModule;
import com.google.inject.matcher.Matchers;

public class LogModule extends AbstractModule {

@Override
protected void configure(){
bindInterceptor(Matchers.any(),
Matchers.annotatedWith(Log.class),
new LogInterceptor());
bind(IServiceLog.class).to(ServiceLog.class);
}
}

Matchers 简单的接口, 用来表示是否匹配, 一个表示参与的类, 一个表示相关的方法。

匹配方法:

 

4 Log annotation

 1 package framework.Guice.Guice_Log;
 2 
 3 public class ServiceLog implements IServiceLog {
 4 
 5     @Override
 6     @Log
 7     public void execute() {
 8         System.out.printf("service method : %s", "do none");
 9     }
10 }

 

5. use

 

 1 package framework.Guice.Guice_Log;
 2 
 3 import com.google.inject.Guice;
 4 import com.google.inject.Inject;
 5 
 6 public class testGuiceLog {
 7     @Inject
 8     private IServiceLog serviceLog;
 9 
10     public static void main(String[] args){
11         testGuiceLog testGuiceLog = Guice.createInjector(new LogModule()).getInstance(
12                 framework.Guice.Guice_Log.testGuiceLog.class);
13         testGuiceLog.serviceLog.execute();
14     }
15 }

 

 

 


AOP x相关方法 :

1. Advice

2. Joinpoint

3. Pointcut

4. Aspect

5. Introduction

6. Target

7. Proxy

8. Weaving

 

Guice 支持 AOP 条件:

1. 类必须是 public 或 package

2.类不能是 final

3. 方法必须是 public ,package, protected

4. 方法不能是 final

5.实例必须通过Guice 的 @Inject 注入或者有一个无参数的构造函数。

 

Thanks for Refernce : 

https://www.iteye.com/blog/fengozl-2357935

posted @ 2019-08-24 18:19  君子之行  阅读(5)  评论(0编辑  收藏  举报