示例#1
0
        public static void AddSniffer(string url, string[] loggerPrefix, TracingLevel level, string from, string to)
        {
            RemoveSniffer(url);
            if (_sniffers.Count >= TracingSniffer.MaxSniffer)
            {
                throw new NotSupportedException("Over Max Sniffer");
            }

            TracingSniffer newSniffer = new TracingSniffer(url, level, from, to);

            _sniffers.Add(newSniffer);

            lock (_syncRoot) {
                foreach (var k in _loggers)
                {
                    foreach (string pre in loggerPrefix)
                    {
                        if (pre == "*" || k.Value.LoggerName.StartsWith(pre))
                        {
                            k.Value.AddSniffer(newSniffer);
                        }
                    }
                }
            }
        }
示例#2
0
 private static void Trace(TracingLevel tracingLevel, string message)
 {
     if (tracingLevel >= CurrentTracingLevel)
     {
         TraceImpl(string.Format("{0}: {1}", tracingLevel.ToString(), message));
     }
 }
示例#3
0
 /// <summary>
 ///     处理当前日志的通知
 /// <para>* 只有在满足当前日志等级后,才会调用此方法</para>
 /// </summary>
 /// <param name="level">日志级别</param>
 /// <param name="ex">异常对象</param>
 /// <param name="message">错误消息</param>
 /// <param name="loggerType">记录器类型名称</param>
 public void Handle(TracingLevel level, System.Exception ex, string message, string loggerType)
 {
     if (!SystemWorker.IsInitialized)
     {
         return;
     }
     if (level == TracingLevel.Info)
     {
         return;
     }
     //BusinessMessageTransaction lgsTransaction = SystemWorker.CreateOnewayTransaction("LGS");
     //if (lgsTransaction == null || lgsTransaction is FailMessageTransaction)
     //{
     //    _tracing.LogFileOnly(TracingLevel.Error, "#Cannot connect to remote {0} service currently.", "LGS");
     //    return;
     //}
     //string detail = string.Empty;
     //while (ex != null && ex.InnerException != null) ex = ex.InnerException;
     //if (ex != null) detail = "#" + ex.Message;
     //CreateLogRequestMessage requestMessage = new CreateLogRequestMessage
     //{
     //    ProcessLevel = Convert.ToByte((int)level),
     //    ClassName = loggerType,
     //    ProcessInfo = message,
     //    ServiceName = SystemWorker.Role,
     //    ProcessDetail = detail,
     //    CreateTime = DateTime.Now,
     //    ProcessTrace = ex.StackTrace
     //};
     //lgsTransaction.SendRequest(requestMessage);
 }
示例#4
0
 private static void OnTracingLevelChanged(TracingLevel newTracingLevel)
 {
     if (TracingLevelChanged != null)
     {
         TracingLevelChanged(newTracingLevel);
     }
 }
示例#5
0
        public static void LogMessage(TracingLevel Level, string Message)
        {
            switch (Level)
            {
            case TracingLevel.DEBUG:
                _log.Debug(Message);
                break;

            case TracingLevel.INFO:
                _log.Info(Message);
                break;

            case TracingLevel.WARN:
                _log.Warn(Message);
                break;

            case TracingLevel.ERROR:
                _log.Error(Message);
                break;

            case TracingLevel.FATAL:
                _log.Fatal(Message);
                break;
            }
        }
示例#6
0
 protected override void TraceFileOnly(TracingLevel level, string format, params object[] args)
 {
     try
     {
         if (level >= TracingSettings.Level)
         {
             string message = string.Empty;
             try
             {
                 message = args.Length == 0 ? format : string.Format(format ?? string.Empty, args);
                 TracingManager.AddTraceItem(new TraceItem(_logger, level, null, message));
             }
             catch (System.Exception ex)
             {
                 if (level < TracingLevel.Warn)
                 {
                     level = TracingLevel.Warn;
                 }
                 message = string.Concat("tracing formatting error: [", args.Length, "] ", format ?? string.Empty);
                 TracingManager.AddTraceItem(new TraceItem(_logger, level, ex, message));
             }
         }
     }
     catch
     {
         // mute everything...
     }
 }
示例#7
0
        private static void ReloadConfiguration()
        {
            _level = _configSection.Level;
            List <IAppender> appenders = new List <IAppender>();

            foreach (TracingConfigAppenderItem item in _configSection.Appenders.Values)
            {
                switch (item.Type)
                {
                case AppenderType.Console:
                    appenders.Add(new TracingConsoleAppender(item.Enabled));
                    break;

                case AppenderType.Database:
                    appenders.Add(new TracingDatabaseAppender(item.Path, item.Enabled));
                    break;

                case AppenderType.Text:
                    var a = new TracingTextAppender(item.Path, item.Enabled);
                    appenders.Add(a);
                    _backupAppender = a;
                    break;
                }
            }
            _appenders = appenders;
        }
示例#8
0
 /// <summary>
 ///     记录项
 /// </summary>
 public TraceItem(string logger, TracingLevel level, Exception error, string message)
 {
     Timestamp = DateTime.UtcNow;
     Logger    = logger;
     Level     = level;
     Error     = error;
     Message   = message;
 }
示例#9
0
 private static void Trace(TracingLevel tracingLevel, string format, params object[] args)
 {
     if (tracingLevel >= CurrentTracingLevel)
     {
         string message = string.Format(format, args);
         TraceImpl(string.Format("{0}: {1}", tracingLevel.ToString(), message));
     }
 }
示例#10
0
        private void WriteLog(int sniffMask, TracingLevel level, Exception ex, string from, string to, string message)
        {
            // NextVersion
            //int repeat;
            //if (TracingManager.AntiRepeat && !sniffed) {
            //    if (AntiRepeater.IsRepeated(out repeat)) {
            //        return;
            //    }
            //} else {
            //    repeat = 1;
            //}

            //if (repeat > 1) {
            //    message = string.Format("!!!Repeat {0} times in last 5 seconds\r\n{1}", repeat, message);
            //}

            TracingEvent evt = new TracingEvent();

            evt.Level        = level;
            evt.LoggerName   = _loggerName;
            evt.Time         = DateTime.Now;
            evt.Message      = message;
            evt.ProcessInfo  = ServiceEnvironment.ProcessInfo;
            evt.ServiceName  = ServiceEnvironment.ServiceName;
            evt.ComputerName = ServiceEnvironment.ComputerName;
            evt.ThreadInfo   = TracingHelper.FormatThreadInfo(Thread.CurrentThread);
            evt.From         = from ?? "";
            evt.To           = to ?? "";
            evt.Error        = ex == null ? "" : ex.ToString();
            evt.Repeat       = 1;       // repeat;

            if (sniffMask > 0)
            {
                for (int i = 0; i < TracingSniffer.MaxSniffer; i++)
                {
                    if ((sniffMask & (1 << i)) > 0)
                    {
                        TracingSniffer sniffer = _sniffers[i];
                        if (sniffer != null)
                        {
                            sniffer.Enqueue(evt);
                        }
                    }
                }
            }
            if (evt.Level == TracingLevel.Error)
            {
                _observerItem.LastError = evt.Message;
                if (ex != null)
                {
                    _observerItem.LastException = evt.Error;
                }
            }
            TracingManager.Enqueue(evt);
        }
示例#11
0
        static TracingManager()
        {
            _queueTracing = new LazyQueue<TracingEvent>("TracingManager.QueueTracing", 32, 50, TracingDequeueAction);
            _queueLog = new LazyQueue<SystemLogEvent>("TracingManager.QueueLog", 32, 50, SystemLogDequeueAction);
            _configSection = IICConfigSection.CreateDefault<TracingConfigSection>();
            _level = TracingLevel.Off;
            ReloadConfiguration();

            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledException);
            Trace.Listeners.Add(new DebugTraceListener());

            ObserverManager.RegisterObserver("Tracing", ObserveProc, ClearObserver);
        }
示例#12
0
        public void LogException(TracingLevel level, Exception exception)
        {
            switch (level)
            {
            case TracingLevel.ERROR:
                Log.Error(exception);
                break;

            case TracingLevel.FATAL:
                Log.Fatal(exception);
                break;
            }
        }
示例#13
0
        public TracingSniffer(string url, TracingLevel level, string from, string to)
        {
            _url            = url;
            _level          = level;
            _from           = from;
            _to             = to;
            _enabled        = true;
            _queueTracing   = new LazyQueue <TracingEvent>("TracingSniffer.Tracing", 32, 50, DequeueActionTracing);
            _queueSystemLog = new LazyQueue <SystemLogEvent>("TracingSniffer.SystemLog", 32, 50, DequeueActionSystemLog);

            _proxy = RpcProxyFactory.GetProxy <ITracingSniffer>(_url);
            // _proxy.ShutUp = true;
        }
示例#14
0
        static TracingManager()
        {
            _queueTracing  = new LazyQueue <TracingEvent>("TracingManager.QueueTracing", 32, 50, TracingDequeueAction);
            _queueLog      = new LazyQueue <SystemLogEvent>("TracingManager.QueueLog", 32, 50, SystemLogDequeueAction);
            _configSection = IICConfigSection.CreateDefault <TracingConfigSection>();
            _level         = TracingLevel.Off;
            ReloadConfiguration();

            //AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledException);
            //Trace.Listeners.Add(new DebugTraceListener());

            ObserverManager.RegisterObserver("Tracing", ObserveProc, ClearObserver);
        }
示例#15
0
        public static void Trace(object sender, TracingLevel level, string message, params object[] args)
        {
            if (args != null && args.Length > 0)
            {
                message = string.Format(message, args);
            }

            Trace(new TraceMessage()
            {
                Level = level,
                Sender = sender,
                Message = message,
            });
        }
示例#16
0
        public static void Trace(object sender, TracingLevel level, string message, params object[] args)
        {
            if (args != null && args.Length > 0)
            {
                message = string.Format(message, args);
            }

            Trace(new TraceMessage()
            {
                Level   = level,
                Sender  = sender,
                Message = message,
            });
        }
示例#17
0
        /// <summary>
        /// The constructor starts the measurement. This is to be used in a using block.
        /// </summary>
        /// <param name="message">Tracing Message.</param>
        /// <param name="category">Tracing Category.</param>
        /// <param name="tracingLevel">Der Level der Nachricht.</param>
        public TraceCodeTime(string message, string category, TracingLevel tracingLevel = TracingLevel.Info)
        {
            _message      = message;
            _category     = category;
            _tracingLevel = tracingLevel;

            string msg = string.Format("{0} - {1} - {2}", message, category, tracingLevel.ToString());

#if DEBUG
            Trace.TraceInformation(msg);
#endif

            _stopwatch.Start();
        }
示例#18
0
        protected override void Trace(TracingLevel level, Exception error, string format, object[] args, ConsoleColor color = ConsoleColor.Gray)
        {
            try
            {
                string message = ((args == null || args.Length == 0) ? format : string.Format(format ?? string.Empty, args));
                #region Output message to Console.

                switch (level)
                {
                case TracingLevel.Debug:
                    Console.ForegroundColor = color;
                    Console.WriteLine(message);
                    Console.ForegroundColor = ConsoleColor.Gray;
                    break;

                case TracingLevel.Warn:
                    Console.ForegroundColor = ConsoleColor.DarkYellow;
                    Console.WriteLine(message);
                    Console.ForegroundColor = ConsoleColor.Gray;
                    break;

                case TracingLevel.Error:
                    Console.ForegroundColor = ConsoleColor.DarkRed;
                    Console.WriteLine(message);
                    Console.ForegroundColor = ConsoleColor.Gray;
                    break;

                case TracingLevel.Crtitical:
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine(message);
                    Console.ForegroundColor = ConsoleColor.Gray;
                    break;
                }

                #endregion
                if (level >= TracingSettings.Level)
                {
                    TracingManager.AddTraceItem(new TraceItem(_logger, level, error, message));
                    if (TracingManager.NotificationHandler != null)
                    {
                        TracingManager.NotificationHandler.Handle(level, error, message, _logger);
                    }
                }
            }
            catch
            {
                // mute everything...
            }
        }
示例#19
0
        public static void AddSniffer(string url, string[] loggerPrefix, TracingLevel level, string from, string to)
        {
            RemoveSniffer(url);

            TracingSniffer newSniffer = new TracingSniffer(url, level, from, to);
            _sniffers.Add(newSniffer);

            lock (_syncRoot) {
                foreach (var k in _loggers) {
                    foreach (string pre in loggerPrefix) {
                        if (pre == "*" || k.Value.LoggerName.StartsWith(pre)) {
                            k.Value.AddSniffer(newSniffer);
                        }
                    }
                }
            }
        }
