コード例 #1
0
        public static LogItem LogAsToString(string message, object o, ImageType i)
        {
            string[] lines = o.ToString().Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
            if (lines.Length == 1)
            {
                return(new LogItem(message + ": " + lines[0], i));
            }
            else
            {
                LogItem[] events = Array.ConvertAll <string, LogItem>(lines,
                                                                      delegate(string s) { return(new LogItem(s, ImageType.NoImage)); });
                LogItem r = new LogItem(message, i);
                foreach (LogItem e in events)
                {
                    r.Add(e);
                }

                return(r);
            }
        }
コード例 #2
0
        public static LogItem LogValue(string name, object value, ImageType image)
        {
            if (value == null)
            {
                value = "null"; // to avoid NullReferenceExceptions
            }
            List <Type> candidates = new List <Type>(typesHandled);

            // Remove the types which can't handle value
            candidates.RemoveAll(delegate(Type t)
            {
                return(!t.IsInstanceOfType(value));
            });

            // Ensure we used the most derived type
            candidates.RemoveAll(delegate(Type t)
            {
                foreach (Type t2 in candidates)
                {
                    if (t2.IsSubclassOf(t))
                    {
                        return(true);
                    }
                }
                return(false);
            });

            List <TypeHandler> handlerCands = candidates.ConvertAll <TypeHandler>(delegate(Type t) { return(typeHandlers[t]); });

            Type ty = value.GetType();

            if (ty.IsDefined(typeof(LogByMembersAttribute), true))
            {
                handlerCands.Add(LogByMembers);
            }
            if (ty.IsDefined(typeof(CustomLoggerAttribute), true))
            {
                CustomLoggerAttribute[] c = (CustomLoggerAttribute[])ty.GetCustomAttributes(typeof(CustomLoggerAttribute), true);
                Debug.Assert(c.Length == 1);
                handlerCands.Add(c[0].CustomLogger);
            }
            if (handlerCands.Count == 0 || ty.IsDefined(typeof(LogAsToStringAttribute), true))
            {
                handlerCands.Add(LogAsToString);
            }

            // We are guaranteed to have at least one logger: LogAsToString
            if (handlerCands.Count == 1)
            {
                return(handlerCands[0](name, value, image));
            }
            else
            {
                LogItem i = new LogItem(name, image);
                i.Warn(string.Format("More than 1 loggers are defined for type '{0}'.", ty));
                foreach (TypeHandler t in handlerCands)
                {
                    i.Add(t("Value", value, ImageType.NoImage));
                }
                return(i);
            }
        }