private string GetSafeRenderedFormat(object message, string stringRepresentationOfNull = "") { if (message == null) { return(stringRepresentationOfNull); } string str = message as string; if (str != null) { return(str); } if (_logger.Repository != null) { //try to escape the default renderer IObjectRenderer renderer = _logger.Repository.RendererMap.Get(message); if (renderer != null && renderer != _logger.Repository.RendererMap.DefaultRenderer) { StringWriter stringWriter = new StringWriter(System.Globalization.CultureInfo.InvariantCulture); renderer.RenderObject(_logger.Repository.RendererMap, message, stringWriter); return(stringWriter.ToString()); } return(message.ToString()); } return(message.ToString()); }
private static void RenderValue(RendererMap rendererMap, TextWriter writer, object value) { if (value is string) { writer.Write(value); } else { IObjectRenderer keyRenderer = rendererMap.Get(value.GetType()); keyRenderer.RenderObject(rendererMap, value, writer); } }
public void RenderObject(RendererMap rendererMap, object obj, TextWriter writer) { var filteredEnumerable = (obj as IEnumerable)?.Cast <object>().Skip(1); if (filteredEnumerable != null) { rendererMap.FindAndRender(obj.ToString(), writer); if (filteredEnumerable.Any()) { writer.WriteLine(); rendererMap.FindAndRender(filteredEnumerable, writer); } } else { fallback.RenderObject(rendererMap, obj, writer); } }
/// <summary> /// Builds up the message that will get logged /// </summary> private static string BuildMessage(ILog logger, string prefix, EnumerableExpansion expandEnumerables, object[] args) { #region Input validation prefix = (prefix == null ? string.Empty : prefix); if (args == null || args.Length == 0) { return(prefix + NO_ARGUMENTS); } #endregion StringBuilder builder = new StringBuilder(); builder.Append(prefix); object currentObject = null; for (int i = 0; i < args.Length; i++) { currentObject = args[i]; if (i > 0) { builder.Append(ARGUMENT_SEPERATOR); } if (currentObject == null) { builder.Append(NULL_ARGUMENT); } else { //See if the current object has a renderer associated with it. IObjectRenderer renderer = logger.Logger.Repository.RendererMap.Get(currentObject.GetType()); bool useRenderer = (renderer != null); if (expandEnumerables == EnumerableExpansion.DoNotExpand && renderer is DefaultRenderer && currentObject is IEnumerable) //The default renderer will expand enumerbales for us, if this //method was called explicitly stating not to expand the enumerables //then we'll not use the default renderer and just dump out the ToString() { useRenderer = false; } if (currentObject is string) //Strings are also enumerables but we don't want them //to get expanded. { useRenderer = false; } if (useRenderer) //We've got a renderer, this is the preferred way of dumping //out an object { using (TextWriter writer = new StringWriter()) { renderer.RenderObject(logger.Logger.Repository.RendererMap, currentObject, writer); builder.Append(writer.ToString()); } } else //No renderer available, just dump out the ToString of the object. { builder.Append(string.Format(ARGUMENT_PATTERN, currentObject.ToString())); } } } return(builder.ToString()); }