Write to Windows event log: Difference between revisions
(add Ruby) |
No edit summary |
||
Line 94: | Line 94: | ||
<br> |
<br> |
||
''Note2:'' See details on registering a new Event Source with Windows at [http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.registerdisplayname.aspx MSDN] |
''Note2:'' See details on registering a new Event Source with Windows at [http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.registerdisplayname.aspx MSDN] |
||
=={{header|Python}}== |
|||
{{libheader|PyWin32}} |
|||
<lang Python>import win32api |
|||
import win32con |
|||
import win32evtlog |
|||
import win32security |
|||
import win32evtlogutil |
|||
ph = win32api.GetCurrentProcess() |
|||
th = win32security.OpenProcessToken(ph, win32con.TOKEN_READ) |
|||
my_sid = win32security.GetTokenInformation(th, win32security.TokenUser)[0] |
|||
applicationName = "My Application" |
|||
eventID = 1 |
|||
category = 5 # Shell |
|||
myType = win32evtlog.EVENTLOG_WARNING_TYPE |
|||
descr = ["A warning", "An even more dire warning"] |
|||
data = "Application\0Data".encode("ascii") |
|||
win32evtlogutil.ReportEvent(applicationName, eventID, eventCategory=category, |
|||
eventType=myType, strings=descr, data=data, sid=my_sid)</lang> |
|||
=={{header|Ruby}}== |
=={{header|Ruby}}== |
Revision as of 16:52, 30 December 2011
You are encouraged to solve this task according to the task description, using any language you may know.
Write script status to the Windows Event Log
C#
In Windows Vista and later or Windows Server 2003, you must have administrative privileges to execute this code. <lang csharp>using System.Diagnostics;
namespace RC {
internal class Program { public static void Main() { string sSource = "Sample App"; string sLog = "Application"; string sEvent = "Hello from RC!";
if (!EventLog.SourceExists(sSource)) EventLog.CreateEventSource(sSource, sLog);
EventLog.WriteEntry(sSource, sEvent); EventLog.WriteEntry(sSource, sEvent, EventLogEntryType.Information); } }
}</lang>
Delphi
<lang Delphi>program WriteToEventLog;
{$APPTYPE CONSOLE}
uses Windows;
procedure WriteLog(aMsg: string); var
lHandle: THandle; lMessagePtr: Pointer;
begin
lMessagePtr := PChar(aMsg); lHandle := RegisterEventSource(nil, 'Logger'); if lHandle > 0 then begin try ReportEvent(lHandle, 4 {Information}, 0, 0, nil, 1, 0, @lMessagePtr, nil); finally DeregisterEventSource(lHandle); end; end;
end;
begin
WriteLog('Message to log.');
end.</lang>
PicoLisp
PicoLisp doesn't run on Windows. In case of Linux, the equivalent of the event log is the syslog. It can be written with 'native' C functions, or simply with the 'logger' utility: <lang PicoLisp>: (call 'logger "This is a test") -> T
- (call 'logger "This" 'is "another" 'test)
-> T</lang>
PureBasic
<lang PureBasic>Procedure WriteToLog(Event_App$,EventMessage$,EvenetType,Computer$)
Protected wNumStrings.w, lpString=@EventMessage$, lReturnX, CMessageTyp, lparray Protected lprawdata=@EventMessage$, rawdata=Len(EventMessage$), Result Protected lLogAPIRetVal.l = RegisterEventSource_(Computer$, Event_App$)
If lLogAPIRetVal lReturnX = ReportEvent_(lLogAPIRetVal,EvenetType,0,CMessageTyp,0,wNumStrings,rawdata,lparray,lprawdata DeregisterEventSource_(lLogAPIRetVal) Result=#True EndIf
ProcedureReturn Result
EndProcedure</lang>
PowerShell
<lang powershell># Create Event Log object $EventLog=new-object System.Diagnostics.EventLog("Application")
- Declare Event Source; must be 'registered' with Windows
$EventLog.Source="Application" # It is possible to register a new source (see Note2)
- Setup the Event Types; you don't have to use them all, but I'm including all the possibilities for reference
$infoEvent=[System.Diagnostics.EventLogEntryType]::Information $errorEvent=[System.Diagnostics.EventLogEntryType]::Error $warningEvent=[System.Diagnostics.EventLogEntryType]::Warning $successAuditEvent=[System.Diagnostics.EventLogEntryType]::SuccessAudit $failureAuditEvent=[System.Diagnostics.EventLogEntryType]::FailureAudit
- Write the event in the format "Event test",EventType,EventID
$EventLog.WriteEntry("My Test Event",$infoevent,70)</lang>
Note1: Thanks to PoSH Fan for posting information that got me started on this at Windows PowerShell Blog
Note2: See details on registering a new Event Source with Windows at MSDN
Python
<lang Python>import win32api import win32con import win32evtlog import win32security import win32evtlogutil
ph = win32api.GetCurrentProcess() th = win32security.OpenProcessToken(ph, win32con.TOKEN_READ) my_sid = win32security.GetTokenInformation(th, win32security.TokenUser)[0]
applicationName = "My Application" eventID = 1 category = 5 # Shell myType = win32evtlog.EVENTLOG_WARNING_TYPE descr = ["A warning", "An even more dire warning"] data = "Application\0Data".encode("ascii")
win32evtlogutil.ReportEvent(applicationName, eventID, eventCategory=category, eventType=myType, strings=descr, data=data, sid=my_sid)</lang>
Ruby
<lang ruby>require 'win32/eventlog' logger = Win32::EventLog.new logger.report_event(:event_type => Win32::EventLog::INFO, :data => "a test event log entry")</lang>
Instructions on setting up an Event Source is here
Tcl
<lang tcl>package require twapi
- This command handles everything; use “-type error” to write an error message
twapi::eventlog_log "My Test Event" -type info</lang>