public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            RavenLogLevel logLevel = (RavenLogLevel)value;

            switch (logLevel)
            {
            case RavenLogLevel.Debug:
                writer.WriteValue("debug");
                break;

            case RavenLogLevel.Info:
                writer.WriteValue("info");
                break;

            case RavenLogLevel.Warning:
                writer.WriteValue("warning");
                break;

            case RavenLogLevel.Error:
                writer.WriteValue("error");
                break;

            case RavenLogLevel.Fatal:
                writer.WriteValue("fatal");
                break;
            }
        }
Example #2
0
        internal async Task <RavenPayload> GeneratePayloadAsync(string message, RavenLogLevel level, IDictionary <string, string> tags, IDictionary <string, object> extra)
        {
            RavenPayload payload = await GetBasePayloadAsync(level, tags, extra);

            payload.Message = message;

            return(payload);
        }
Example #3
0
        internal async Task <RavenPayload> GeneratePayloadAsync(string message, RavenLogLevel level, IDictionary <string, string> tags, IDictionary <string, object> extra, string[] fingerprint)
        {
            RavenPayload payload = await GetBasePayloadAsync(level, tags, extra, fingerprint).ConfigureAwait(false);

            payload.Message = message;

            return(payload);
        }
Example #4
0
        internal async Task ProcessExceptionAsync(Exception ex, RavenLogLevel level, IDictionary <string, string> tags, IDictionary <string, object> extra, bool forceSend)
        {
            RavenPayload payload = await GeneratePayloadAsync(ex, level, tags, extra);

            if (forceSend)
            {
                await SendPayloadAsync(payload);
            }
            else
            {
                await StorePayloadAsync(payload);
            }
        }
Example #5
0
        internal async Task ProcessMessageAsync(string message, RavenLogLevel level, IDictionary <string, string> tags, IDictionary <string, object> extra, string[] fingerprint, bool forceSend)
        {
            RavenPayload payload = await GeneratePayloadAsync(message, level, tags, extra, fingerprint);

            if (forceSend)
            {
                await SendPayloadAsync(payload).ConfigureAwait(false);
            }
            else
            {
                await StorePayloadAsync(payload).ConfigureAwait(false);
            }
        }
Example #6
0
        private async Task <RavenPayload> GetBasePayloadAsync(RavenLogLevel level, IDictionary <string, string> tags, IDictionary <string, object> extra)
        {
            RavenPayload payload = new RavenPayload()
            {
                EventID   = Guid.NewGuid().ToString("n"),
                Project   = Dsn.ProjectID,
                Level     = level,
                Timestamp = DateTime.UtcNow,
                Platform  = _platform.PlatformTag,
                Logger    = String.IsNullOrEmpty(Logger) ? "root" : Logger,
                User      = _user,
                Tags      = await SetDefaultTagsAsync(tags),
                Extra     = SetDefaultExtra(extra)
            };

            return(payload);
        }
Example #7
0
        internal async Task <RavenPayload> GeneratePayloadAsync(Exception ex, RavenLogLevel level, IDictionary <string, string> tags, IDictionary <string, object> extra)
        {
            string exceptionName    = ex.GetBaseException().GetType().FullName;
            string exceptionMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message;

            RavenPayload payload = await GetBasePayloadAsync(level, tags, extra);

            payload.Message    = String.Format("{0}: {1}", exceptionName, exceptionMessage);
            payload.Exceptions = ex.EnumerateAllExceptions().ToList();
            payload.Stacktrace = payload.Exceptions?.LastOrDefault()?.Stacktrace;
            var lastFrame = payload.Stacktrace?.Frames?.LastOrDefault();

            if (lastFrame != null)
            {
                payload.Culprit = String.Format("{0} in {1}", lastFrame.Method, lastFrame.Filename);
            }

            return(payload);
        }
Example #8
0
 /// <summary>
 /// Captures an exception.
 /// </summary>
 /// <param name="ex">The <see cref="System.Exception"/> to capture.</param>
 /// <param name="forceSend">Whether to send the request immediately upon capture.</param>
 /// <param name="level">The level this exception should be logged at.</param>
 /// <param name="tags">Any additional tags to be sent with this exception.</param>
 /// <param name="extra">Any additional extra data to be sent with this exception.</param>
 public void CaptureExceptionAsync(Exception ex, bool forceSend = false, RavenLogLevel level = RavenLogLevel.Error, IDictionary <string, string> tags = null, IDictionary <string, object> extra = null)
 {
     ProcessExceptionAsync(ex, level, tags, extra, forceSend).ContinueWith(t => HandleInternalException(t.Exception), TaskContinuationOptions.OnlyOnFaulted);
 }
