private void LogDeadLetter(AllDeadLetters d, string doneMsg) { var origin = IsReal(d.Sender) ? $" from {d.Sender}" : ""; var unwrapped = WrappedMessage.Unwrap(d.Message); var messageStr = unwrapped?.GetType().Name ?? "null"; var wrappedIn = (d.Message is IWrappedMessage) ? $" wrapped in [${d.Message.GetType().Name}]" : ""; string logMessage; switch (d) { case Dropped dropped: var destination = IsReal(d.Recipient) ? $" to {d.Recipient}" : ""; logMessage = $"Message [{messageStr}]{wrappedIn}{origin}{destination} was dropped. {dropped.Reason}. " + $"[{_count}] dead letters encountered{doneMsg}. "; break; case UnhandledMessage unhandled: destination = IsReal(d.Recipient) ? $" to {d.Recipient}" : ""; logMessage = $"Message [{messageStr}]{wrappedIn}{origin}{destination} was unhandled. " + $"[{_count}] dead letters encountered{doneMsg}. "; break; default: logMessage = $"Message [{messageStr}]{wrappedIn}{origin} to {d.Recipient} was not delivered. " + $"[{_count}] dead letters encountered{doneMsg}. " + $"If this is not an expected behavior then {d.Recipient} may have terminated unexpectedly. "; break; } _eventStream.Publish(new Info( d.Recipient.Path.ToString(), d.Recipient.GetType(), logMessage + "This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' " + "and 'akka.log-dead-letters-during-shutdown'.")); }
private bool IsWrappedSuppressed(AllDeadLetters d) { return(d is IWrappedMessage w && w.Message is IDeadLetterSuppression); }