Esempio n. 1
0
        public void Report(ErrorKind level, Cursor cursor, int code, string text)
        {
            Error error = new Error(level, cursor, code, text);

            _lock.Acquire();
            _errors.Add(error);
            _lock.Release();

            // update Failed property that indicates whether one or more errors have occured
            switch (level)
            {
                case ErrorKind.Debug    : break;
                case ErrorKind.Error    : _failed = true; break;
                case ErrorKind.Fatal    : _failed = true; break;
                case ErrorKind.Internal : _failed = true; break;
                case ErrorKind.Notice   : break;
                case ErrorKind.Unhandled: _failed = true; break;
                case ErrorKind.Warning  : break;
                default:
                    throw new InternalError("Unknown ErrorKind value encountered: " + level.ToString());
            }

            // don't report the event if the trace level does not allow it
            if (level > _level)
                return;

            System.Text.StringBuilder result = new System.Text.StringBuilder();
            if (cursor != null)
                result.Append(cursor.ToString());
            if (result.Length > 0)
                result.Append(' ');

            string name = null;
            switch (level)
            {
                case ErrorKind.Debug    : name = "DEBUG";           break;
                case ErrorKind.Error    : name = "Error";           break;
                case ErrorKind.Fatal    : name = "Fatal error";     break;
                case ErrorKind.Internal : name = "Internal error";  break;
                case ErrorKind.Notice   : name = null;              break;
                case ErrorKind.Unhandled: name = "Unhandled error"; break;
                case ErrorKind.Warning  : name = "Warning";         break;
                default:
                    throw new InternalError("Unknown ErrorKind value encountered: " + level.ToString());
            }
            if (name != null)
                result.Append(name);
            if (code != 0)
                result.Append(" " + code.ToString());
            if (name != null)
                result.Append(": ");

            result.Append(text);

            _writer.WriteLine(result.ToString());
        }