Exemple #1
0
        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());
        }