Как прочитать журнал приложений и отфильтровать его по источнику в ASP.NET? - PullRequest
2 голосов
/ 19 апреля 2011

В моем приложении я хочу прочитать журнал событий приложения локальной системы.В настоящее время я использую следующий код

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();

и переберите список результатов.

Ответы [ 3 ]

0 голосов
/ 10 июля 2013

К вашему сведению: замедление вызывает ваш обратный ход (). Linq помогает с фильтрацией до тех пор, пока вы не отмените ее впоследствии.

В итоге я сделал это для своих целей:

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

Чтобы объяснить немного больше, для каждой итерации вашего цикла вы вызываете reverse (), который является медленным и интенсивным. Возможно, вам удастся ускорить его, если вы вернетесь назад до цикла foreach.

0 голосов
/ 22 января 2016

с использованием (var eventLog = new EventLog ("Application")) eventLog.Entries.Cast (). Выберите (e => e.Source == yourFilter)

0 голосов
/ 19 апреля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...