示例#20
0
        public void LogMessage(TracingLevel level, string message)
        {
            switch (level)
            {
            case TracingLevel.DEBUG:
                Log.Debug(message);
                break;

            case TracingLevel.INFO:
                Log.Info(message);
                break;

            case TracingLevel.WARN:
                Log.Warn(message);
                break;
            }
        }
示例#21
0
        public static void AddSniffer(string url, string[] loggerPrefix, TracingLevel level, string from, string to)
        {
            RemoveSniffer(url);

            TracingSniffer newSniffer = new TracingSniffer(url, level, from, to);

            _sniffers.Add(newSniffer);

            lock (_syncRoot) {
                foreach (var k in _loggers)
                {
                    foreach (string pre in loggerPrefix)
                    {
                        if (pre == "*" || k.Value.LoggerName.StartsWith(pre))
                        {
                            k.Value.AddSniffer(newSniffer);
                        }
                    }
                }
            }
        }
示例#22
0
        public void SetTracingLevelTest()
        {
            //Register for event notification
            TracingLevel eventLevel = TracingLevel.Error;
            bool         eventFired = false;

            TraceQueue.TracingLevelChanged += (newLevel) =>
            {
                eventFired = true;
                eventLevel = newLevel;
            };

            //Change our way through tracing levels
            foreach (TracingLevel level in Enum.GetValues(typeof(TracingLevel)))
            {
                eventFired = false;
                TraceQueue.TracingLevel = level;
                Assert.AreEqual(level, TraceQueue.TracingLevel, "Level was not set correctly");
                Assert.IsTrue(eventFired, "TracingLevelChanged event did not fire");
                Assert.AreEqual(level, eventLevel, "TracingLevelChanged event fired, but with incorrect value");
            }
        }
示例#23
0
        /// <summary>
        /// Maps <see cref="TracingLevel"/> to <see cref="LogLevel"/>.
        /// Default is <see cref="LogLevel.None"/>
        /// </summary>
        /// <param name="traceLevel"></param>
        /// <returns></returns>
        private LogLevel mapToLogLevel(TracingLevel traceLevel)
        {
            switch (traceLevel)
            {
            case TracingLevel.Level1:
                return(LogLevel.Critical);

            case TracingLevel.Level2:
                return(LogLevel.Error);

            case TracingLevel.Level3:
                return(LogLevel.Information);

            case TracingLevel.Level4:
                return(LogLevel.Trace);

            case TracingLevel.TraceOff:
                return(LogLevel.None);

            default:
                return(LogLevel.None);
            }
        }
示例#24
0
        private bool CanLog(TracingLevel level, string from, string to, out int sniffMask)
        {
            sniffMask = 0;
            if (_sniffers != null)
            {
                try {
                    for (int i = 0; i < TracingSniffer.MaxSniffer; i++)
                    {
                        TracingSniffer sniffer = _sniffers[i];
                        if (sniffer != null)
                        {
                            if (sniffer.CanSniff(level, from, to))
                            {
                                sniffMask |= (1 << i);
                            }
                        }
                    }
                } catch (Exception ex) {
                    SystemLog.Unexcepted(ex);
                }
            }

            return((level >= TracingManager.Level) || (sniffMask > 0));
        }
示例#25
0
 private static bool CanLog(TracingLevel level, out bool sniffered)
 {
     sniffered = false;
     return(level >= Level);
 }
示例#26
0
 private bool CanLog(TracingLevel level, out int sniffMask)
 {
     return(CanLog(level, "", "", out sniffMask));
 }
示例#27
0
 public void TraceMessage(TracingLevel traceLevel, int eventId, string msg, params object[] myParams)
 {
     trace(TraceEventType.Information, LogLevel.Information, eventId, null, msg, myParams);
 }
示例#28
0
 public void TraceError(TracingLevel traceLevel, int eventId, Exception err, string msg, params object[] myParams)
 {
     trace(TraceEventType.Error, LogLevel.Error, eventId, err, msg, myParams);
 }
示例#29
0
 public void TraceWarning(TracingLevel traceLevel, int eventId, string msg, params object[] myParams)
 {
     trace(TraceEventType.Warning, LogLevel.Warning, eventId, null, msg, myParams);
 }
示例#30
0
 public static void Trace(TracingLevel level, string message, params object[] args)
 {
     Trace(null, level, message, args);
 }
示例#31
0
 public static void Trace(TracingLevel level, string message, params object[] args)
 {
     Trace(null, level, message, args);
 }
