/// <summary> /// write a message to any subscribers /// </summary> /// <param name="message"></param> /// <param name="sender"></param> static public void Write(string message, object sender = null) { StackTrace stack = new StackTrace(true); StackFrame frame = stack.GetFrame(1); // should be frame that called this string toWrite = $"[{DateTime.Now} {System.IO.Path.GetFileName(frame.GetFileName())}:{frame.GetFileLineNumber()}] {message}"; LogWritten?.Invoke(sender, toWrite); }
public Task <LogResponse> Log(IEnumerable <LogglyEvent> logglyEvents) { LogglyEvents.AddRange(logglyEvents); LogWritten.Set(); return(Task.FromResult(new LogResponse() { Code = ResponseCode.Success })); }
public Task <LogResponse> Log(LogglyEvent logglyEvent) { LogglyEvents.Add(logglyEvent); LogWritten.Set(); return(Task.FromResult(new LogResponse() { Code = ResponseCode.Success })); }
public void WriteLog(string Message, string Desc = "", LogLevel level = LogLevel.Message, string Entry = "default") { var logs = Logs[Entry] as List <LogItem>; if (logs != null) { var log = new LogItem() { Category = Entry, Desc = Desc, Level = level, Message = Message }; logs.Add(log); LogWritten?.Invoke(log); } }
/// <summary> /// Flushes this instance. /// </summary> private void FlushLog(bool disposing) { ///// // Any events not flushed after 2 seconds will be lost due to the internal finalizer timeout. ///// try { Trace.TraceInformation("Flush starting... " + _eventLogEntryQueue.Count + " entries found."); // Get the path of the log file string machineName = Environment.MachineName; string processName = Process.GetCurrentProcess( ).MainModule.ModuleName; // Was the wrong process string randonly causing tests to fail. // Write the log entry to the event log bool acquired; using (_syncMutex.AcquireRelease(out acquired)) { // Wait to acquire the mutex if (acquired) { int entriesWritten = 0; EventLogEntry logEntry; List <EventLogEntry> entries = new List <EventLogEntry>( ); while (_eventLogEntryQueue.TryDequeue(out logEntry)) { if (logEntry == null) { continue; } logEntry.Id = Guid.NewGuid( ); logEntry.Machine = machineName; logEntry.Process = processName; entries.Add(logEntry); } if (entries.Count > 0) { // Only attempt to open the file if there are entries to be written FileStream logStream = FileHelper.TryOpenFile(_path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read, 10000); try { if (logStream != null) { try { logStream.Seek(0, SeekOrigin.End); // Encode the log entry to raw bytes byte [] data = EncodeEntries(entries); // Write the log entry if (data != null && data.Length > 0) { logStream.Write(data, 0, data.Length); entriesWritten = entries.Count; } logStream.Flush( ); } finally { logStream.Flush( ); } } } finally { logStream?.Dispose( ); } } if (entriesWritten > 0) { // Validate the current log file and check if any processing is required var details = Validate(LogWritten != null); LogWritten?.Invoke(this, new LogWrittenEventArgs(_path, entriesWritten, details.RotateDetails, details.PurgeDetails)); } } } } catch (Exception ex) { Trace.TraceError("Failed to flush file event log. {0}", ex); } finally { if (disposing) { Trace.TraceInformation("Flush complete. " + _eventLogEntryQueue.Count + " entries remain."); } } }