通用型(再也不用每个类new一个logger了)
public classLog {private static Map loggerMap = new HashMap();public static void main(String[] args) throwsClassNotFoundException {
Log.error("自定义LOG","sss444444");
}public static voiddebug(Object message){
String className=getClassName();
Logger log=getLogger(className);if(log.isDebugEnabled()){
log.debug(message);
}
}public static voiddebug(String tag, Object message){
String className=getClassName();
Logger log=getLogger(className);if(log.isDebugEnabled()){
log.debug(new StringBuffer().append("【").append(tag).append("】").append(message).toString());
}
}public static voidinfo(Object message){
String className=getClassName();
Logger log=getLogger(className);if(log.isInfoEnabled()){
log.info(message);
}
}public static voidinfo(String tag, Object message){
String className=getClassName();
Logger log=getLogger(className);if(log.isInfoEnabled()){
log.info(new StringBuffer().append("【").append(tag).append("】").append(message).toString());
}
}public static voidwarn(Object message){
String className=getClassName();
Logger log=getLogger(className);
log.warn(message);
}public static voidwarn(String tag, Object message){
String className=getClassName();
Logger log=getLogger(className);
log.warn(new StringBuffer().append("【").append(tag).append("】").append(message).toString());
}public static voiderror(Object message){
String className=getClassName();
Logger log=getLogger(className);
log.error(message);
}public static voiderror(String tag, Object message){
String className=getClassName();
Logger log=getLogger(className);
log.error(new StringBuffer().append("【").append(tag).append("】").append(message).toString());
}/*** 获取最开始的调用者所在类
*@return
*/
private staticString getClassName(){
Throwable th= newThrowable();
StackTraceElement[] stes=th.getStackTrace();
StackTraceElement ste= stes[2];returnste.getClassName();
}/*** 根据类名获得logger对象
*@paramclassName
*@return
*/
private staticLogger getLogger(String className){
Logger log= null;if(loggerMap.containsKey(className)){
log=loggerMap.get(className);
}else{try{
log=Logger.getLogger(Class.forName(className));
loggerMap.put(className, log);
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
}returnlog;
}
}
spring型(上个注释自己帮我们log了)
@Aspect
@Service
public class LoggerAdvice {
private Logger logger = Logger.getLogger(this.getClass());
@Before("within(com.example.webmanager..*) && @annotation(loggerManage)")
public void addBeforeLogger(JoinPoint joinPoint, LoggerManage loggerManage) {
logger.info("执行 " + loggerManage.description() + " 开始");
logger.info("地址 "+joinPoint.getSignature().toString());
logger.info("参数 "+this.parseParames(joinPoint.getArgs()));
}
@AfterReturning("within(com.example.webmanager..*) && @annotation(loggerManage)")
public void addAfterReturningLogger(JoinPoint joinPoint, LoggerManage loggerManage) {
logger.info("执行 " + loggerManage.description() + " 结束");
}
@AfterThrowing(pointcut = "within(com.example.webmanager..*) && @annotation(loggerManage)", throwing = "ex")
public void addAfterThrowingLogger(JoinPoint joinPoint, LoggerManage loggerManage, Exception ex) {
logger.error("执行 " + loggerManage.description() + " 异常", ex);
}
private String parseParames(Object[] parames) {
if (null == parames || parames.length <= 0) {
return "";
}
StringBuffer param = new StringBuffer("传入参数[");
for (Object obj : parames) {
param.append("{").append(ToStringBuilder.reflectionToString(obj)).append("} ");
}
param.append("]");
return param.toString();
}
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LoggerManage {
String description();
}