예제 #1
0
        public void Register(ITracingProvider <T> provider)
        {
            if (provider == null)
            {
                throw new ArgumentNullException("Tracing provider cannot be null");
            }

            providers.Add(provider);
        }
예제 #2
0
        private static void LoadProvider()
        {
            switch (TracingSettings.Provider.ToLower())
            {
            case "file": _provider = new FileTracingProvider(TracingSettings.Datasource); break;

            case "con": _provider = new StdErrTracingProvider(); break;

            //case "db": _provider = new DbTracingProvider(TracingSettings.Datasource); break;
            default: _provider = null; break;
            }
        }
예제 #3
0
        private static void TraceItemWatcher()
        {
            string pid;
            string pname;

            Process p = Process.GetCurrentProcess();

            pid   = p.Id.ToString();
            pname = p.ProcessName;

            while (true)
            {
                Thread.Sleep(1000);
                try
                {
                    TraceItem[] items;
                    lock (_items)
                    {
                        if (_items.Count < 1)
                        {
                            continue;
                        }
                        items = _items.ToArray();
                        _items.Clear();
                    }

                    try
                    {
                        for (int i = 0; i < items.Length; ++i)
                        {
                            if (items[i].Level == TracingLevel.Crtitical)
                            {
                                WriteEventLog(string.Concat(
                                                  pid, items[i].Timestamp.ToString(" @ yyyy-MM-dd HH:mm:ss.fff "),
                                                  items[i].Logger, Environment.NewLine, Environment.NewLine,
                                                  items[i].Message, Environment.NewLine, Environment.NewLine,
                                                  items[i].Error == null ? string.Empty : items[i].Error.ToString()
                                                  ), true);
                            }
                        }
                    }
                    catch (Exception ex) { Trace.WriteLine(ex); }

                    ITracingProvider provider = _provider;
                    if (provider != null)
                    {
                        provider.Write(pid, pname, Environment.GetEnvironmentVariable("COMPUTERNAME"), items);
                    }
                }
                catch (Exception ex) { WriteEventLog(ex.ToString(), true); }
            }
        }