/// <summary> /// Create the event source if not exist and log. In order to create the event source, the application must have administrative rights. /// </summary> public EventLogRoggle(string eventSourceName = null, string eventLogName = null, RoggleLogLevel acceptedLogLevels = RoggleLogLevel.Info | RoggleLogLevel.Warning | RoggleLogLevel.Error | RoggleLogLevel.Critical) : base(acceptedLogLevels) { try { // Set event source and log name, set defaults if necessary EventSourceName = eventSourceName ?? "Application"; EventLogName = eventLogName ?? "Application"; // Check if event source does not already exists if (!EventLog.SourceExists(EventSourceName)) { // Event source does not exist, create it EventLog.CreateEventSource(EventSourceName, EventLogName); // Write a test entry EventLog.WriteEntry(EventSourceName, "Roggle in da place !", EventLogEntryType.Information); } } catch (Exception e) { // Exception occurs, encapsulate it inside a Roggle exception and throw it throw new RoggleException($"Application event Roggle cannot create the event source with source name {EventSourceName} and log name {EventLogName}. Check inner exception.", e); } }
public void Write(Exception e, RoggleLogLevel level) { RavenClient.Capture(new SentryEvent(e) { Level = ToSentryErrorLevel(level) }); }
/// <summary> /// Build the final log message that will be wrote. /// </summary> /// <param name="message">Message coming from managers.</param> /// <param name="level">Level of log.</param> /// <returns>The built message.</returns> public virtual string BuildMessage(string message, RoggleLogLevel level) { var dateStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff"); var levelStr = RoggleHelper.GetDisplayValue(level); return $"[{levelStr}] ({dateStr}): {message}"; }
/// <summary> /// Create the file log. If the file does not exist, this method will create the file. /// </summary> public FileRoggle(string logFilePath = null, int maxFileLength = 10485760, RoggleLogLevel acceptedLogLevels = RoggleLogLevel.Info | RoggleLogLevel.Warning | RoggleLogLevel.Error | RoggleLogLevel.Critical) : base(acceptedLogLevels) { try { // Set log file path, set defaults if necessary LogFilePath = logFilePath ?? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonPrograms), "Roggle", "roggle.log"); MaxFileLength = maxFileLength; // Create path if not exists Directory.CreateDirectory(Path.GetDirectoryName(LogFilePath)); // Write a test entry and create the file if necessary if (!File.Exists(LogFilePath)) { File.AppendAllLines(LogFilePath, new string[] { "Log file successfuly created !" }); } } catch (Exception e) { // Exception occurs, encapsulate it inside a Roggle exception and throw it throw new RoggleException($"File Roggle cannot create the file at path {LogFilePath}, check inner exception.", e); } }
public override void Write(string message, RoggleLogLevel level = RoggleLogLevel.Error) { // Try to write in file log File.AppendAllLines(LogFilePath, new string[] { message }); #region Check if file size is not max var isLessThanMax = false; var logFile = new FileInfo(LogFilePath); while (!isLessThanMax) { if (logFile.Length >= MaxFileLength) { // Get all lines var contentLines = File.ReadAllLines(LogFilePath); // Skip first line File.WriteAllLines(LogFilePath, contentLines.Skip(1).ToArray()); } else { isLessThanMax = true; } } #endregion }
public void Write(string message, RoggleLogLevel level) { RavenClient.Capture(new SentryEvent(message) { Level = ToSentryErrorLevel(level) }); }
/// <summary> /// Create the file log. If the file does not exist, this method will create the file. /// </summary> public FileRoggle(string logFilePath = null, int maxFileLength = 10485760, RoggleLogLevel acceptedLogLevels = RoggleLogLevel.Info | RoggleLogLevel.Warning | RoggleLogLevel.Error | RoggleLogLevel.Critical) : base(acceptedLogLevels) { try { // Set log file path, set defaults if necessary LogFilePath = logFilePath ?? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonPrograms), "Roggle", "roggle.log"); MaxFileLength = maxFileLength; // Create path if not exists Directory.CreateDirectory(Path.GetDirectoryName(LogFilePath)); // Write a test entry and create the file if necessary if (!File.Exists(LogFilePath)) { File.AppendAllLines(LogFilePath, new string[] { "Roggle in da place !" }); } } catch (Exception e) { // Exception occurs, encapsulate it inside a Roggle exception and throw it throw new RoggleException($"File Roggle cannot create the file at path {LogFilePath}, check inner exception.", e); } }
public override void Write(string message, RoggleLogLevel level) { var newEvent = new OverseerEvent() { Description = message, Name = Source, UserId = Key, Level = level == RoggleLogLevel.Critical ? OverseerEventLevel.Critical : level == RoggleLogLevel.Debug ? OverseerEventLevel.Debug : level == RoggleLogLevel.Error ? OverseerEventLevel.Error : level == RoggleLogLevel.Info ? OverseerEventLevel.Information : level == RoggleLogLevel.Warning ? OverseerEventLevel.Warning : OverseerEventLevel.Debug }; using (var client = new HttpClient()) { client.BaseAddress = new Uri(Url); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var response = AsyncHelper.RunSync(() => client.PostAsJsonAsync("api/events", newEvent)); if (!response.IsSuccessStatusCode) { throw new RoggleException($"Overseer return an error '{response.StatusCode}: {response.ReasonPhrase}'."); } } }
public override void Write(string message, RoggleLogLevel level = RoggleLogLevel.Error) { // Try to write in file log File.AppendAllLines(LogFilePath, new string[] { message }); #region Check if file size is not max bool isLessThanMax = false; FileInfo logFile = new FileInfo(LogFilePath); while (!isLessThanMax) { if (logFile.Length >= MaxFileLength) { // Get all lines string[] contentLines = File.ReadAllLines(LogFilePath); // Skip first line File.WriteAllLines(LogFilePath, contentLines.Skip(1).ToArray()); } else { isLessThanMax = true; } } #endregion }
public void Write(string message, Exception e, RoggleLogLevel level) { RavenClient.Capture(new SentryEvent(e) { Level = ToSentryErrorLevel(level), Message = message }); }
public OverseerRoggle(string url, Guid key, string source, RoggleLogLevel acceptedLogLevels = RoggleLogLevel.Error | RoggleLogLevel.Info | RoggleLogLevel.Warning | RoggleLogLevel.Critical) : base(acceptedLogLevels) { Url = url; Key = key; Source = source; }
/// <summary> /// Write message in underlying log systems. /// </summary> /// <param name="message">The message to be log.</param> /// <param name="level">The level of the message to be log.</param> public static void Write(string message, RoggleLogLevel level = RoggleLogLevel.Error) { foreach (var roggle in Instance.Roggles) { if (roggle.AcceptedLogLevels.HasFlag(level)) { roggle.Write(message, level); } } }
public ErrorLevel ToSentryErrorLevel(RoggleLogLevel level) { return (level == RoggleLogLevel.Critical ? ErrorLevel.Fatal : level == RoggleLogLevel.Debug ? ErrorLevel.Debug : level == RoggleLogLevel.Error ? ErrorLevel.Error : level == RoggleLogLevel.Info ? ErrorLevel.Info : level == RoggleLogLevel.Warning ? ErrorLevel.Warning : ErrorLevel.Error); }
/// <summary> /// Base method to write to a Roggle. /// </summary> /// <param name="message">Message coming from managers.</param> /// <param name="level">Level of log.</param> public virtual void WriteBase(string message, RoggleLogLevel level) { try { Write(BuildMessage(message, level), level); } catch (Exception e) { throw new RoggleException($"Something goes wrong when trying to write logs with {GetType().Name}. Check inner exception.", e); } }
public override void Write(string message, RoggleLogLevel level) { // Truncate message if necessary if (message.Length > MaxEventLogEntryLength) { message = string.Concat(message.Substring(0, MaxEventLogEntryLength - 3), "..."); } // Try to write in EventLog EventLog.WriteEntry(EventSourceName, message, ToEventLogEntryType(level)); }
public CustomRoggle( Action <string, RoggleLogLevel> write1Func, Action <Exception, RoggleLogLevel> write2Func, Action <string, Exception, RoggleLogLevel> write3Func, Action <object, UnhandledExceptionEventArgs> unhandledExceptionFunc, RoggleLogLevel acceptedLogLevels = RoggleLogLevel.Error | RoggleLogLevel.Info | RoggleLogLevel.Warning | RoggleLogLevel.Critical) { AcceptedLogLevels = acceptedLogLevels; Write1Func = write1Func; Write2Func = write2Func; Write3Func = write3Func; }
public EventLogEntryType ToEventLogEntryType(RoggleLogLevel level) { switch (level) { case RoggleLogLevel.Critical: return EventLogEntryType.Error; case RoggleLogLevel.Debug: return EventLogEntryType.Information; case RoggleLogLevel.Error: return EventLogEntryType.Error; case RoggleLogLevel.Info: return EventLogEntryType.Information; case RoggleLogLevel.Warning: return EventLogEntryType.Warning; default: throw new NotImplementedException($"RoggleLogLevel {level} has not been implemented."); } }
/// <summary> /// Retrieve the data in app.config. /// </summary> public EmailRoggle(string host, int port, string login, string password, string from, string to, string subject, bool useSsl = false, RoggleLogLevel acceptedLogLevels = RoggleLogLevel.Info | RoggleLogLevel.Warning | RoggleLogLevel.Error | RoggleLogLevel.Critical) : base(acceptedLogLevels) { Host = host; Port = port; Login = login; Password = password; From = from; To = to; Subject = subject; UseSsl = useSsl; }
public override void Write(string message, RoggleLogLevel level) { try { var newEvent = new OverseerEvent() { Description = message, Name = Source, UserId = Key, Level = level == RoggleLogLevel.Critical ? OverseerEventLevel.Critical : level == RoggleLogLevel.Debug ? OverseerEventLevel.Debug : level == RoggleLogLevel.Error ? OverseerEventLevel.Error : level == RoggleLogLevel.Info ? OverseerEventLevel.Information : level == RoggleLogLevel.Warning ? OverseerEventLevel.Warning : OverseerEventLevel.Debug }; using (var client = new HttpClient()) { client.BaseAddress = new Uri(Url); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var response = AsyncHelper.RunSync(() => client.PostAsJsonAsync("api/events", newEvent)); if (!response.IsSuccessStatusCode) { throw new RoggleException($"Overseer return an error '{response.StatusCode}: {response.ReasonPhrase}'."); } } } catch (Exception e) { try { // Try to write a overseer.log var content = $"Something goes wrong while trying to log to Overseer: {e.Message}.{Environment.NewLine}" + $"RoggleOverseer wanted to write the following error:{Environment.NewLine}" + $"{Source} - {message}"; File.WriteAllText("overseer.log", content); } catch { // Nothing else to do ... } } }
public EventLogEntryType ToEventLogEntryType(RoggleLogLevel level) { switch (level) { case RoggleLogLevel.Critical: return(EventLogEntryType.Error); case RoggleLogLevel.Debug: return(EventLogEntryType.Information); case RoggleLogLevel.Error: return(EventLogEntryType.Error); case RoggleLogLevel.Info: return(EventLogEntryType.Information); case RoggleLogLevel.Warning: return(EventLogEntryType.Warning); default: throw new NotImplementedException($"RoggleLogLevel {level} has not been implemented."); } }
public override void Write(string message, RoggleLogLevel level) { // Send an email with given data using (SmtpClient client = new SmtpClient()) { var mail = new MailMessage(From, To) { Subject = Subject, Body = message }; client.Host = Host; client.Port = Port; client.EnableSsl = UseSsl; client.Credentials = new NetworkCredential(Login, Password); client.Send(mail); } }
/// <summary> /// Write a message and an exception in underlying log systems. /// </summary> /// <param name="message">The message to be log.</param> /// <param name="exception">The exception to be log.</param> /// <param name="level">The level of the exception to be log.</param> public static void Write(string message, Exception exception, RoggleLogLevel level = RoggleLogLevel.Error) { foreach (var item in Instance.ConstantExceptionData) { if (exception.Data.Contains(item.Key)) { exception.Data[item.Key] = item.Value; } else { exception.Data.Add(item.Key, item.Value); } } foreach (var roggle in Instance.Roggles) { if (roggle.AcceptedLogLevels.HasFlag(level)) { roggle.Write(message, exception, level); } } }
/// <summary> /// Write message in underlying log systems. /// </summary> /// <param name="message">The message to be log.</param> /// <param name="level">The level of the message to be log.</param> public static void Write(string message, RoggleLogLevel level = RoggleLogLevel.Error) { foreach (BaseRoggle roggle in Instance.Roggles) { if (roggle.AcceptedLogLevels.HasFlag(level)) { roggle.Write(message, level); } } }
/// <summary> /// Write message in underlying log systems. /// </summary> /// <param name="message">The message to be log.</param> /// <param name="level">The level of the message to be log.</param> public void Write(string message, RoggleLogLevel level = RoggleLogLevel.Error) { Logs[level].AppendLine(message); }
/// <summary> /// Write an exception in underlying log systems. /// </summary> /// <param name="exception">The exception to be log.</param> /// <param name="level">The level of the exception to be log.</param> public void Write(Exception exception, RoggleLogLevel level = RoggleLogLevel.Error) { Write(exception.ToString(), level: level); }
/// <summary> /// Write a message and an exception in underlying log systems. /// </summary> /// <param name="message">The message to be log.</param> /// <param name="exception">The exception to be log.</param> /// <param name="level">The level of the exception to be log.</param> public void Write(string message, Exception exception, RoggleLogLevel level = RoggleLogLevel.Error) { Write(string.Join(Environment.NewLine, message, exception.ToString()), level: level); }
/// <summary> /// Clear a precise level of logs. /// </summary> /// <param name="level">The level of log to be cleared.</param> public void Clear(RoggleLogLevel level) { Logs[level].Clear(); }
public void Write(string message, Exception e, RoggleLogLevel level) { Write($"{message}{Environment.NewLine}{e.ToString()}", level); }
public void Write(Exception e, RoggleLogLevel level) => Write2Func(e, level);
// Write a message log to roggle system public abstract void Write(string message, RoggleLogLevel level);
public override void Write(string message, RoggleLogLevel level) => Console.WriteLine($"{level.GetDisplayValue()}> {message}");
public BaseRoggle(RoggleLogLevel acceptedLogLevels) { AcceptedLogLevels = acceptedLogLevels; }
public void Write(Exception e, RoggleLogLevel level) { Write(e.ToString(), level); }
public ConsoleRoggle(RoggleLogLevel acceptedLogLevels = RoggleLogLevel.Info | RoggleLogLevel.Warning | RoggleLogLevel.Error | RoggleLogLevel.Critical) : base(acceptedLogLevels) { }
public override void Write(string message, RoggleLogLevel level) => Console.WriteLine(message);
public void Write(string message, RoggleLogLevel level) => Write1Func(message, level);
public void Write(string message, Exception e, RoggleLogLevel level) => Write3Func(message, e, level);
public SentryRoggle(string dsn, RoggleLogLevel acceptedLogLevels = RoggleLogLevel.Error | RoggleLogLevel.Info | RoggleLogLevel.Warning | RoggleLogLevel.Critical) { AcceptedLogLevels = acceptedLogLevels; RavenClient = new RavenClient(dsn); }
public override void Write(string message, RoggleLogLevel level) { // Send an email with given data using (SmtpClient client = new SmtpClient()) { MailMessage mail = new MailMessage(From, To); mail.Subject = Subject; mail.Body = message; client.Host = Host; client.Port = Port; client.EnableSsl = UseSsl; client.Credentials = new NetworkCredential(Login, Password); client.Send(mail); } }