在我的应用程序中,我想阅读本地系统的应用程序事件日志。 目前我正在使用以下代码
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 + "\"> | ");
Response.Write(entry.TimeGenerated.ToString() + " | ");
Response.Write(entry.Message.ToString() + "<br>\r\n");
}
}
}
}
我只想显示ASP.NET创建的日志。我知道我可以在for-each循环中过滤它。但是这需要花费很多时间,因为它需要遍历整个应用程序日志。有什么办法吗?在进入任何迭代之前过滤它?
==== EDIT ====
我有办法进行查询,不知道它是否真的提高了性能
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();
并遍历结果列表。
答案 0 :(得分:0)
答案 1 :(得分:0)
仅供参考:这是你的反向()导致经济放缓。 只要你以后不反转它,Linq就会帮助你进行过滤。
我最终为了我的目的这样做了:
for(int x = logInfo.Entries.Count-1; x >= 0; x--)
{
EventLogEntry entry = (EventLogEntry)logInfo.Entries[x]; ...
为了解释一下,对于循环的每次迭代,你都在调用reverse(),这是缓慢而密集的。如果在foreach循环之前反转,则可以加快速度。
答案 2 :(得分:0)
使用(var eventLog = new EventLog(“Application”)) eventLog.Entries.Cast()。选择(e =&gt; e.Source == yourFilter)