public sealed override void OnExit(MethodExecutionArgs args) { try { var log = GetLog(args.Instance, args.Arguments); if (log != null && log.IsTraceEnabled) { var tag = args.MethodExecutionTag; if (tag != null) { var execTag = (ExecutionTag)tag; var end = s_StopWatch.Elapsed - execTag.Begin; execTag.TraceStackHandle.Dispose(); log.Trace(LogFormatters.TraceLeave(m_Message, end.TotalMilliseconds), m_Caller); } } } catch (Exception ex) { var log = new Log <AutoTraceAttribute>(); log.Error("Unexpected error. Please contact your Administrator", ex); } }
public sealed override void OnEntry(MethodExecutionArgs args) { try { m_Caller = args.Method.Name; var log = GetLog(args.Instance, args.Arguments); if (log != null && log.IsTraceEnabled) { var execTag = new ExecutionTag { Begin = s_StopWatch.Elapsed }; args.MethodExecutionTag = execTag; log.Trace(LogFormatters.TraceEnter(m_Message), m_Caller); execTag.TraceStackHandle = TraceStack.Push(LogFormatters.ContextPart(m_Caller)); } } catch (Exception ex) { var log = new Log <AutoTraceAttribute>(); log.Error("Unexpected error. Please contact your Administrator", ex); } }
public void Explore(string path) { if (!_exploredPaths.Contains(path)) { lock (_lockObj) { if (!_exploredPaths.Contains(path)) { var logFormatters = new List <ILogFormatter>(); var reportEventObservers = new List <IReportEventsObserver>(); var commandsListeners = new List <ICommandsListener>(); var currentDirectory = new DirectoryInfo(path); TraceLogger.Info($"Exploring extensions in '{currentDirectory}' directory."); foreach (var file in currentDirectory.GetFiles("*Orangebeard*.dll")) { TraceLogger.Verbose($"Found '{file.Name}' and loading it into current AppDomain."); AppDomain.CurrentDomain.Load(Path.GetFileNameWithoutExtension(file.Name)); } var iLogFormatterExtensionInterfaceType = typeof(ILogFormatter); var iReportEventObserseExtensionInterfaceType = typeof(IReportEventsObserver); var iCommandsListenerInterfaceType = typeof(ICommandsListener); foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies().Where(a => a.GetName().Name.Contains("Orangebeard"))) { if (!_exploredAssemblies.Contains(assembly.Location)) { _exploredAssemblies.Add(assembly.Location); TraceLogger.Verbose($"Exploring '{assembly.FullName}' assembly for extensions."); try { foreach (var type in assembly.GetTypes().Where(t => t.IsClass)) { if (!type.IsAbstract && type.GetConstructors().Any(ctor => ctor.GetParameters().Length == 0)) { if (iLogFormatterExtensionInterfaceType.IsAssignableFrom(type)) { var extension = Activator.CreateInstance(type); logFormatters.Add((ILogFormatter)extension); TraceLogger.Info($"Registered '{type.FullName}' type as {nameof(ILogFormatter)} extension."); } if (iReportEventObserseExtensionInterfaceType.IsAssignableFrom(type)) { var extension = Activator.CreateInstance(type); reportEventObservers.Add((IReportEventsObserver)extension); TraceLogger.Info($"Registered '{type.FullName}' type as {nameof(IReportEventsObserver)} extension."); } if (iCommandsListenerInterfaceType.IsAssignableFrom(type)) { var extension = Activator.CreateInstance(type); commandsListeners.Add((ICommandsListener)extension); TraceLogger.Info($"Registered '{type.FullName}' type as {nameof(ICommandsListener)} extension."); } } } } catch (ReflectionTypeLoadException exp) { TraceLogger.Warn($"Couldn't load '{assembly.GetName().Name}' assembly into domain. \n {exp}"); foreach (var loaderException in exp.LoaderExceptions) { TraceLogger.Error(loaderException.ToString()); } } } } logFormatters.OrderBy(ext => ext.Order).ToList().ForEach(lf => LogFormatters.Add(lf)); reportEventObservers.ToList().ForEach(reo => ReportEventObservers.Add(reo)); commandsListeners.ForEach(cl => CommandsListeners.Add(cl)); _exploredPaths.Add(path); } } } }