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