loggable

AOP to log java methods developed by SeaHuang

Лицензия

Лицензия

Группа

Группа

com.github.sea-huang
Идентификатор

Идентификатор

loggable
Последняя версия

Последняя версия

1.3.0
Дата

Дата

Тип

Тип

jar
Описание

Описание

loggable
AOP to log java methods developed by SeaHuang
Ссылка на сайт

Ссылка на сайт

https://github.com/sea-huang/loggable
Система контроля версий

Система контроля версий

https://github.com/sea-huang/loggable.git

Скачать loggable

Как подключить последнюю версию

<!-- https://jarcasting.com/artifacts/com.github.sea-huang/loggable/ -->
<dependency>
    <groupId>com.github.sea-huang</groupId>
    <artifactId>loggable</artifactId>
    <version>1.3.0</version>
</dependency>
// https://jarcasting.com/artifacts/com.github.sea-huang/loggable/
implementation 'com.github.sea-huang:loggable:1.3.0'
// https://jarcasting.com/artifacts/com.github.sea-huang/loggable/
implementation ("com.github.sea-huang:loggable:1.3.0")
'com.github.sea-huang:loggable:jar:1.3.0'
<dependency org="com.github.sea-huang" name="loggable" rev="1.3.0">
  <artifact name="loggable" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.github.sea-huang', module='loggable', version='1.3.0')
)
libraryDependencies += "com.github.sea-huang" % "loggable" % "1.3.0"
[com.github.sea-huang/loggable "1.3.0"]

Зависимости

compile (7)

Идентификатор библиотеки Тип Версия
org.springframework.boot : spring-boot-starter jar
org.springframework.boot : spring-boot-starter-aop jar
org.slf4j : slf4j-api jar
org.springframework.boot : spring-boot-starter-validation Необязательный jar
com.alibaba : fastjson Необязательный jar 1.2.47
com.fasterxml.jackson.core : jackson-databind Необязательный jar
com.google.code.gson : gson Необязательный jar

test (4)

Идентификатор библиотеки Тип Версия
org.springframework.boot : spring-boot-starter-log4j jar 1.3.8.RELEASE
org.springframework.boot : spring-boot-test jar
org.springframework : spring-test jar
junit : junit jar

Модули Проекта

Данный проект не имеет модулей.

中文

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", onSuccess=Level.OFF)
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.

Версии библиотеки

Версия
1.3.0
1.2.0
1.1.3
1.1.2
1.1.1
1.1.0
1.0.0