8000 GitHub - sea-huang/loggable: AOP Log facilities to rescue you from logging java methods
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

AOP Log facilities to rescue you from logging java methods

License

Notifications You must be signed in to change notification settings

sea-huang/loggable

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

loggable

AOP Log facilities to rescue you from logging java methods

Version changes

  • 1.0.0 main features
  • 1.0.1 fix autodetecting json frameworks
  • 1.1.0 add support for Gson and Log Duration feature
  • 1.1.1 fix DurationRecorder prototype
  • 1.1.2 remove dependency spring-starter-logging, add support for xml config
  • 1.1.3 remove incompatible java.lang.Parameter. fix test facilities.
  • 1.2.0 add @LogScript, enhance stability
  • 1.3.0 add spring boot support, default level on success from INFO to DEBUG

Set up

  • add maven dependency:

     <dependency>
       <groupId>com.github.sea-huang</groupId>
       <artifactId>loggable</artifactId>
       <version>1.3.0</version>
     </dependency>
  • optinally dependencies, alibaba's FastJson, Jackson or Gson will be auto detected to seriliaze the arguments and results. If neither found on the path, it will default to Object.toString()

     <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
     </dependency>
     <dependency>
     	<groupId>com.fasterxml.jackson.core</groupId>
     	<artifactId>jackson-databind</artifactId>
     </dependency>
     <dependency>
     	<groupId>com.google.code.gson</groupId>
     	<artifactId>gson</artifactId>
     </dependency>
  • Bring in the facilities

    @EnableLoggable
      @Configuration
      public class AnyConfigClass{
      
      }
      

    or XML config

     <bean class="com.github.seahuang.log.spring.LoggableAutoConfiguration">
     	<property name="globalLogDuration" value="true"/><!--optional-->
     </bean>

    for spring boot project, Loggable is auto configuired without any specific declaring. but two optional config available:

      loggable.enabled=false
      loggable.globalLogDuration=true
      

Usage Examples

  • Service to be tested

    @Service
      public class TesteeService {
      	@Loggable("Purpose")
      	public String simpleCall(String stringArg, Integer intArg){
      		return "result";
      	}
      }
      
  • Just add the @Loggable annotation to the method, and it will log all the arguments and result value as below:

2018-05-15 11:36:21.879  INFO 63398 --- [           main] 
c.g.seahuang.log.stub.TesteeService      :
Purpose Success! TesteeService.simpleCall(stringArg="AA",intArg=10) returns "result"
  • On exception case:
ExexptionTest Fail! TesteeService.throwException(stringArg="AA",intArg=10)
	
java.lang.RuntimeException: Intentional Exception
		at com.github.seahuang.log.stub.TesteeService.throwException(TesteeService.java:35) ~[test-classes/:na]
		at com.github.seahuang.log.stub.TesteeService$$FastClassBySpringCGLIB$$5d883f5f.invoke() ~[test-classes/:na]
		at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-4.3.7.RELEASE.jar:4.3.7.RELEASE]
		at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:721) ~[spring-aop-4.3.7.RELEASE.jar:4.3.7.RELEASE]
		at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) [spring-aop-4.3.7.RELEASE.jar:4.3.7.RELEASE]
		at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:139) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
		at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.3.7.RELEASE.jar:4.3.7.RELEASE]
		at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85) ~[spring-aop-4.3.7.RELEASE.jar:4.3.7.RELEASE]
		at com.github.seahuang.log.LoggableAspect.log(LoggableAspect.java:18) ~[classes/:na]
		...
  • Wanna log only on Exception and keep silence in Success? Set Level.OFF on Success
@Loggable(value="SilenceSuccessTest", >)
public String keepSilenceOnSuccess(String one, Integer two){
	return null;
}
  • Wanna log warnning on some business exception?
@Loggable(value="Purpose", warningOn=BusinessException.class)
public String logWarnninngOnBusinessException(String one, Integer two){
	return null;
}
  • More complicated case:
@Loggable("CustomizedLog")
public @LogLength List customizeLog(@LogIgnore String one
			, @LogFormat(ExceptionTypeFormatter.class) Exception t){
	...
}
  • @LogLength only log the length of a collection or array.
  • @LogIngore ignore the parameter or result when format the output
  • @LogFormat give a self defined implementation class type for TypeFormatter, by which to format the parameter output
  • @LogScript use script to customize the format, SPEL for default / javascript and other java supported script engines also included
 	@Loggable("Script log test")
	public @LogScript("#t.size() > 1 ? #t[0] + #t[1] : ''")List logScript(
			@LogScript("'arg1: ' + #t") String one
			,@LogScript("10 + #t") Integer two){
 
 
  • Combine with Method Validation
@Loggable("validateMethod")
public @NotNull List validateParameters(@NotEmpty String one, @NotNull Integer two){
		return null;
}
  • Log the duration time each method call costs
    • global setting, it will apply all @Loggable methods without specific LogDuration assigned or LogDuration equals to Default

      @EnableLoggable(logDuration=true)
      
    • each method call assign it's own Duration log strategy, which will override the global settings

      @Loggable(logDuration=LogDuration.YES)
      

Customization

  • Refer to com.github.seahuang.log.spring.LoggableAutoConfiguration. All classes are connected by interfaces, and can be replaced by your own implementation.
  • An important explanation, global customized exception log formatter can be apply by implemnt com.github.seahuang.log.formatter.LogFormatter or extend com.github.seahuang.log.formatter.LogFormatterSupport(should register to spring). the most precise exception formatter will be used.

About

AOP Log facilities to rescue you from logging java methods

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

0