Public Sub Publish(ByVal ExceptionInfo As XmlDocument, ByVal ConfigSettings As NameValueCollection) Implements IExceptionXmlPublisher.Publish
            Dim filename As String
            Dim fi As FileInfo
            Dim fs As FileStream
            Dim logEntries As String

            Const xmlProlog = "<?xml version=""1.0"" encoding=""utf-8""?>"
            Const logRootElementStart = "<ExceptionLog>"
            Const logRootElementEnd = "</ExceptionLog>"

            If Not ConfigSettings Is Nothing Then
                filename = ConfigSettings("fileName")
            Else
                filename = "C:\ErrorLog.xml"
            End If

            ' lock the file from other threads.
            Dim mtx As Mutex = New Mutex(False, "exeption.publish.mutex")
            mtx.WaitOne()

            ' get any existing entries
            fi = New FileInfo(filename)
            If Not fi.Exists Then
                logEntries = ""
            Else
                ' get the data
                Dim xr As XmlTextReader = New XmlTextReader(filename)
                xr.WhitespaceHandling = WhitespaceHandling.None
                xr.MoveToContent()
                logEntries = xr.ReadInnerXml
                xr.Close()
            End If

            ' get the new entry as a string
            Dim newEntry As String = ExceptionInfo.OuterXml

            ' re-write the log file
            fs = File.Open(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite)
            Dim writer As StreamWriter = New StreamWriter(fs)

            writer.Write(xmlProlog)
            writer.Write(logRootElementStart)
            writer.Write(logEntries)
            writer.Write(newEntry)
            writer.Write(logRootElementEnd)
            writer.Close()
            fs.Close()

            mtx.ReleaseMutex()
        End Sub