예제 #1
0
        protected override void Write(LogEventInfo logEvent)
        {
            if (logEvent.Exception == null)
            {
                return;
            }

            _client = new HoptoadClient(ApiKey, AggregatorUrl);

            string logMessage = logEvent.Exception.ToString();

            string stackTrace = logEvent.Exception.StackTrace.ToString();
            string[] lines = stackTrace.Split('\n');

            IList<HoptoadBackTrack> backTracks = new List<HoptoadBackTrack>();
            foreach (var line in lines)
            {
                char[] delims = { ' ', ',', ':', '\t', '<','>' };
                Console.WriteLine("line: " + line);
                string[] words = line.Split(delims);
                string fileName = words[10];
                string lineNumber = words[12];
                string methodName = words[3];
                Console.WriteLine("file #: " + fileName);
                Console.WriteLine("line #: " + lineNumber);
                Console.WriteLine("method: " + methodName);
                //line
                //file
                //method
                backTracks.Add(new HoptoadBackTrack(lineNumber, fileName, methodName));
            }

            HoptoadMessage message = new HoptoadMessage(
                _appName,
                _appVersion,
                _appUrl,
                logEvent.Exception.GetType().ToString(),
                logMessage,
                backTracks,
                "",
                _environmentName);

            Console.WriteLine("Sending exception data to hoptoad url");
            _client.Send(message);
        }
예제 #2
0
        public void Send(HoptoadMessage message)
        {
            notice notice = new notice
            {
                version = "2.0",
                apikey = _apiKey,
                notifier = new notifier
               {
                   name = message.AppName,
                   version = message.AppVersion,
                   url = message.AppUrl
               },
                error = new error
                {
                    @class = message.ErrorClass,
                    message = message.ErrorMessage
                }
            };

            IList<backtraceLine> backtraceLines = new List<backtraceLine>();
            foreach (HoptoadBackTrack backTrack in message.BackTracks)
            {
                backtraceLines.Add(new backtraceLine()
                                       {
                                           file = backTrack.FileName,
                                           method = backTrack.MethodName,
                                           number = backTrack.LineNumber
                                       });
            }

            notice.error.backtrace = backtraceLines.ToArray();

            notice.serverenvironment = new serverEnvironment { environmentname = message.EnvironmentName };

            StringBuilder sb = new StringBuilder();

            using (StringWriter sw = new StringWriterWithEncoding(sb, Encoding.UTF8))
            {

                Console.WriteLine(sw.Encoding.EncodingName.ToString());

                XmlSerializer serializer = new XmlSerializer(typeof(notice));

                serializer.Serialize(sw, notice);
            }

            Console.WriteLine("This is the document: " + sb.ToString());

               //         HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://hoptoadapp.com/notifier_api/v2/notices");
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(_aggregatorUrl);
            request.Method = "POST";
            request.ContentType = "text/xml; encoding='utf-8'";
            byte[] encodedData = new UTF8Encoding().GetBytes(sb.ToString());

            request.ContentLength = encodedData.Length;

            using (Stream newStream = request.GetRequestStream())
            {
                newStream.Write(encodedData, 0, encodedData.Length);
            }

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            if (response.StatusCode != HttpStatusCode.OK)
            {
                throw new HoptoadException(response.StatusCode.ToString());
            }
        }