Click here to Skip to main content
Click here to Skip to main content

Centralized Event Logging in .NET Using Web Services

, 28 Apr 2005
Rate this:
Please Sign up or sign in to vote.
Centralized event logging in .NET using web services.

Introduction

In this article I have explained a solution for centralized event logging using web services. This solution is suitable for the following scenarios:

  1. In a distributed environment where we may need to log events to the centralized event log to analyze the failure of certain components or functionality.
  2. In very large enterprises there would be a requirement to log events in a centralized server by different applications running on different servers in different locations.

If we follow the normal approach of writing to the event log there would be security breaches and you will not be able to access the event log in a centralized server due to insufficient privileges. At the same time the server administrator will not be able to share the IP or other secret data. But this solution doesn't require you to share any secret data.

Basic event logging

All the classes required for logging events to the Windows event log are in the System.Diagnostics namespace. The most important class is the EventLog class. This allows reading and writing of event log entries. However, before any logs can be written an EventSource must be defined. The source can also be defined or created during writing. The API checks for the existence of the source and if none exists a source is created on the fly.

To read event logs the EventLog class has a property called Entries which is a EventLogEntryCollection. As is obvious, this is a collection of EventLogEntrys. Every entry in any event log is an instance of EventLogEntry. Along with some obvious properties, like Message and EventId it has an EntryType property. This is an enumeration which indicates the type of the event log like Information, Error, FailureAudit, SuccessAudit and Warning. This allows for the grouping of log event entries into different levels of severity.

Using the code

  • Create a class library project and name it as EventLogInstaller and rename the default Class.cs to MyEventLogInstaller.cs.
  • Add a reference to System.Configuration.Install.dll.
  • Paste the following code in a class:
        [RunInstaller(true)]
        public class MyEventLogInstaller : Installer
        {
            private EventLogInstaller myEventLogInstaller;
            public MyEventLogInstaller()
            {
                //Create Instance of EventLogInstaller
                myEventLogInstaller = new EventLogInstaller();
        
                // Set the Source of Event Log, to be created.
                myEventLogInstaller.Source = "EventSourceTEST";
        
                // Set the Log that source is created in
                myEventLogInstaller.Log = "Application";
        
                // Add myEventLogInstaller to the Installers Collection.
                Installers.Add(myEventLogInstaller);
            }
        }
  • Build the project. Now you have got EventLogInstaller.dll in the concerned bin\debug folder.
  • Install the EventLogInstaller.dll in a centralized server where you want to host the web service. Run InstallUtil EventLogInstaller.dll to do the same.
  • Now the DLL would have created an event source EventSourceTEST for you in a server registry.
  • Check the same using RegEdit and locate "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ Eventlog\Application\EventSourceTest".
  • Next create a web service project and add the required methods to read and write to the event log as follows. Here I have given only the write method.
        [WebMethod]
        public void WriteLog(string msg)
        {
        EventLog ev = new EventLog("Application");
        // Event's Source name
        ev.Source = "EventSourceTEST";
            try
            {
                ev.WriteEntry(msg,EventLogEntryType.Information);
            }
            finally
            {
                ev.Dispose();                
            }
        }
  • Compile and host it in a centralized server IIS.
  • Next create either a Windows or a web client application to consume the web service.
  • Add web reference to create a proxy class for your application to consume the web service.
  • Just send a message to write to the event log. Here I have given a sample for web client. I have written a code in the command button click event.
        private void Button1_Click(object sender, System.EventArgs e)
        {
            EvenLogService.LogEvent els= 
                       new EventLogClient.EvenLogService.LogEvent();
            els.WriteLog(TextBox1.Text.ToString());
            Response.Write("Hi your message has been logged " + 
                       "successfully, View it using Event Viewer");
        
        }
  • Check the event log using event viewer in administrative tools. Your message would have been logged.

Since we are using web service it can also pass firewalls. For more information write to subbiah.anandan@wipro.com.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Subbiah Anandan
Web Developer
Hong Kong Hong Kong
Anandan is a Technical Guy, having interest to play with technologies and logics. He has been in IT for the past 14 years. Currently he is working as a lead architect in Wipro Technologies, Bangalore, India. He is articulating solution architecture for challenging requirements.

Comments and Discussions

 
-- There are no messages in this forum --
| Advertise | Privacy | Mobile
Web01 | 2.8.140721.1 | Last Updated 28 Apr 2005
Article Copyright 2005 by Subbiah Anandan
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid