Perhaps exploring the possibility of using PerlNet a product marketed by
ActiveState might be a cost effective solution.

With PerlNet, one can define an Interface to any module on CPAN and compile
it as a library or executable.  So from a developer's prospective, a
programmer can leverage modules in CPAN and the .NET community all within a
single executable.  Thanks to Mono this capability is now extended to the
Unix world. No sense in reinventing the wheel is there?  

-Craig

>-----Original Message-----
>From: [EMAIL PROTECTED] 
>[mailto:[EMAIL PROTECTED] On Behalf Of Jonathan Pryor
>Sent: Monday, August 16, 2004 18:56
>To: Clint Fairchild
>Cc: [EMAIL PROTECTED]
>Subject: Re: [Mono-list] Syslog Access
>
>
>On Mon, 2004-08-16 at 17:34, Clint Fairchild wrote:
>> Is there a simple solution to access syslog with C#?  I'm attempting 
>> to write a daemon.
>
>The answer should be System.Diagnostics.EventLog.  Alas, it 
>isn't, because no one has implemented a shim to make syslog 
>look like a Windows Event Log yet.  Sorry, it hasn't been a priority.
>
>You'll have to P/Invoke syslog(3) directly.  Lucky you, I 
>wrote a short demo of "Hello, world" for syslog(3).  Unlucky 
>you, I was lazy and used the constant values in 
>/usr/include/sys/syslog.h on Fedora Core 2.  This should be 
>good for Linux systems, but the constants will have different 
>values on other Unix platforms, so a "real" solution would 
>mimic Mono.Posix.
>
>       // syslog example:
>       using System;
>       using System.Runtime.InteropServices;
>
>       class Syslog_h {
>               [Flags]
>               public enum Option {
>                       Pid        = 0x01,
>                       Console    = 0x02,
>                       Delay      = 0x04,
>                       NoDelay    = 0x08,
>                       NoWait     = 0x10,
>                       PrintError = 0x20
>               }
>
>               [Flags]
>               public enum Facility {
>                       Kernel   = 0 << 3,
>                       User     = 1 << 3,
>                       Mail     = 2 << 3,
>                       Daemon   = 3 << 3,
>                       Auth     = 4 << 3,
>                       Syslog   = 5 << 3,
>                       Lpr      = 6 << 3,
>                       News     = 7 << 3,
>                       Uucp     = 8 << 3,
>                       Cron     = 8 << 3,
>                       AuthPriv = 10 << 3,
>                       Ftp      = 11 << 3,
>                       Local0   = 16 << 3,
>                       Local1   = 17 << 3,
>                       Local2   = 18 << 3,
>                       Local3   = 19 << 3,
>                       Local4   = 20 << 3,
>                       Local5   = 21 << 3,
>                       Local6   = 22 << 3,
>                       Local7   = 23 << 3,
>               }
>
>               [Flags]
>               public enum Level {
>                       Emerg   = 0,
>                       Alert   = 1,
>                       Crit    = 2,
>                       Err     = 3,
>                       Warning = 4,
>                       Notice  = 5,
>                       Info    = 6,
>                       Debug   = 7
>               }
>
>               // Note that `ident' is an IntPtr, not a string;
>               // see Demo.Main() for why
>               [DllImport ("libc")]
>               public static extern void openlog (IntPtr ident, 
>                       Option option, Facility facility);
>
>               [DllImport ("libc")]
>               public static extern void syslog (int priority, 
>                       string message);
>
>               [DllImport ("libc")]
>               public static extern void closelog ();
>       }
>
>       class Demo {
>               public static void Main (string[] args)
>               {
>                       // Ident needs to be an IntPtr, not a string, 
>                       // as syslog doesn't copy the string; it 
>                       // assumes that the string won't change.  
>                       // Since strings are garbage collected, the
>                       // string will eventually be collected, causing
>                       // syslog(3) to print garbage for the ident
>                       // unless we make sure `ident' is allocated in
>                       // unmanaged memory:
>                       IntPtr ident = Marshal.StringToHGlobalAnsi (
>                               "this is my ident");
>                       Syslog_h.openlog (ident,
>                               Syslog_h.Option.Console | 
>Syslog_h.Option.Pid |
>                                       Syslog_h.Option.PrintError,
>                               Syslog_h.Facility.User);
>                       Syslog_h.syslog ((int) Syslog_h.Facility.User | 
>                               (int) Syslog_h.Level.Debug,
>                               "Hello, syslog!");
>                       Syslog_h.closelog ();
>                       Marshal.FreeHGlobal (ident);
>               }
>       }
>
> - Jon
>
>
>_______________________________________________
>Mono-list maillist  -  [EMAIL PROTECTED] 
>http://lists.ximian.com/mailman/listinfo/mono->list
>

_______________________________________________
Mono-list maillist  -  [EMAIL PROTECTED]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to