Ejemplo n.º 1
0
        public void ShouldSerializeMessageWithAdditionalFields()
        {
            var dateTime = new DateTime(2015, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
            var message  = new GelfMessageBuilder("Backtrace here\n\nmore stuff", "example.org", dateTime, GelfLevel.Alert)
                           .SetAdditionalField(GelfAdditionalFields.Facility, "facility")
                           .SetAdditionalField(GelfAdditionalFields.LoggerName, "loggerName")
                           .SetAdditionalField(GelfAdditionalFields.ThreadName, "threadName")
                           .SetAdditionalField(GelfAdditionalFields.SourceFileName, "sourceFileName")
                           .SetAdditionalField(GelfAdditionalFields.SourceLineNumber, "sourceLineNumber")
                           .SetAdditionalField(GelfAdditionalFields.SourceClassName, "sourceClassName")
                           .SetAdditionalField(GelfAdditionalFields.SourceMethodName, "sourceMethodName")
                           .ToMessage();

            var serializedMessage = Encoding.UTF8.GetString(serializer.Serialize(message));

            Assert.AreEqual("{\"version\":\"1.1\"," +
                            "\"host\":\"example.org\"," +
                            "\"short_message\":\"Backtrace here\\n\\nmore stuff\"," +
                            "\"full_message\":\"Backtrace here\\n\\nmore stuff\"," +
                            "\"timestamp\":1420070400," +
                            "\"level\":1," +
                            "\"_facility\":\"facility\"," +
                            "\"_loggerName\":\"loggerName\"," +
                            "\"_threadName\":\"threadName\"," +
                            "\"_sourceFileName\":\"sourceFileName\"," +
                            "\"_sourceLineNumber\":\"sourceLineNumber\"," +
                            "\"_sourceClassName\":\"sourceClassName\"," +
                            "\"_sourceMethodName\":\"sourceMethodName\"}", serializedMessage);
        }
        public void WhenMessageBuilding_ShouldIgnorePropertyNames()
        {
            var sut = new GelfMessageBuilder("localhost", new GraylogSinkOptions
            {
                PropertyNamingStrategy = new NoOpPropertyNamingStrategy()
            });

            var @event = new LogEvent(DateTimeOffset.Now, LogEventLevel.Information, null,
                                      new MessageTemplate("abcdef{TestProp}", new List <MessageTemplateToken>
            {
                new TextToken("abcdef", 0),
                new PropertyToken("LongPropertyName", "zxc", alignment: new Alignment(AlignmentDirection.Left, 3)),
                new PropertyToken("Short", "zxc", alignment: new Alignment(AlignmentDirection.Left, 3))
            }), new List <LogEventProperty>
            {
                new LogEventProperty("LongPropertyName", new ScalarValue("zxc")),
                new LogEventProperty("Short", new ScalarValue("zxc")),
                new LogEventProperty("id", new ScalarValue("asd"))
            });

            var actual = sut.Build(@event);

            Assert.Null(actual.Property("_longPropertyName"));
            Assert.Null(actual.Property("_short"));
            Assert.NotNull(actual.Property("_LongPropertyName"));
            Assert.NotNull(actual.Property("_Short"));
        }
        public void WhenGetSimpleEvent_ThenResult_ShouldBeExpected()
        {
            var options = new GraylogSinkOptions();
            var target  = new GelfMessageBuilder("localhost", options);

            var date = DateTimeOffset.Now;

            var expected = new
            {
                facility      = "GELF",
                full_message  = "abcdef\"zxc\"",
                host          = "localhost",
                level         = 2,
                short_message = "abcdef\"zxc\"",
                timestamp     = date.DateTime,
                version       = "1.1",
                _stringLevel  = "Information",
                _TestProp     = "\"zxc\"",
                _id_          = "\"asd\""
            };

            LogEvent logEvent = LogEventSource.GetSimpleLogEvent(date);

            string expectedString = JsonConvert.SerializeObject(expected, Newtonsoft.Json.Formatting.None);
            string actual         = target.Build(logEvent).ToString(Newtonsoft.Json.Formatting.None);
            //actual.ShouldBeEquivalentTo(expectedString);
        }
Ejemplo n.º 4
0
 protected override void Write(LogEventInfo loggingEvent)
 {
     try
     {
         var renderedEvent  = Layout.Render(loggingEvent);
         var messageBuilder = new GelfMessageBuilder(renderedEvent, HostName, loggingEvent.TimeStamp, ToGelf(loggingEvent.Level))
                              .SetAdditionalField(GelfAdditionalFields.Facility, Facility)
                              .SetAdditionalField(GelfAdditionalFields.LoggerName, loggingEvent.LoggerName);
         if (IncludeSource)
         {
             var userStackFrame = loggingEvent.UserStackFrame;
             if (userStackFrame != null)
             {
                 messageBuilder.SetAdditionalField(GelfAdditionalFields.SourceFileName, userStackFrame.GetFileName());
                 messageBuilder.SetAdditionalField(GelfAdditionalFields.SourceLineNumber, userStackFrame.GetFileLineNumber().ToString(CultureInfo.InvariantCulture));
             }
         }
         if (IncludeStackTrace)
         {
             var exception = loggingEvent.Exception;
             if (exception != null)
             {
                 messageBuilder.SetAdditionalField(GelfAdditionalFields.ExceptionMessage, exception.Message);
                 messageBuilder.SetAdditionalField(GelfAdditionalFields.ExceptionStackTrace, exception.StackTrace);
             }
         }
         transport.Send(messageBuilder.ToMessage());
     }
     catch (Exception exception)
     {
         logger.Error("Failed to send message", exception);
     }
 }
Ejemplo n.º 5
0
        protected override void Write(LogEventInfo loggingEvent)
        {
            try
            {
                var renderedEvent  = Layout.Render(loggingEvent);
                var messageBuilder = new GelfMessageBuilder(renderedEvent, HostName, loggingEvent.TimeStamp, ToGelf(loggingEvent.Level))
                                     .SetAdditionalField("facility", Facility)
                                     .SetAdditionalField("loggerName", loggingEvent.LoggerName)
                                     .SetAdditionalField("sequenceId", loggingEvent.SequenceID.ToString());
                if (IncludeSource)
                {
                    var userStackFrame = loggingEvent.UserStackFrame;
                    if (userStackFrame != null)
                    {
                        messageBuilder.SetAdditionalField("sourceFileName", userStackFrame.GetFileName());
                        messageBuilder.SetAdditionalField("sourceLineNumber", userStackFrame.GetFileLineNumber().ToString(CultureInfo.InvariantCulture));
                    }
                }
                if (IncludeStackTrace)
                {
                    var exception = loggingEvent.Exception;
                    if (exception != null)
                    {
                        messageBuilder.SetAdditionalField("exceptionType", exception.GetType().FullName);
                        messageBuilder.SetAdditionalField("exceptionMessage", exception.Message);
                        messageBuilder.SetAdditionalField("exceptionStackTrace", exception.StackTrace);
                    }
                }

                foreach (var parameter in Parameters)
                {
                    var value = parameter.Layout.Render(loggingEvent);
                    if (string.IsNullOrWhiteSpace(value))
                    {
                        continue;
                    }

                    messageBuilder.SetAdditionalField(parameter.Name, value);
                }

                if (IncludeEventProperties)
                {
                    foreach (var property in loggingEvent.Properties)
                    {
                        messageBuilder.SetAdditionalField(property.Key.ToString(), property.Value?.ToString());
                    }
                }

                transport.Send(messageBuilder.ToMessage());
            }
            catch (Exception exception)
            {
                logger.Error("Failed to send message", exception);
            }
        }
        public void TryComplexEvent()
        {
            var options = new GraylogSinkOptions();
            var target  = new GelfMessageBuilder("localhost", options);

            DateTimeOffset date = DateTimeOffset.Now;

            LogEvent logEvent = LogEventSource.GetComplexEvent(date);

            string actual = target.Build(logEvent).ToString(Newtonsoft.Json.Formatting.None);
        }
Ejemplo n.º 7
0
        protected GelfMessageBuilder CreateGelfMessageBuilder(string message, DateTime timeStamp, GelfLevel logLevel)
        {
            var messageBuilder = new GelfMessageBuilder(message, Environment.MachineName.ToUpperInvariant(), timeStamp, logLevel);

            if (_config.AdditionalProperties == null)
            {
                return(messageBuilder);
            }
            foreach (var kvp in _config.AdditionalProperties)
            {
                messageBuilder.SetAdditionalField($"{_config.PropertyPrefix}{kvp.Key}", kvp.Value);
            }
            return(messageBuilder);
        }
Ejemplo n.º 8
0
        protected override void Append(LoggingEvent loggingEvent)
        {
            try
            {
                var renderedEvent  = RenderLoggingEvent(loggingEvent);
                var messageBuilder = new GelfMessageBuilder(renderedEvent, HostName, loggingEvent.TimeStamp, loggingEvent.Level.ToGelf())
                                     .SetAdditionalField("facility", Facility)
                                     .SetAdditionalField("loggerName", loggingEvent.LoggerName)
                                     .SetAdditionalField("threadName", loggingEvent.ThreadName)
                                     .SetAdditionalField("userName", loggingEvent.UserName)
                                     .SetAdditionalField("appDomain", loggingEvent.Domain);
                if (IncludeSource)
                {
                    var locationInformation = loggingEvent.LocationInformation;
                    if (locationInformation != null)
                    {
                        messageBuilder.SetAdditionalField("sourceFileName", locationInformation.FileName)
                        .SetAdditionalField("sourceClassName", locationInformation.ClassName)
                        .SetAdditionalField("sourceMethodName", locationInformation.MethodName)
                        .SetAdditionalField("sourceLineNumber", locationInformation.LineNumber);
                    }
                }
                if (IncludeStackTrace)
                {
                    var exception = loggingEvent.ExceptionObject;
                    if (exception != null)
                    {
                        messageBuilder.SetAdditionalField("exceptionType", exception.GetType().FullName);
                        messageBuilder.SetAdditionalField("exceptionMessage", exception.Message);
                        messageBuilder.SetAdditionalField("exceptionStackTrace", exception.StackTrace);
                    }
                }

                if (IncludeEventProperties)
                {
                    var properties = loggingEvent.Properties;
                    foreach (var propertyKey in properties.GetKeys())
                    {
                        messageBuilder.SetAdditionalField(propertyKey, properties[propertyKey]?.ToString());
                    }
                }

                transport.Send(messageBuilder.ToMessage());
            }
            catch (Exception exception)
            {
                logger.Error("Unable to send logging event to remote host", exception);
            }
        }
        public void GetSimpleLogEvent_GraylogSinkOptionsContainsHost_ReturnsOptionsHost()
        {
            //arrange
            GraylogSinkOptions options = new GraylogSinkOptions()
            {
                Host = "my_host"
            };
            GelfMessageBuilder messageBuilder = new GelfMessageBuilder("localhost", options);
            DateTime           date           = DateTime.UtcNow;
            string             expectedHost   = "my_host";

            //act
            LogEvent logEvent   = LogEventSource.GetSimpleLogEvent(date);
            JObject  actual     = messageBuilder.Build(logEvent);
            string   actualHost = actual.Value <string>("host");

            //assert
            Assert.Equal(expectedHost, actualHost);
        }
Ejemplo n.º 10
0
        protected override void Append(LoggingEvent loggingEvent)
        {
            try
            {
                var renderedEvent  = RenderLoggingEvent(loggingEvent);
                var messageBuilder = new GelfMessageBuilder(renderedEvent, HostName, loggingEvent.TimeStamp, loggingEvent.Level.ToGelf())
                                     .SetAdditionalField(GelfAdditionalFields.Facility, Facility)
                                     .SetAdditionalField(GelfAdditionalFields.LoggerName, loggingEvent.LoggerName)
                                     .SetAdditionalField(GelfAdditionalFields.ThreadName, loggingEvent.ThreadName);

                foreach (var item in _staticOutFields)
                {
                    messageBuilder.SetAdditionalField(item.Name, item.Value);
                }

                if (IncludeSource)
                {
                    var locationInformation = loggingEvent.LocationInformation;
                    if (locationInformation != null)
                    {
                        messageBuilder.SetAdditionalField(GelfAdditionalFields.SourceFileName, locationInformation.FileName)
                        .SetAdditionalField(GelfAdditionalFields.SourceClassName, locationInformation.ClassName)
                        .SetAdditionalField(GelfAdditionalFields.SourceMethodName, locationInformation.MethodName)
                        .SetAdditionalField(GelfAdditionalFields.SourceLineNumber, locationInformation.LineNumber);
                    }
                }
                if (IncludeStackTrace)
                {
                    var exception = loggingEvent.ExceptionObject;
                    if (exception != null)
                    {
                        messageBuilder.SetAdditionalField(GelfAdditionalFields.ExceptionMessage, exception.Message);
                        messageBuilder.SetAdditionalField(GelfAdditionalFields.ExceptionStackTrace, exception.StackTrace);
                    }
                }
                transport.Send(messageBuilder.ToMessage());
            }
            catch (Exception exception)
            {
                logger.Error("Unable to send logging event to remote host", exception);
            }
        }
Ejemplo n.º 11
0
        public void Publish(LogMessage logMessage)
        {
            if (string.IsNullOrEmpty(_host))
            {
                return;
            }

            var str = _loggerFormatter.ApplyFormat(logMessage);

            var builder = new GelfMessageBuilder(str, "Heroes Rage, " + Application.platform);

            var level = GelfLevel.Debug;

            if (logMessage.Level == SimpleLogger.Logger.Level.Error)
            {
                level = GelfLevel.Error;
            }
            else if (logMessage.Level == SimpleLogger.Logger.Level.Warning)
            {
                level = GelfLevel.Warning;
            }

            builder.SetLevel(level);
            builder.SetTimestamp(DateTime.Now);

            if (!string.IsNullOrEmpty(_username))
            {
                builder.SetAdditionalField("user_name", _username);
            }

            if (!string.IsNullOrEmpty(_buildVersion))
            {
                builder.SetAdditionalField("build", _buildVersion);
            }

            if (!string.IsNullOrEmpty(_deviceName))
            {
                builder.SetAdditionalField("device_name", _deviceName);
            }

            if (!string.IsNullOrEmpty(_deviceModel))
            {
                builder.SetAdditionalField("device_model", _deviceModel);
            }

            if (!string.IsNullOrEmpty(_deviceUniqueIdentifier))
            {
                builder.SetAdditionalField("device_id", _deviceUniqueIdentifier);
            }

            if (!string.IsNullOrEmpty(logMessage.CallingClass))
            {
                builder.SetAdditionalField("calling_class", logMessage.CallingClass);
            }

            if (!string.IsNullOrEmpty(logMessage.CallingMethod))
            {
                builder.SetAdditionalField("calling_method", logMessage.CallingMethod);
            }

            if (logMessage.LineNumber > 0)
            {
                builder.SetAdditionalField("line_number", logMessage.LineNumber.ToString());
            }

            var mes = _gelfSerializer.Serialize(builder.ToMessage());

            Debug.Log("Mes = " + mes);

            PushMessage(encoding.GetBytes(mes));
        }
Ejemplo n.º 12
0
        protected void CheckLogProperties(IReadOnlyDictionary <string, LogEventPropertyValue> logEventProperties, GelfMessageBuilder messageBuilder)
        {
            foreach (var property in logEventProperties)
            {
                var propCheckResult = _config.PropertyCatalog.CheckProperty(property.Key, property.Value);
                switch (propCheckResult.CheckResult)
                {
                case GraylogPropertyCheckResultType.Ok:
                    messageBuilder.SetAdditionalField($"{_config.PropertyPrefix}{property.Key}", propCheckResult.PropertyValue);
                    break;

                case GraylogPropertyCheckResultType.ErrorNameNotRegistered:
                    // property not registered as Graylog property - so do not append
                    continue;

                default:
                    if (propCheckResult.ExpectedValueType == GraylogPropertyType.String &&
                        propCheckResult.CheckResult.HasFlag(GraylogPropertyCheckResultType.ErrorValueTypeNotMatching))
                    {
                        // try to correct by converting value into string
                        var conv     = propCheckResult.PropertyValue as IConvertible;
                        var strValue = conv?.ToString(CultureInfo.InvariantCulture) ?? propCheckResult.PropertyValue.ToString();
                        // correct property value by converting to string
                        messageBuilder.SetAdditionalField($"{_config.PropertyPrefix}{property.Key}", strValue);
                        break;
                    }
                    // send value type mismatch event
                    messageBuilder.SetAdditionalField($"{_config.PropertyPrefix}isGelfPropertyError", 1);
                    var msg = CreatePropertyErrorMessage(propCheckResult);
                    SendErrorMessage(msg);
                    break;
                }
            }
        }