Exemplo n.º 1
0
            public ILogger Log(string value, LogEntryType type)
            {
                value = XmlUtility.Sanitize(value);
                var xmlLogEntry = new XElement("entry",
                                               new XAttribute("time", DateTime.UtcNow),
                                               new XAttribute("id", Guid.NewGuid()),
                                               new XAttribute("type", (int)type),
                                               new XElement("message", value));

                lock (LogLock)
                {
                    var document       = _parent.GetDocument();
                    var parentLogEntry = document.Root
                                         .Elements()
                                         .Where(s => s.Attribute("id").Value == _element.Attribute("id").Value)
                                         .First();
                    parentLogEntry.Add(xmlLogEntry);
                    // adjust log level of the parent log entry
                    var parentLogEntryType = (LogEntryType)Enum.Parse(typeof(LogEntryType), parentLogEntry.Attribute("type").Value);
                    if (type > parentLogEntryType)
                    {
                        parentLogEntry.Attribute("type").SetValue((int)type);
                    }
                    document.Save(_parent._path);
                }

                // Support a depthness of 2 for now.
                return(this);
            }