示例#32
0
 private bool CanLog(TracingLevel level, out int sniffMask)
 {
     return CanLog(level, "", "", out sniffMask);
 }
示例#33
0
        private bool CanLog(TracingLevel level, string from, string to, out int sniffMask)
        {
            sniffMask = 0;
            if (_sniffers != null) {
                try {
                    for (int i = 0; i < TracingSniffer.MaxSniffer; i++) {
                        TracingSniffer sniffer = _sniffers[i];
                        if (sniffer != null) {
                            if (sniffer.CanSniff(level, from, to))
                                sniffMask |= (1 << i);
                        }
                    }
                } catch (Exception ex) {
                    SystemLog.Unexcepted(ex);
                }
            }

            return (level >= TracingManager.Level) || (sniffMask > 0);
        }
 public override void SetDefaultValue()
 {
     Level = TracingLevel.Off;
     Appenders = new IICConfigItemCollection<AppenderType, TracingConfigAppenderItem>();
 }
示例#35
0
        private static void ReloadConfiguration()
        {
            _level = _configSection.Level;
            List<IAppender> appenders = new List<IAppender>();

            foreach (TracingConfigAppenderItem item in _configSection.Appenders.Values) {
                switch (item.Type) {
                    case AppenderType.Console:
                        appenders.Add(new TracingConsoleAppender(item.Enabled));
                        break;
                    case AppenderType.Database:
                        appenders.Add(new TracingDatabaseAppender(item.Path, item.Enabled));
                        break;
                    case AppenderType.Text:
                        appenders.Add(new TracingTextAppender(item.Path, item.Enabled));
                        break;
                }
            }
            _appenders = appenders;
        }
示例#36
0
 public bool CanSniff(TracingLevel level, string from, string to)
 {
     return(CanSniff(level) &&
            string.IsNullOrEmpty(_from) ? true : (from == _from) &&
            string.IsNullOrEmpty(_to) ? true : (to == _to));
 }
示例#37
0
 public static void LogMessage(TracingLevel Level, Exception exception)
 {
     LogMessage(Level, exception.Message);
 }
示例#38
0
        private void WriteLog(int sniffMask, TracingLevel level, Exception ex, string from, string to, string message)
        {
            // NextVersion
            //int repeat;
            //if (TracingManager.AntiRepeat && !sniffed) {
            //    if (AntiRepeater.IsRepeated(out repeat)) {
            //        return;
            //    }
            //} else {
            //    repeat = 1;
            //}

            //if (repeat > 1) {
            //    message = string.Format("!!!Repeat {0} times in last 5 seconds\r\n{1}", repeat, message);
            //}

            TracingEvent evt = new TracingEvent();
            evt.Level = level;
            evt.LoggerName = _loggerName;
            evt.Time = DateTime.Now;
            evt.Message = message;
            evt.ProcessInfo = ServiceEnviornment.ProcessInfo;
            evt.ServiceName = ServiceEnviornment.ServiceName;
            evt.ComputerName = ServiceEnviornment.ComputerName;
            evt.ThreadInfo = TracingHelper.FormatThreadInfo(Thread.CurrentThread);
            evt.From = from;
            evt.To = to;
            evt.Error = ex == null ? "" : ex.ToString();
            evt.Repeat = 1; // repeat;

            if (sniffMask > 0) {
                for (int i = 0; i < TracingSniffer.MaxSniffer; i++) {
                    if ((sniffMask & (1 << i)) > 0) {
                        TracingSniffer sniffer = _sniffers[i];
                        if (sniffer != null)
                            sniffer.Enqueue(evt);
                    }
                }

            }
            if (evt.Level == TracingLevel.Error) {
                _observerItem.LastError = evt.Message;
                if (ex != null)
                    _observerItem.LastException = evt.Error;

            }
            TracingManager.Enqueue(evt);
        }
示例#39
0
 private static void OnTracingLevelChanged(TracingLevel newTracingLevel)
 {
     if (TracingLevelChanged != null)
         TracingLevelChanged(newTracingLevel);
 }
示例#40
0
 public override void SetDefaultValue()
 {
     Level     = TracingLevel.Off;
     Appenders = new IICConfigItemCollection <AppenderType, TracingConfigAppenderItem>();
 }
示例#41
0
 private static bool CanLog(TracingLevel level, out bool sniffered)
 {
     sniffered = false;
     return level >= Level;
 }