java 操作日志 log
2015-03-17 11:40
357 查看
定义注解log
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
/*
* 定义注解 log
* 注解中含有一个元素 description
* description 元素 有默认值 "no description"
*/
public @interface Log {
public String description() default "no description";
}
配置操作日志拦截器
<!-- 操作日志拦截器 -->
<interceptor name="OperationLogInterceptor"
class="类名">
</interceptor>
操作日志类
import java.lang.reflect.Method;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class OperationLogInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
@Resource(name=TbloperatelogService.OperateLog_SERVICE_IMPL)
protected TbloperatelogService operateLogService ;
/**
* 操作日志拦截器
*
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public String intercept(ActionInvocation invocation) throws Exception {
String actionName="";
String methodName="";
System.out.println("操作日志开始启动..");
Class clazz = invocation.getAction().getClass();
Log annot;
if(clazz.isAnnotationPresent(Log.class)){
annot = (Log) clazz.getAnnotation(Log.class);
actionName = annot.description();
}
String methods = invocation.getProxy().getMethod();
Method method= clazz.getDeclaredMethod(methods, null);
if(method.isAnnotationPresent(Log.class)){
annot = (Log) method.getAnnotation(Log.class);
methodName = annot.description();
}
String result = invocation.invoke();
boolean executeresult = invocation.getProxy().getExecuteResult();
// 取得请求相关的ActionContext实例
ActionContext ctx = invocation.getInvocationContext();
HttpServletRequest request = ServletActionContext.getRequest();
Map session = ctx.getSession();
Tbluser user=null;
if(null!=session.get("tbluser")){
user = (Tbluser) session.get("tbluser");
}
//保存操作日志内容Tbloperatelog
Tbloperatelog operateLog = new Tbloperatelog();
if (user != null) {
operateLog.setUsername(user.getId().toString());
operateLog.setOreratetime(DateUtil.getCurrentT());
//系统名称
operateLog.setSysname(actionName);
if (!method.equals("")&&methodName.contains("|")) {
String str = methodName;
int numone = str.indexOf("|");
//模块功能名称
if(numone!=-1){
String moduleName = str.substring(0, numone);
operateLog.setModulename(moduleName);
}else{
// operateLog.setModulename(str);
}
str=str.substring(numone+1, str.length());
//操作名称
int numtwo = str.indexOf("|");
if(numtwo!=-1){
String operName = str.substring(0, numtwo);
operateLog.setOpername(operName);
}else{
operateLog.setOpername(str);
}
}else{
operateLog.setOpername(methodName);
}
// if (executeresult) {//0代表成功;1代表失败
// operateLog.setOperState(0);
// }else {
// operateLog.setOperState(1);
// }
//acton和method的名字不为空时运行存储
if(!"".equals(actionName)&&!"".equals(methodName)){
try {
operateLogService.save(operateLog);
} catch (Exception e) {
e.printStackTrace();
}
}
}else{
//退出
}
return Action.SUCCESS;
}
}
使用方式
@Log(description="系统模块")
如果是多个中间用|分隔
@Log(description="系统模块|模块|操作")
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
/*
* 定义注解 log
* 注解中含有一个元素 description
* description 元素 有默认值 "no description"
*/
public @interface Log {
public String description() default "no description";
}
配置操作日志拦截器
<!-- 操作日志拦截器 -->
<interceptor name="OperationLogInterceptor"
class="类名">
</interceptor>
操作日志类
import java.lang.reflect.Method;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class OperationLogInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
@Resource(name=TbloperatelogService.OperateLog_SERVICE_IMPL)
protected TbloperatelogService operateLogService ;
/**
* 操作日志拦截器
*
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public String intercept(ActionInvocation invocation) throws Exception {
String actionName="";
String methodName="";
System.out.println("操作日志开始启动..");
Class clazz = invocation.getAction().getClass();
Log annot;
if(clazz.isAnnotationPresent(Log.class)){
annot = (Log) clazz.getAnnotation(Log.class);
actionName = annot.description();
}
String methods = invocation.getProxy().getMethod();
Method method= clazz.getDeclaredMethod(methods, null);
if(method.isAnnotationPresent(Log.class)){
annot = (Log) method.getAnnotation(Log.class);
methodName = annot.description();
}
String result = invocation.invoke();
boolean executeresult = invocation.getProxy().getExecuteResult();
// 取得请求相关的ActionContext实例
ActionContext ctx = invocation.getInvocationContext();
HttpServletRequest request = ServletActionContext.getRequest();
Map session = ctx.getSession();
Tbluser user=null;
if(null!=session.get("tbluser")){
user = (Tbluser) session.get("tbluser");
}
//保存操作日志内容Tbloperatelog
Tbloperatelog operateLog = new Tbloperatelog();
if (user != null) {
operateLog.setUsername(user.getId().toString());
operateLog.setOreratetime(DateUtil.getCurrentT());
//系统名称
operateLog.setSysname(actionName);
if (!method.equals("")&&methodName.contains("|")) {
String str = methodName;
int numone = str.indexOf("|");
//模块功能名称
if(numone!=-1){
String moduleName = str.substring(0, numone);
operateLog.setModulename(moduleName);
}else{
// operateLog.setModulename(str);
}
str=str.substring(numone+1, str.length());
//操作名称
int numtwo = str.indexOf("|");
if(numtwo!=-1){
String operName = str.substring(0, numtwo);
operateLog.setOpername(operName);
}else{
operateLog.setOpername(str);
}
}else{
operateLog.setOpername(methodName);
}
// if (executeresult) {//0代表成功;1代表失败
// operateLog.setOperState(0);
// }else {
// operateLog.setOperState(1);
// }
//acton和method的名字不为空时运行存储
if(!"".equals(actionName)&&!"".equals(methodName)){
try {
operateLogService.save(operateLog);
} catch (Exception e) {
e.printStackTrace();
}
}
}else{
//退出
}
return Action.SUCCESS;
}
}
使用方式
@Log(description="系统模块")
如果是多个中间用|分隔
@Log(description="系统模块|模块|操作")
相关文章推荐
- java 日志 log操作的基本配置+代码
- java3种常见日志配置:commons-log,log4j,logback
- Java 使用Log4J进行日志操作
- 关于delphi的log的class已经完成,一如既往的open 他delphi ,日志class,临界区,文件操作
- java日志系统学习--java.util.log.Level
- Java使用Log日志系统(common-logging和log4j)
- Java项目中使用log记录日志的一些细节
- 运维中的日志切割操作梳理(Logrotate/python/shell脚本实现)
- java日志文件 log
- 使用Lumigent Log Explorer对SQL Server事务日志进行分析,对SQL Server事务、操作进行撤销
- mysql二进制日志(bin-log)配置及相关操作
- java日志系统学习--java.util.log.Level
- java实时读取log日志文件
- java日志系统学习--java.util.log.Level
- java日志记录之Logger.getLogger()和LogFactory.getLog()的区别
- java得到距离指定时间num时间的时间、以及反射调用方法、Log日志配置信息
- java日志操作之Log4j
- Java日志管理:Logger.getLogger()和LogFactory.getLog()的区别(详解Log4j)
- Java日志Log
- 基于服务发现的操作日志服务 foruo-sc-log