【问题标题】:How to get package name (Source Name) from the event log for SSIS errors in ASP.NET如何从事件日志中获取 ASP.NET 中 SSIS 错误的包名称(源名称)
【发布时间】:2016-12-28 11:57:31
【问题描述】:

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

我在 vb.net 中使用 EventLogEntry 来显示错误,其中源是 SQLISPackage110。然而让我感到困惑的是,当查看事件日志中的错误时,有一个“源名称”属性显示包名称。但是 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

【问题讨论】:

    标签: asp.net vb.net ssis


    【解决方案1】:

    您已经注意到,“来源”不是LogEntry properties 之一。 相反,“来源”一词只是被困在较大的 Message 属性中的文本。因此,要获得“来源”信息,您必须将其从Message 中解析出来。将消息分成几行。然后循环遍历这些行并在找到包含单词“Source”的行时执行某些操作 此代码未经测试。但是,只是给出一个想法..

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

    【讨论】:

    • 感谢您对 SQL 日志记录的提醒。 Windows 事件日志似乎是默认设置,但我现在添加了 SQL 日志记录 - 正如您所建议的那样 - 使用起来更容易
    • 好交易。根据您的 SQL 版本,Microsoft 有一些预构建的 SSRS 报告用于解析 sysssislog 表。无耻的插件,但我写了this article 来帮助您从sysssislog 表中收集有用的信息。
    猜你喜欢
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 2010-11-28
    • 2015-10-24
    相关资源
    最近更新 更多