using log4net; using MethodDecorator.Fody.Interfaces; using Rougamo; using Rougamo.Context; using System.Reflection; using System.Text; using BrilliantSightClient.Model.Extension; namespace BrilliantSightClient.Model.Attributes { [AttributeUsage(AttributeTargets.Method)] public class LogAttribute : MoAttribute { private static readonly ILog Logger = LogManager.GetLogger(typeof(LogAttribute)); public override void OnEntry(MethodContext context) { //Logger.Debug($"Entering {context.Method.DeclaringType?.Name}.{context.Method.Name}"); // 获取方法参数 // var parameters = context.Method.GetParameters(); // var arguments = context.Arguments; // // // 构建参数字符串 // var parameterLog = new StringBuilder(); // for (int i = 0; i < parameters.Length; i++) // { // parameterLog.Append($"{parameters[i].Name} = {arguments[i]}, "); // } // 记录日志 //Logger.Debug($"Entering {context.Method.DeclaringType?.Name}.{context.Method.Name} with parameters: {parameterLog}"); } public override void OnExit(MethodContext context) { //Logger.Debug($"Exiting {context.Method.DeclaringType?.Name}.{context.Method.Name}"); var returnValue = context.ReturnValue; // 获取返回值 if (context.Exception != null) { var parameters = context.Method.GetParameters(); var arguments = context.Arguments; // 构建参数字符串 var parameterLog = new StringBuilder(); for (int i = 0; i < parameters.Length; i++) { parameterLog.Append($"{parameters[i].Name} = {arguments[i].ToSafeAbundantString()}, "); } Logger.Error($"[METS]=============Method Exception Termination[MsgStart]============="); Logger.Error($"Method: {context.Method.DeclaringType?.Name}.{context.Method.Name}"); Logger.Error($"Method Parameters: {parameterLog.ToString()}"); Logger.Error($"Exception: {context.Exception.Message} \r\n{context.Exception.StackTrace}"); Logger.Error($"[METE]=============Method Exception Termination[MsgEnd]==============="); } else { // 记录日志 //Logger.Debug($"[MethodExiting] Exiting {context.Method.DeclaringType?.Name}.{context.Method.Name} with return value: {returnValue}"); } } } }