internal static SysLogService GetInstance() { if (_SysLogService == null) { lock (obj) { if (_SysLogService == null) { _SysLogService = new SysLogService(); } } } return(_SysLogService); }
public override IMessage Invoke(IMessage msg) { //方法启动时间 DateTime startTime = DateTime.Now; //记录方法返回结果 string returnvalue = "null"; Log log = new Log(); //log.Uri = msg.Properties["__Uri"].ToString(); log.IP = ""; log.Mac = ""; log.MethodName = msg.Properties["__MethodName"].ToString(); log.MethodSignature = msg.Properties["__MethodSignature"].ToString(); log.TypeName = msg.Properties["__TypeName"].ToString(); log.CallContext = msg.Properties["__CallContext"].ToString(); log.Project = "AOPTestClient"; object returnIMessage = null; if (msg is IConstructionCallMessage) { //构造函数调用 IConstructionCallMessage constructCallMsg = msg as IConstructionCallMessage; IConstructionReturnMessage constructionReturnMessage = this.InitializeServerObject((IConstructionCallMessage)msg); RealProxy.SetStubData(this, constructionReturnMessage.ReturnValue); //记录方法输入参数 object[] args = constructCallMsg.Args; for (int i = 0; i < args.Length; i++) { log.Args += args[i].ToString() + ","; } returnIMessage = constructionReturnMessage; } else { //非构造函数调用 IMethodCallMessage callMsg = msg as IMethodCallMessage; IMessage message; try { object[] args = callMsg.Args; object o = callMsg.MethodBase.Invoke(GetUnwrappedServer(), args); message = new ReturnMessage(o, args, args.Length, callMsg.LogicalCallContext, callMsg); //记录方法输入参数 for (int i = 0; i < args.Length; i++) { log.Args += args[i].ToString() + ","; } } catch (Exception e) { message = new ReturnMessage(e, callMsg); returnvalue = e.InnerException.ToString(); } if (message.Properties["__Return"] != null) { returnvalue = message.Properties["__Return"].ToString(); } log.ReturnValue = returnvalue; Console.WriteLine(returnvalue); returnIMessage = message; } //方法结束时间 DateTime endTime = DateTime.Now; log.UseTime = (endTime - startTime).ToString(); //写入日志到数据库 SysLogService.GetInstance().InsertAccessLog(log); return(returnIMessage as IMessage); }