chriscboy
asked on
Help with writing error information to an XML file
Hi,
I am new to VB.NET/XML so please bear with me. I am trying to write a method called ErrorMethod() which will take an exception object and write the error information to an XML file. If the file already exists the error data should be appended to the XML file. This is what the XML file SHOULD look like:
<?xml version="1.0" ?>
<!-- Comments: WebServices Error Log -->
<Errors>
<Error>
<Date>30/05/2006</Date>
<Time>02:50:48</Time>
</Error>
<Error>
<Date> 31/05/2006</Date>
<Time> 02:50:48</Time>
</Error>
<Error>
<Date>31/05/2006 </Date>
<Time>12:50:48 </Time>
</Error>
</Errors>
Each Error node contains the information about each error. Now this is what I am getting when I run the code and look at the XML file in notepad:
<?xml version="1.0"?>
<!--Comments: WebServices Error Log-->
<Errors>
<Error>
<Date>
30/05/2006
</Date>
<Time>
05:27:38
</Time>
</Error></Errors>
Could some please look at the code below and suggest what improvements could be made to make it look like it should. Thanks!!
Chris
-------------------------- ---------- ---
And now for the code:
Private Sub ErrorMethod(ByVal ex As Exception)
' Do something here to write error message to error log
' Write Out : Date,Time,User,WebServiceN ame,Method Name,LineN o,ErrNo,Me ssage
Dim sErrFile As String = ConfigurationManager.AppSe ttings("Er rorLogFile Name").ToS tring
Dim sError As String
Dim dToday As DateTime = System.DateTime.Now
sError = ""
' File doesn't exist so create it
If Not File.Exists(sErrFile) Then
Dim xmlWriter As New XmlTextWriter(sErrFile, Nothing)
With xmlWriter
.WriteStartDocument()
.WriteComment("Comments: WebServices Error Log")
.WriteStartElement("Errors ")
.WriteEndElement()
.WriteEndDocument()
.Close()
End With
End If
' Append Error node to end of Errors node
Dim doc As New XmlDocument()
Dim node As XmlDocumentFragment
Dim sXML As String = ""
'build document...
sXML = String.Concat(sXML, ControlChars.CrLf, "<Error>")
sXML = String.Concat(sXML, ControlChars.CrLf, ControlChars.Tab, "<Date>")
sXML = String.Concat(sXML, ControlChars.CrLf, ControlChars.Tab, dToday.ToString("dd/MM/yyy y"))
sXML = String.Concat(sXML, ControlChars.CrLf, ControlChars.Tab, "</Date>")
sXML = String.Concat(sXML, ControlChars.CrLf, ControlChars.Tab, "<Time>")
sXML = String.Concat(sXML, ControlChars.CrLf, ControlChars.Tab, dToday.ToString("hh:mm:ss" ))
sXML = String.Concat(sXML, ControlChars.CrLf, ControlChars.Tab, "</Time>")
sXML = String.Concat(sXML, ControlChars.CrLf, "</Error>")
doc.Load(sErrFile) ' Load existing error log
node = doc.CreateDocumentFragment () ' Create document fragment from original XML doc
node.InnerText = sXML ' Associate XML string with document fragment
doc.DocumentElement.Append Child(node ) ' Append document fragment to main document
doc.Save(sErrFile) ' Save XML document back to file
End Sub
I am new to VB.NET/XML so please bear with me. I am trying to write a method called ErrorMethod() which will take an exception object and write the error information to an XML file. If the file already exists the error data should be appended to the XML file. This is what the XML file SHOULD look like:
<?xml version="1.0" ?>
<!-- Comments: WebServices Error Log -->
<Errors>
<Error>
<Date>30/05/2006</Date>
<Time>02:50:48</Time>
</Error>
<Error>
<Date> 31/05/2006</Date>
<Time> 02:50:48</Time>
</Error>
<Error>
<Date>31/05/2006 </Date>
<Time>12:50:48 </Time>
</Error>
</Errors>
Each Error node contains the information about each error. Now this is what I am getting when I run the code and look at the XML file in notepad:
<?xml version="1.0"?>
<!--Comments: WebServices Error Log-->
<Errors>
<Error>
<Date>
30/05/2006
</Date>
<Time>
05:27:38
</Time>
</Error></Errors>
Could some please look at the code below and suggest what improvements could be made to make it look like it should. Thanks!!
Chris
--------------------------
And now for the code:
Private Sub ErrorMethod(ByVal ex As Exception)
' Do something here to write error message to error log
' Write Out : Date,Time,User,WebServiceN
Dim sErrFile As String = ConfigurationManager.AppSe
Dim sError As String
Dim dToday As DateTime = System.DateTime.Now
sError = ""
' File doesn't exist so create it
If Not File.Exists(sErrFile) Then
Dim xmlWriter As New XmlTextWriter(sErrFile, Nothing)
With xmlWriter
.WriteStartDocument()
.WriteComment("Comments: WebServices Error Log")
.WriteStartElement("Errors
.WriteEndElement()
.WriteEndDocument()
.Close()
End With
End If
' Append Error node to end of Errors node
Dim doc As New XmlDocument()
Dim node As XmlDocumentFragment
Dim sXML As String = ""
'build document...
sXML = String.Concat(sXML, ControlChars.CrLf, "<Error>")
sXML = String.Concat(sXML, ControlChars.CrLf, ControlChars.Tab, "<Date>")
sXML = String.Concat(sXML, ControlChars.CrLf, ControlChars.Tab, dToday.ToString("dd/MM/yyy
sXML = String.Concat(sXML, ControlChars.CrLf, ControlChars.Tab, "</Date>")
sXML = String.Concat(sXML, ControlChars.CrLf, ControlChars.Tab, "<Time>")
sXML = String.Concat(sXML, ControlChars.CrLf, ControlChars.Tab, dToday.ToString("hh:mm:ss"
sXML = String.Concat(sXML, ControlChars.CrLf, ControlChars.Tab, "</Time>")
sXML = String.Concat(sXML, ControlChars.CrLf, "</Error>")
doc.Load(sErrFile) ' Load existing error log
node = doc.CreateDocumentFragment
node.InnerText = sXML ' Associate XML string with document fragment
doc.DocumentElement.Append
doc.Save(sErrFile) ' Save XML document back to file
End Sub
ASKER
1) That might not work in my case. I do intend on adding additional elements to the error node. I am just trying to initially get it working with Date and Time elements but would also like to add elements for ErrorNumber,ErrorDescripti on,ErrorMe thod etc.
2) No, this file will grow and grow (wouldn't it be nice if I got no errors!?!?)
3) Ah, that makes some sense, because that is what I saw when I opened the XML file in notepad. If I open in IE6, I get the following :
<?xml version="1.0" ?>
<!-- Comments: WebServices Error Log-->
<Errors><Error><Date>30/05 /2006</Dat e><Time>05 :27:38</Ti me></Error ></Errors>
The entire <Error>...</Error> appears in black as well.
Which would indicate I am doing something wrong in my code?
2) No, this file will grow and grow (wouldn't it be nice if I got no errors!?!?)
3) Ah, that makes some sense, because that is what I saw when I opened the XML file in notepad. If I open in IE6, I get the following :
<?xml version="1.0" ?>
<!-- Comments: WebServices Error Log-->
<Errors><Error><Date>30/05
The entire <Error>...</Error> appears in black as well.
Which would indicate I am doing something wrong in my code?
If you write CDATA elements, they don't get parsed/encoded.
Here is an example:
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1
}
else
{
return 0
}
}
]]>
</script>
Bob
Here is an example:
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1
}
else
{
return 0
}
}
]]>
</script>
Bob
ASKER
Sorry that did not make any sense! I'm completely new to XML so don't even know what CDATA means!
I am trying to write out a simple XML file with the tags previously mentioned. I think I will write the error info out to a simple CSV file, as I know what to do there. XML can wait until I understand it a bit more. Thanks for trying.
I am trying to write out a simple XML file with the tags previously mentioned. I think I will write the error info out to a simple CSV file, as I know what to do there. XML can wait until I understand it a bit more. Thanks for trying.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
<Errors>
<Error time="30/05/2006 02:50:48" />
<Error time="31/05/2006 02:50:48" />
<Error time="31/05/2006 12:50:48" />
</Errors>
This will keep the file structure more compact and readable.
2) Are you going to limit the number of error written, or can the file size just keep growing to MB in size?
3) Plain text strings get HTML encoded, which is why '<' is written as <.
Bob