[Mono-list] Using the syslog [Mono.Unix.Native.Syscall] with own identifier
Jonathan Pryor
jonpryor at vt.edu
Wed Dec 1 18:45:29 EST 2010
On Dec 1, 2010, at 2:37 PM, <mabra at manfbraun.de> <mabra at manfbraun.de> wrote:
> If I use:
>
> Syscall.syslog(SyslogFacility.LOG_DAEMON, SyslogLevel.LOG_NOTICE, "myMsg");
>
> this appears with identifier "mono:" in the syslog. To make syslog
> more evaluable, I need to define my own identifier instead.
You need to use Syscall.openlog() before calling Syscall.syslog() to provide the ident string:
http://go-mono.com/docs/index.aspx?link=M:Mono.Unix.Native.Syscall.openlog(System.IntPtr,Mono.Unix.Native.SyslogOptions,Mono.Unix.Native.SyslogFacility)
You can find more info by reading the Linux man pages, in particular the openSUSE openlog(3) page states:
The argument ident in the call of openlog() is probably stored as-is.
Thus, if the string it points to is changed, syslog() may start
prepending the changed string, and if the string it points to ceases to
exist, the results are undefined. Most portable is to use a string
constant.
Which is why the first character to Syscall.openlog() is an IntPtr, not a string; you'd thus want to call as:
Syscall.openlog(Marshal.StringToHGlobalAnsi("my-ident"), 0, 0);
- Jon
More information about the Mono-list
mailing list