如何在ASP.NET中读取应用程序日志并基于源代码对其进行过滤

本文关键字:源代码 过滤 日志 ASP NET 应用程序 读取 | 更新日期: 2023-09-27 17:50:27

在我的应用程序中,我想读取本地系统的应用程序事件日志。目前我正在使用以下代码

public partial class AppLog : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            System.Diagnostics.EventLog logInfo = new System.Diagnostics.EventLog();
            logInfo.Log = "Application";
            logInfo.MachineName = ".";  // Local machine
            string strImage = "";  // Icon for the event
            Response.Write("<p>There are  " + logInfo.Entries.Count + " entries in the System event log.</p>");

            foreach (EventLogEntry entry in logInfo.Entries.Cast<EventLogEntry>().Reverse<EventLogEntry>())            
            {
                switch (entry.EntryType)
                {
                    case EventLogEntryType.Warning:
                        strImage = "images/icon_warning.PNG";
                        break;
                    case EventLogEntryType.Error:
                        strImage = "images/icon_error.PNG";
                        break;
                    default:
                        strImage = "images/icon_info.PNG";
                        break;
                }
                Response.Write("<img src='"" + strImage + "'">&nbsp;|&nbsp;");
                Response.Write(entry.TimeGenerated.ToString() + "&nbsp;|&nbsp;");
                Response.Write(entry.Message.ToString() + "<br>'r'n");
            }
        }
    }
}

我想只显示由asp.net创建的日志,我知道我可以在for-each循环中过滤它。但这需要花费大量时间,因为它需要遍历整个应用程序日志。有没有办法在它进入任何迭代之前过滤它?

= = = = = = = =

编辑

我得到了一个查询的方法,不知道它是否真的提高了性能

    var result = (from EventLogEntry elog in logInfo.Entries
                  where (elog.Source.ToString().Equals("ASP.NET 2.0.50727.0"))
                  orderby elog.TimeGenerated descending
                  select elog).ToList();

如何在ASP.NET中读取应用程序日志并基于源代码对其进行过滤

var eventLog = new EventLog("Application");
eventLog.Entries
        .Cast<EventLogEntry>()
        .Select(e => e.Source == "yourFilter");

看看是否有帮助

读取c#中的事件日志

http://www.vinull.com/Post/2007/10/16/aspnet-working-with-the-event-log.aspx

仅供参考:这是你的反向()导致减速。Linq可以帮助过滤,只要你之后不反转它。

我最终这样做是出于我的目的:

for(int x = logInfo.Entries.Count-1; x >= 0; x--)
        {
          EventLogEntry entry = (EventLogEntry)logInfo.Entries[x]; ...

更详细地解释一下,对于循环的每次迭代,您都调用reverse(),这是缓慢而密集的。如果在foreach循环之前进行反向操作,则可以加快速度。