我正在成功读取服务器事件日志,以显示应用程序事件日志中的SSIS错误。目的是使第一线故障排除成为可能,而无需以管理员身份登录服务器。
我正在使用vb.net中的EventLogEntry来显示源是SQLISPackage110的错误。然而,让我感到困惑的是,当查看事件日志中的错误时,会出现一个显示包名称的“Source Name”属性。但是,EventLogEntry似乎没有此属性,这使得无法确定哪个包已返回错误。
有没有人碰到过这个并设法绕过它? 错误的屏幕截图和我的一些vb.net代码位于
之下 Dim myEventLogEntryCollection As EventLogEntryCollection = myEventLog1.Entries
myEventLog1.Close()
Dim x As Integer
Dim entry As EventLogEntry
If myEventLogEntryCollection.Count > 0 Then
strTable += "<table class='table table-bordered'><tr><th>Time Written</th><th>Source</th><th>Event type</th><th>Message</th></tr>"
For Each entry In myEventLogEntryCollection.Cast(Of EventLogEntry).Reverse 'cast and reverse to show newest first
If entry.Source = strEventSource And (entry.EntryType.ToString = "Error" Or entry.EntryType.ToString = "Warning") Then
strTable += "<tr>"
strTable += "<td>" + entry.TimeWritten.ToShortDateString + " " + entry.TimeWritten.ToShortTimeString + "</td>"
strTable += "<td>" + entry.Source.ToString + "</td>"
strTable += "<td>" + entry.EntryType.ToString + "</td>"
strTable += "<td>" + entry.Message + "</td>"
strTable += "</tr>"
x += 1
End If
If x > 100 Then Exit For 'could be 1000s in the log
Next
strTable += "</table>"
End If
答案 0 :(得分:1)
正如您已经注意到的那样,&#34;来源&#34;不是LogEntry properties之一。
取而代之的是&#34; Source&#34;只是文本被困在较大的Message
属性中。所以,要获得&#34; Source&#34;您必须从Message
解析出来的信息。将邮件拆分为多行。然后循环遍历这些行并在找到包含单词&#34; Source&#34;
此代码未经过测试。但是,只是为了提出这个想法..
Dim messageLines As String() = Nothing
messageLines = entry.Message.Split(Environment.NewLine)
Dim line As String
For Each line In messageLines
If line.Contains("Source") Then
'your code here
Next line
SSIS包可以log to many destinations。是的,登录Windows事件日志是一种选择,但我很少看到它在实践中使用。 Windows事件日志不是永久性的。默认情况下,他们会在获得over twenty megabytes in size后开始修剪历史记录。它们是存储SSIS日志信息以进行故障排除的不良位置。
您是否会考虑向您的包裹作者温和地建议他们使用SSIS SQL logging代替?如果他们登录到SQL,那么您将获得所需的信息,并以可搜索的方式存储,以便在整个组织中更轻松地进行查询,聚合和分析。您甚至可以使用源列来获取所需的确切信息。