// Call with log level from enum public static void Send(SyslogSeverity severity, string message) { if (!initialized) throw new Exception("SyslogClient not initialized. Call Init method before sending: SyslogClient.Init(string origin, string application, string remote, int port, SyslogSeverity severity)"); if (severity <= minSeverity) { int priority = ((int)SyslogFacility.Syslog) * 8 + ((int)severity); string m = String.Format("<{0}> {1} {2} {3} {4} {5}", priority, DateTime.Now.ToString("MMM dd HH:mm:ss"), originHost, applicationId, severity.ToString(), message); try { byte[] bytes = Encoding.ASCII.GetBytes(m); lock (locker) { for (int count = 0; count < (severity <= repeatSeverity ? repeatCount : 1); count++) client.Send(bytes, bytes.Length); } } catch (Exception e) { throw new Exception("Error sending to Syslog: " + remoteHost + ":" + remotePort + Environment.NewLine + e.Message, e.InnerException); } } }
/// <summary> /// Initializes a new instance of SyslogMessage with common fields /// </summary> /// <param name="host">Host that generated the message</param> /// <param name="facility">Facility of the message</param> /// <param name="level">Severity of message</param> /// <param name="text">Text message</param> public SyslogMessage(string host, SyslogFacility facility, SyslogSeverity level, string text) : this() { Timestamp = DateTime.UtcNow; TimeOffset = DateTime.Now - Timestamp; Host = host; Facility = facility; Severity = level; Text = text; }
public SyslogMessage(DateTime?timestamp, string host, SyslogFacility facility, SyslogSeverity level, string text) : this() { Timestamp = timestamp; Host = host; Facility = facility; Severity = level; Text = text; }
public static void Init(string origin, string application, string remote, int port, SyslogSeverity severity = SyslogSeverity.DEBUG, SyslogFacility facility = SyslogFacility.User) { originHost = origin; applicationId = application; remoteHost = remote; remotePort = port; client = new UdpClient(remote, port); minSeverity = severity; // Minimum severity for logging anything lower than this will be ignored defaultFaciltity = facility; initialized = true; }
public static SyslogMessage Create(SyslogFacility facility, SyslogSeverity severity, string message) { SyslogMessage msg = new SyslogMessage(); msg.Facility = facility; msg.Severity = severity; msg.TimeStamp = DateTimeOffset.Now; msg.HostName = Environment.MachineName; msg.MessageText = message; return(msg); }
/// <summary> /// Generate a syslog priority. /// </summary> /// <param name="facility">The syslog facility.</param> /// <param name="severity">The syslog severity.</param> /// <returns>A syslog priority.</returns> /// <remarks> /// <para> /// Generate a syslog priority. /// </para> /// </remarks> public static int GeneratePriority(SyslogFacility facility, SyslogSeverity severity) { if (facility < SyslogFacility.Kernel || facility > SyslogFacility.Local7) { throw new ArgumentException("SyslogFacility out of range", "facility"); } if (severity < SyslogSeverity.Emergency || severity > SyslogSeverity.Debug) { throw new ArgumentException("SyslogSeverity out of range", "severity"); } return((int)((int)facility * 8 + severity)); }
public static int GeneratePriority(SyslogFacility facility, SyslogSeverity severity) { if ((facility < SyslogFacility.Kernel) || (facility > SyslogFacility.Local7)) { throw new ArgumentException("SyslogFacility out of range", "facility"); } if ((severity < SyslogSeverity.Emergency) || (severity > SyslogSeverity.Debug)) { throw new ArgumentException("SyslogSeverity out of range", "severity"); } return((int)((facility * SyslogFacility.Uucp) + ((SyslogFacility)((int)severity)))); }
/// <summary> /// Initializes a new instance of SyslogMessage and auto-completes some parameters /// </summary> /// <param name="facility">Facility of the message</param> /// <param name="severity">Severity of message</param> /// <param name="text">Text message</param> public SyslogMessage(SyslogFacility facility, SyslogSeverity severity, string text) : this() { Facility = facility; Severity = severity; Text = text; Timestamp = DateTime.UtcNow; TimeOffset = DateTime.Now - Timestamp; Host = Dns.GetHostName(); ProcessID = Process.GetCurrentProcess().Id.ToString(CultureInfo.InvariantCulture); ApplicationName = Process.GetCurrentProcess().ProcessName; }
public static int CreatePri(SyslogFacility facility, SyslogSeverity severity) { if (facility == SyslogFacility.Unknown) { facility = SyslogConstants.DefaultFacility; } if (severity == SyslogSeverity.Unknown) { severity = SyslogConstants.DefaultSeverity; } return(((int)facility * 8) + (int)severity); }
/// <summary> /// Logs a message. /// </summary> /// <param name="severity">The syslog severity.</param> /// <param name="facility">The syslog facility.</param> /// <param name="msg">The message tring to log.</param> public static void Write(SyslogSeverity severity, SyslogFacility facility, string msg) { lock (syncRoot) { if (processNamePtr == IntPtr.Zero) { return; } var l_Priority = (((int)facility) << 3) | ((int)severity); libc.SafeNativeMethods.syslog(l_Priority, msg); } }
/// <summary> /// Builds a syslog-compatible message using the information we have available. /// </summary> /// <param name="facility">Syslog Facility to transmit message from</param> /// <param name="priority">Syslog severity level</param> /// <param name="time">Time stamp for log message</param> /// <param name="sender">Name of the subsystem sending the message</param> /// <param name="body">Message text</param> /// <returns>Byte array containing formatted syslog message</returns> private byte[] BuildSyslogMessage(SyslogFacility facility, SyslogSeverity priority, DateTime time, string sender, string body) { // Get sender machine name var machine = this.MachineName + " "; // Calculate PRI field var calculatedPriority = (int)facility * 8 + (int)priority; var pri = "<" + calculatedPriority.ToString(CultureInfo.InvariantCulture) + ">"; var timeToString = time.ToString("MMM dd HH:mm:ss ", new CultureInfo("en-US")); sender = sender + ": "; string[] strParams = { pri, timeToString, machine, sender, body, Environment.NewLine }; return(Encoding.ASCII.GetBytes(string.Concat(strParams))); }
/// <summary> /// Generate a syslog priority. /// </summary> /// <param name="facility">The syslog facility.</param> /// <param name="severity">The syslog severity.</param> /// <returns>A syslog priority.</returns> /// <remarks> /// <para> /// Generate a syslog priority. /// </para> /// </remarks> public static int GeneratePriority(SyslogFacility facility, SyslogSeverity severity) { if (facility < SyslogFacility.Kernel || facility > SyslogFacility.Local7) { throw new ArgumentException("SyslogFacility out of range", "facility"); } if (severity < SyslogSeverity.Emergency || severity > SyslogSeverity.Trace) { throw new ArgumentException("SyslogSeverity out of range", "severity"); } unchecked { return(((int)facility * 8) + (int)severity); } }
/// <summary> /// Concretely performs logging /// </summary> /// <param name="message">Text message</param> /// <param name="severity">Severity of message</param> protected void Log(string message, SyslogSeverity severity) { //Reset heartbeating if (_hbInterval > 0) { _heartbeatTimer.Change(HeartbeatInterval * 1000, HeartbeatInterval * 1000); } String host = Environment.MachineName; String procid = Process.GetCurrentProcess().Id.ToString(CultureInfo.InvariantCulture); String appname = Process.GetCurrentProcess().ProcessName; SyslogMessage msg = new SyslogMessage(host, Facility, severity, message) { ProcessID = procid, ApplicationName = appname }; // Getting the caller information (note that index is 3 because of Log is called by another local Method... StackTrace stackTrace = new StackTrace(); StackFrame[] stackFrames = stackTrace.GetFrames(); msg.Data = new Dictionary <String, IDictionary <String, String> >(); Dictionary <string, string> callerData = new Dictionary <string, string>(); msg.Data.Add("CallerData@" + ENTERPRISE_ID, callerData); if (stackFrames != null && stackFrames.Length >= 3) { callerData.Add("ClassName", stackFrames[2].GetMethod().DeclaringType.FullName); callerData.Add("MethodName", stackFrames[2].GetMethod().Name); callerData.Add("ModuleName", stackFrames[2].GetMethod().DeclaringType.Assembly.GetName().Name); } if (!string.IsNullOrEmpty(LogName)) { callerData.Add("LogName", LogName); } PreProcessMessage(msg); Collector.SubmitMessage(msg); }
public void TestSerializerData(SyslogFacility facility, SyslogSeverity severity, string dateTime, string hostName, string appName, string procId, string msgId, string structuredData, string message, string result) { var syslogSerializer = new SyslogMessageSerializer(); var syslogMsg = new SyslogMessage { Facility = facility, Severity = severity, Timestamp = string.IsNullOrEmpty(dateTime) ? (DateTimeOffset?)null : DateTimeOffset.ParseExact(dateTime, @"MM/dd/yyyy H:mm zzz", CultureInfo.InvariantCulture), HostName = hostName, AppName = appName, ProcId = procId, MsgId = msgId, Message = message }; IEnumerable <SyslogSdElement> structuredDataList = DecodeStructuredData(structuredData); if (structuredDataList != null) { foreach (SyslogSdElement sd in structuredDataList) { syslogMsg.StructuredDataElements.Add(sd); } } using (var stream = new MemoryStream()) { // Serialize a message to a memory stream syslogSerializer.Serialize(syslogMsg, stream); stream.Position = 0; // Get the message as a string and compare using (var reader = new StreamReader(stream)) { Assert.AreEqual(result, reader.ReadToEnd(), "The serialized messages is invalid."); } } }
public override void SetBytes(byte[] bytes) { //FALSCH: Prival muss aufgebaut sein asu %d48-%d57, d.h. nicht als byte wert /* * int index = Array.FindIndex(bytes, e => e == (byte)'<') + 1; * int prival = bytes[index]; * int facility = prival & 248; * facility = facility / 8; * int severity = prival & 7; * index = Array.FindIndex(bytes, e => e == (byte)'>') + 1; * string digit = Encoding.ASCII.GetString(new byte[1] { bytes[index] }); * int version; * int.TryParse(digit, out version); * this.Version = version; */ //RICHTIG nach RFC5424 string byteString = Encoding.ASCII.GetString(bytes); int prival = 0; int start = byteString.IndexOf('<') + 1; int length = byteString.IndexOf('>') - start; int.TryParse(byteString.Substring(start, length), out prival); int facility = prival & 248; facility = facility / 8; int severity = prival & 7; this.Severity = (SyslogSeverity)severity; this.Facility = (SyslogFacility)facility; int version = 0; int.TryParse(byteString.Substring(byteString.IndexOf('>') + 1), out version); this.Version = version; }
public void Send(string message, SyslogSeverity priority) { var msg = Message(message, priority); udp.Send(msg, msg.Length); }
private static int GeneratePriority(SyslogFacility facility, SyslogSeverity severity) => (int)((facility * SyslogFacility.Uucp) + ((SyslogFacility)((int)severity)));
/// <summary> /// syslogに送るログのプライオリティを計算します。 /// </summary> private int CalcSyslogPriority(SyslogSeverity priority) { return((int)this.Facility * 8 + (int)priority); }
/// <summary> /// syslogに送るログのプライオリティを計算します。 /// </summary> private int CalcSyslogPriority(SyslogSeverity priority) { return ((int)this.Facility * 8 + (int)priority); }
public SyslogPriorityVersion(int version, SyslogFacility facility, SyslogSeverity severity) { this.Version = version; this.Severity = severity; this.Facility = facility; }
byte[] BuildSyslogMessage(SyslogFacility facility, SyslogSeverity priority, string sender, string body) { var message = string.Format("<{0}>{1} {2} {3}: {4}", (int)facility * 8 + priority, DateTime.UtcNow.ToString("s"), hostName, sender, body); return(Encoding.ASCII.GetBytes(message)); }
/// <summary>Builds rfc-3164 compatible message</summary> /// <param name="logEvent">The NLog.LogEventInfo</param> /// <param name="facility">Syslog Facility to transmit message from</param> /// <param name="severity">Syslog severity level</param> /// <param name="body">Message text</param> /// <returns>Byte array containing formatted syslog message</returns> private byte[] BuildSyslogMessage3164(LogEventInfo logEvent, SyslogFacility facility, SyslogSeverity severity, string body) { // Calculate PRI field var priority = CalculatePriorityValue(facility, severity).ToString(CultureInfo.InvariantCulture); var time = logEvent.TimeStamp.ToLocalTime().ToString(TimestampFormat, _usCulture); // Get sender machine name var machine = MachineName.Render(logEvent); // Get sender var sender = Sender.Render(logEvent); return Encoding.ASCII.GetBytes($"<{priority}>{time} {machine} {sender}: {body}{Environment.NewLine}"); }
/// <summary> /// Builds a syslog-compatible message using the information we have available. /// </summary> /// <param name="facility">Syslog Facility to transmit message from</param> /// <param name="priority">Syslog severity level</param> /// <param name="time">Time stamp for log message</param> /// <param name="sender">Name of the subsystem sending the message</param> /// <param name="body">Message text</param> /// <returns>Byte array containing formatted syslog message</returns> private static byte[] buildSyslogMessage(SyslogFacility facility, SyslogSeverity priority, DateTime time, string sender, string body) { // Get sender machine name string machine = System.Net.Dns.GetHostName() + " "; // Calculate PRI field int calculatedPriority = (int)facility * 8 + (int)priority; string pri = "<" + calculatedPriority.ToString() + ">"; string timeToString = time.ToString("MMM dd HH:mm:ss "); sender = sender + ": "; string[] strParams = { pri, timeToString, machine, sender, body }; return Encoding.ASCII.GetBytes(string.Concat(strParams)); }
private byte[] Message(string message, SyslogSeverity priority) { string timeString = new DateTime().ToString("MMM dd HH:mm:ss "); return Encoding.ASCII.GetBytes(Priority(priority) + timeString + prefix + message); }
public void LogMessage(string message, SyslogSeverity severity) { this.ThrowIfDisposed(); syslog(this.GetLogPriority(severity), MessageFormat, message); }
private string Priority(SyslogSeverity priority) { int calculatedPriority = (int)Facility * 8 + (int)priority; return "<" + calculatedPriority.ToString(CultureInfo.InvariantCulture) + ">"; }
private byte[] Message(string message, SyslogSeverity priority) { string timeString = new DateTime().ToString("MMM dd HH:mm:ss "); return(Encoding.ASCII.GetBytes(Priority(priority) + timeString + prefix + message)); }
private string Priority(SyslogSeverity priority) { int calculatedPriority = (int)Facility * 8 + (int)priority; return("<" + calculatedPriority.ToString(CultureInfo.InvariantCulture) + ">"); }
private static int CalculatePriorityValue(SyslogFacility facility, SyslogSeverity severity) { return (int)facility * 8 + (int)severity; }
private byte[] WrapUpMessage(SyslogFacility facility, SyslogSeverity severity, string renderedLayout, LogEventInfo logEventInfo) { if (OptimiseOutput) renderedLayout = renderedLayout.Replace(" ", ""); var message = formatter.Format(facility, severity, logEventInfo, renderedLayout); return Encoding.ASCII.GetBytes(message); }
/// <summary> /// Calculates the Syslog priority value. /// </summary> /// <param name="facility">The facility.</param> /// <param name="level">The level.</param> /// <returns></returns> private static int CalculatePriority(SyslogFacility facility, SyslogSeverity level) { // Priority = Facility * 8 + Level return (int)facility * 8 + (int)level; }
public void Log(SyslogSeverity severity, string message) { int priority = GeneratePriority(SyslogFacility.Local7, severity); // Call the local libc syslog method // The second argument is a printf style format string syslog(priority, "%s", message); }
/// <summary>Builds a syslog-compatible message using the information we have available</summary> /// <param name="logEvent">The NLog.LogEventInfo</param> /// <param name="facility">Syslog Facility to transmit message from</param> /// <param name="priority">Syslog severity level</param> /// <param name="body">Message text</param> /// <returns>Byte array containing formatted syslog message</returns> private byte[] BuildSyslogMessage(LogEventInfo logEvent, SyslogFacility facility, SyslogSeverity priority, string body) { switch (Rfc) { case RfcNumber.Rfc5424: return BuildSyslogMessage5424(logEvent, facility, priority, body); default: return BuildSyslogMessage3164(logEvent, facility, priority, body); } }
/// <summary> /// Builds a syslog-compatible message using the information we have available. /// </summary> /// <param name="facility">Syslog Facility to transmit message from</param> /// <param name="priority">Syslog severity level</param> /// <param name="time">Time stamp for log message</param> /// <param name="sender">Name of the subsystem sending the message</param> /// <param name="body">Message text</param> /// <returns>Byte array containing formatted syslog message</returns> private byte[] BuildSyslogMessage(SyslogFacility facility, SyslogSeverity priority, DateTime time, string sender, string body) { // Get sender machine name string machine = MachineName + " "; // Calculate PRI field int calculatedPriority = (int)facility * 8 + (int)priority; string pri = "<" + calculatedPriority.ToString(CultureInfo.InvariantCulture) + ">"; string timeToString = time.ToString("MMM dd HH:mm:ss "); sender = sender + ": "; string[] strParams = { pri, timeToString, machine, sender, body, Environment.NewLine }; return Encoding.ASCII.GetBytes(string.Concat(strParams)); }
/// <summary>Builds rfc-5424 compatible message</summary> /// <param name="logEvent">The NLog.LogEventInfo</param> /// <param name="facility">Syslog Facility to transmit message from</param> /// <param name="severity">Syslog severity level</param> /// <param name="body">Message text</param> /// <returns>Byte array containing formatted syslog message</returns> private byte[] BuildSyslogMessage5424(LogEventInfo logEvent, SyslogFacility facility, SyslogSeverity severity, string body) { // Calculate PRI field var priority = CalculatePriorityValue(facility, severity).ToString(CultureInfo.InvariantCulture); var version = ProtocolVersion.ToString(CultureInfo.InvariantCulture); var time = logEvent.TimeStamp.ToString("o"); // Get sender machine name var machine = Left(MachineName.Render(logEvent), 255); var sender = Left(Sender.Render(logEvent), 48); var procId = Left(ProcId.Render(logEvent), 128); var msgId = Left(MsgId.Render(logEvent), 32); var headerData = Encoding.ASCII.GetBytes($"<{priority}>{version} {time} {machine} {sender} {procId} {msgId} "); var structuredData = Encoding.UTF8.GetBytes(StructuredData.Render(logEvent) + " "); var messageData = Encoding.UTF8.GetBytes(body); var allData = new List<byte>(headerData.Length + structuredData.Length + _bom.Length + messageData.Length); allData.AddRange(headerData); allData.AddRange(structuredData); allData.AddRange(_bom); allData.AddRange(messageData); return allData.ToArray(); }
/// <summary> /// Generate a syslog priority. /// </summary> /// <param name="facility">The syslog facility.</param> /// <param name="severity">The syslog severity.</param> /// <returns>A syslog priority.</returns> private static int GeneratePriority(SyslogFacility facility, SyslogSeverity severity) { return ((int)facility * 8) + (int)severity; }
/// <summary> /// Generate a syslog priority. /// </summary> /// <param name="facility">The syslog facility.</param> /// <param name="severity">The syslog severity.</param> /// <returns>A syslog priority.</returns> /// <remarks> /// <para> /// Generate a syslog priority. /// </para> /// </remarks> public static int GeneratePriority(SyslogFacility facility, SyslogSeverity severity) { if (facility < SyslogFacility.Kernel || facility > SyslogFacility.Local7) { throw new ArgumentException("SyslogFacility out of range", "facility"); } if (severity < SyslogSeverity.Emergency || severity > SyslogSeverity.Debug) { throw new ArgumentException("SyslogSeverity out of range", "severity"); } unchecked { return ((int)facility * 8) + (int)severity; } }
private int GetLogPriority(SyslogSeverity messageSeverity) { return((int)messageSeverity + ((int)this.connectionFacility * 8)); }
byte[] BuildSyslogMessage(SyslogFacility facility, SyslogSeverity priority, string sender, string body) { var message = string.Format("<{0}>{1} {2} {3}: {4}", (int) facility*8 + priority, DateTime.UtcNow.ToString("s"), hostName, sender, body); return Encoding.ASCII.GetBytes(message); }
// Call to set repeats for important messages public static void SetRepeat(SyslogSeverity severity, int count = 3) { repeatSeverity = severity; repeatCount = count; }
public static int GetSyslogPriority(SyslogFacility facility, SyslogSeverity severity) { return(((byte)facility * 8) + (byte)severity); }
public static void GetPriValues(int priorityValue, out SyslogFacility facility, out SyslogSeverity severity) { int facilityValue = priorityValue / 8; int severityValue = priorityValue % 8; facility = (SyslogFacility)facilityValue; severity = (SyslogSeverity)severityValue; }
/// <summary> /// Generate a syslog priority. /// </summary> /// <param name="facility">The syslog facility.</param> /// <param name="severity">The syslog severity.</param> /// <returns>A syslog priority.</returns> private static int GeneratePriority(SyslogFacility facility, SyslogSeverity severity) { return(((int)facility * 8) + (int)severity); }
private static byte[] BuildSyslogMessage(SyslogFacility facility, SyslogSeverity level, string sender, string messageBody) { int priority = CalculatePriority(facility, level); string message = string.Format("<{0}>{1} {2} {3}: {4}{5}", priority, DateTime.Now.ToString("MMM dd HH:mm:ss"), Dns.GetHostName(), sender.Substring(0, 32), messageBody, Environment.NewLine); return Encoding.ASCII.GetBytes(message); }