Example #9
0
        private async Task<RavenPayload> GetBasePayloadAsync(RavenLogLevel level, IDictionary<string, string> tags, IDictionary<string, object> extra)
        {
            RavenPayload payload = new RavenPayload()
            {
                EventID = Guid.NewGuid().ToString("n"),
                Project = Dsn.ProjectID,
                Level = level,
                Timestamp = DateTime.UtcNow,
                Platform = _platform.PlatformTag,
                Logger = String.IsNullOrEmpty(Logger) ? "root" : Logger,
                User = _user,
                Tags = await SetDefaultTagsAsync(tags),
                Extra = SetDefaultExtra(extra)
            };

            return payload;
        }
Example #10
0
        internal async Task<RavenPayload> GeneratePayloadAsync(Exception ex, RavenLogLevel level, IDictionary<string, string> tags, IDictionary<string, object> extra)
        {
            string exceptionName = ex.GetBaseException().GetType().FullName;
            string exceptionMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message;

            RavenPayload payload = await GetBasePayloadAsync(level, tags, extra);
            payload.Message = String.Format("{0}: {1}", exceptionName, exceptionMessage);
            payload.Exceptions = ex.EnumerateAllExceptions().ToList();
            payload.Stacktrace = payload.Exceptions?.LastOrDefault()?.Stacktrace;
            var lastFrame = payload.Stacktrace?.Frames?.LastOrDefault();
            if (lastFrame != null)
                payload.Culprit = String.Format("{0} in {1}", lastFrame.Method, lastFrame.Filename);

            return payload;
        }
Example #11
0
        internal async Task<RavenPayload> GeneratePayloadAsync(string message, RavenLogLevel level, IDictionary<string, string> tags, IDictionary<string, object> extra)
        {
            RavenPayload payload = await GetBasePayloadAsync(level, tags, extra);
            payload.Message = message;

            return payload;
        }
Example #12
0
        internal async Task ProcessExceptionAsync(Exception ex, RavenLogLevel level, IDictionary<string, string> tags, IDictionary<string, object> extra, bool forceSend)
        {
            RavenPayload payload = await GeneratePayloadAsync(ex, level, tags, extra);

            if (forceSend)
                await SendPayloadAsync(payload);
            else
                await StorePayloadAsync(payload);
        }
Example #13
0
 /// <summary>
 /// Captures an exception.
 /// </summary>
 /// <param name="ex">The <see cref="System.Exception"/> to capture.</param>
 /// <param name="forceSend">Whether to send the request immediately upon capture.</param>
 /// <param name="level">The level this exception should be logged at.</param>
 /// <param name="tags">Any additional tags to be sent with this exception.</param>
 /// <param name="extra">Any additional extra data to be sent with this exception.</param>
 public void CaptureExceptionAsync(Exception ex, bool forceSend = false, RavenLogLevel level = RavenLogLevel.Error, IDictionary<string, string> tags = null, IDictionary<string, object> extra = null)
 {
     ProcessExceptionAsync(ex, level, tags, extra, forceSend).ContinueWith(t => HandleInternalException(t.Exception), TaskContinuationOptions.OnlyOnFaulted);
 }
Example #14
0
 /// <summary>
 /// Captures an exception.
 /// </summary>
 /// <param name="ex">The <see cref="System.Exception"/> to capture.</param>
 /// <param name="forceSend">Whether to send the request immediately upon capture.</param>
 /// <param name="level">The level this exception should be logged at.</param>
 /// <param name="tags">Any additional tags to be sent with this exception.</param>
 /// <param name="extra">Any additional extra data to be sent with this exception.</param>
 public async Task CaptureExceptionAsync(Exception ex, bool forceSend = false, RavenLogLevel level = RavenLogLevel.Error, IDictionary <string, string> tags = null, IDictionary <string, object> extra = null)
 {
     try
     {
         await ProcessExceptionAsync(ex, level, tags, extra, forceSend).ConfigureAwait(false);
     }
     catch (Exception e)
     {
         HandleInternalException(e);
     }
 }
Example #15
0
 /// <summary>
 /// Captures a message.
 /// </summary>
 /// <param name="message">The message text to be logged.</param>
 /// <param name="forceSend">Whether to send the request immediately upon capture.</param>
 /// <param name="level">The level this message should be logged at.</param>
 /// <param name="tags">Any additional tags to be sent with this message.</param>
 /// <param name="extra">Any additional extra data to be sent with this message.</param>
 /// <param name="fingerprint">Any additional fingerprint to be sent with this message.</param>
 public async Task CaptureMessageAsync(string message, bool forceSend = false, RavenLogLevel level = RavenLogLevel.Info, IDictionary <string, string> tags = null, IDictionary <string, object> extra = null, string[] fingerprint = null)
 {
     try
     {
         await ProcessMessageAsync(message, level, tags, extra, fingerprint, forceSend).ConfigureAwait(false);
     }
     catch (Exception e)
     {
         HandleInternalException(e);
     }
 }