コード例 #1
0
 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);
     }
 }
コード例 #2
0
 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);
     }
 }
コード例 #3
0
        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);
                    }
                }
            }
        }