/// <summary> /// Writes the internal. /// </summary> /// <param name="level">The level.</param> /// <param name="message">The message.</param> private void WriteInternal(LogLevel level, string message) { if (!_level.HasFlag(level)) { return; } var type = LevelToEventLogEntryType(level); if (message.Length > MaximumPayloadLengthChars) { message = message.Substring(0, MaximumPayloadLengthChars); } _log.WriteEntry(message, type, _eventIdProvider.ComputeEventId(message)); }
/// <summary> /// Emit the provided log event to the sink. /// </summary> /// <param name="logEvent">The log event to write.</param> /// <remarks> /// <see cref="LogEventLevel.Debug" />, <see cref="LogEventLevel.Information" /> and <see cref="LogEventLevel.Verbose" /> are registered as <see cref="EventLogEntryType.Information" />. /// <see cref="LogEventLevel.Error" />, <see cref="LogEventLevel.Fatal" /> are registered as <see cref="EventLogEntryType.Error" />. /// <see cref="LogEventLevel.Warning" /> are registered as <see cref="EventLogEntryType.Warning" />. /// The Event ID in the Windows log will be set to the integer value of the <paramref name="logEvent"/>'s <see cref="LogEvent.Level"/> property, so that the log can be filtered with more granularity.</remarks> public void Emit(LogEvent logEvent) { if (logEvent == null) { throw new ArgumentNullException(nameof(logEvent)); } var type = LevelToEventLogEntryType(logEvent.Level); var payloadWriter = new StringWriter(); _textFormatter.Format(logEvent, payloadWriter); // The payload is limited in length and allowed chars, see: https://msdn.microsoft.com/en-us/library/e29k5ebc%28v=vs.110%29.aspx var payload = payloadWriter.ToString(); if (payload.Length > MaximumPayloadLengthChars) { SelfLog.WriteLine("Trimming long event log entry payload to {0} characters", MaximumPayloadLengthChars); payload = payload.Substring(0, MaximumPayloadLengthChars); } _log.WriteEntry(payload, type, _eventIdProvider.ComputeEventId(logEvent)); }