그냥 서버에 접속해서 이벤트로그를 보면 되지 않느냐라고 생각하실 수도 있지만...
단일한 관리용 웹페이지에서 이벤트로그, DB의 로그 등을 모두 보고 싶어 할 수도 있다.
아래 코드는 C#으로 작성한 ASP.NET 페이지로, 주어진 이름의 이벤트로그의 데이터를 읽어와서 그리드에 바인딩시키는 코드이다.
- private void Page_Load(object sender, System.EventArgs e){
- this.DataGrid1.DataSource = this.GetData("Comm.SQL");
- this.DataGrid1.DataBind();
- }
- private DataSet GetData(string eventLogName){
- System.Diagnostics.EventLog oLog = null;
- System.Diagnostics.EventLogEntryCollection oEntryCollection = null;
- System.Data.DataSet dsEventLog = null;
- System.Data.DataTable dtEventLog = null;
- try{
- dsEventLog = new DataSet("EventLogDataList");
- dtEventLog = new DataTable(eventLogName);
- dtEventLog.Columns.Add("Type");
- dtEventLog.Columns.Add("Day");
- dtEventLog.Columns.Add("Time");
- dtEventLog.Columns.Add("Source");
- dtEventLog.Columns.Add("Category");
- dtEventLog.Columns.Add("Event");
- dtEventLog.Columns.Add("User");
- dtEventLog.Columns.Add("Machine");
- oLog = new System.Diagnostics.EventLog(eventLogName);
- oEntryCollection = oLog.Entries;
- for(int i=0;i<oEntryCollection.Count;i++){
- string[] arrLogEntry = new string[8];
- arrLogEntry[0] = oEntryCollection[i].EntryType.ToString();
- arrLogEntry[1] = oEntryCollection[i].TimeGenerated.ToShortDateString();
- arrLogEntry[2] = oEntryCollection[i].TimeGenerated.ToShortTimeString();
- arrLogEntry[2] = "<a href='webform2.aspx?LogName=" + eventLogName + "&Index=" + i.ToString() + "'>" + arrLogEntry[2] + "</a>";
- arrLogEntry[3] = oEntryCollection[i].Source;
- arrLogEntry[4] = oEntryCollection[i].Category;
- arrLogEntry[5] = oEntryCollection[i].EventID.ToString();
- arrLogEntry[6] = oEntryCollection[i].UserName;
- arrLogEntry[7] = oEntryCollection[i].MachineName;
- dtEventLog.Rows.Add(arrLogEntry);
- }
- dsEventLog.Tables.Add(dtEventLog);
- }
- catch(Exception ex)
- {
- throw ex;
- }
- return dsEventLog;
- }
위 코드는 이벤트뷰어와 똑같은 칼럼 순서로 이벤트 리스트를 그리드에 뿌리게 된다.
2번째 칼럼은 원래는 시간 데이터인데, 거기에 링크를 거는 부분이 있다.
이벤트 뷰어에서도 더블 클릭을 하면 이벤트에 대한 자세한 사항을 나타내는 창이 뜨는데,
아래는 바로 그 링크에서 연결되는 Detail 화면을 뿌리기 위한 코드이다.
- protected System.Web.UI.HtmlControls.HtmlInputText txtDay;
- protected System.Web.UI.HtmlControls.HtmlInputText txtTime;
- protected System.Web.UI.HtmlControls.HtmlInputText txtType;
- protected System.Web.UI.HtmlControls.HtmlInputText txtSource;
- protected System.Web.UI.HtmlControls.HtmlInputText txtCategory;
- protected System.Web.UI.HtmlControls.HtmlInputText txtEvent;
- protected System.Web.UI.HtmlControls.HtmlInputText txtUser;
- protected System.Web.UI.HtmlControls.HtmlInputText txtMachine;
- protected System.Web.UI.HtmlControls.HtmlTextArea txtDescription;
- private void Page_Load(object sender, System.EventArgs e)
- {
- try
- {
- string strLogName = Request["LogName"];
- string strIndex = Request["Index"];
- int nIndex = Convert.ToInt32(strIndex);
- this.SetContent(strLogName, nIndex);
- }
- catch(Exception ex)
- {
- Response.Write(ex.ToString());
- }
- }
- private void SetContent(string logName, int index)
- {
- System.Diagnostics.EventLog oLog = null;
- System.Diagnostics.EventLogEntry oEntry = null;
- try
- {
- oLog = new System.Diagnostics.EventLog(logName);
- oEntry = oLog.Entries[index];
- this.txtDay.Value = oEntry.TimeGenerated.ToShortDateString();
- this.txtTime.Value = oEntry.TimeGenerated.ToLongTimeString();
- this.txtType.Value = oEntry.EntryType.ToString();
- this.txtSource.Value = oEntry.Source;
- this.txtCategory.Value = oEntry.Category;
- this.txtEvent.Value = oEntry.EventID.ToString();
- this.txtUser.Value = oEntry.UserName;
- this.txtMachine.Value = oEntry.MachineName;
- this.txtDescription.Value = oEntry.Message;
- }
- catch(Exception ex)
- {
- throw ex;
- }
- }
'C# & VB.NET' 카테고리의 다른 글
[HowTo]두 글자 이상의 문자열을 사용해서 Split 하기 (VB.NET, C#) (2) | 2006.03.25 |
---|---|
[HowTo]Base64 인코딩, 디코딩 공통 함수(C#) (0) | 2006.03.11 |
[HowTo]파일에 문자열을 기록하는 코드(C#) (2) | 2006.03.11 |
[Article]Try-catch-finally 구조에서 return 문의 정확한 위치 (4) | 2006.03.05 |
[HowTo]기본 인증 모드로 되어있는 웹서비스 호출할 때(C#) (2) | 2006.02.23 |