如何从ASP.NET的SSIS错误的事件日志中获取包名称(源名称)

时间:2016-12-28 11:57:31

标签: asp.net vb.net ssis

我正在成功读取服务器事件日志,以显示应用程序事件日志中的SSIS错误。目的是使第一线故障排除成为可能,而无需以管理员身份登录服务器。

我正在使用vb.net中的EventLogEntry来显示源是SQLISPackage110的错误。然而,让我感到困惑的是,当查看事件日志中的错误时,会出现一个显示包名称的“Source Name”属性。但是,EventLogEntry似乎没有此属性,这使得无法确定哪个包已返回错误。

有没有人碰到过这个并设法绕过它? 错误的屏幕截图和我的一些vb.net代码位于

之下

Event log entry with source name

 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

1 个答案:

答案 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,那么您将获得所需的信息,并以可搜索的方式存储,以便在整个组织中更轻松地进行查询,聚合和分析。您甚至可以使用源列来获取所需的确切信息。

enter image description here