Exemplo n.º 1
0
        /// <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);
            }
        }
Exemplo n.º 2
0
 public void Write(Exception e, RoggleLogLevel level)
 {
     RavenClient.Capture(new SentryEvent(e)
     {
         Level = ToSentryErrorLevel(level)
     });
 }
Exemplo n.º 3
0
        /// <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}";
        }
Exemplo n.º 4
0
        /// <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);
            }
        }
Exemplo n.º 5
0
        /// <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);
            }
        }
Exemplo n.º 6
0
        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
        }
Exemplo n.º 7
0
 public void Write(string message, RoggleLogLevel level)
 {
     RavenClient.Capture(new SentryEvent(message)
     {
         Level = ToSentryErrorLevel(level)
     });
 }
Exemplo n.º 8
0
        /// <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);
            }
        }
Exemplo n.º 9
0
        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}'.");
                }
            }
        }
Exemplo n.º 10
0
        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
        }
Exemplo n.º 11
0
 public void Write(string message, Exception e, RoggleLogLevel level)
 {
     RavenClient.Capture(new SentryEvent(e)
     {
         Level = ToSentryErrorLevel(level), Message = message
     });
 }
Exemplo n.º 12
0
 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;
 }
Exemplo n.º 13
0
 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;
 }
Exemplo n.º 14
0
 /// <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);
         }
     }
 }
Exemplo n.º 15
0
 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);
 }
Exemplo n.º 16
0
 /// <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);
     }
 }
Exemplo n.º 17
0
        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));
        }
Exemplo n.º 18
0
 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;
 }
Exemplo n.º 19
0
 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.");
     }
 }
Exemplo n.º 20
0
 /// <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;
 }
Exemplo n.º 21
0
 /// <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;
 }
Exemplo n.º 22
0
        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 ...
                }
            }
        }
Exemplo n.º 23
0
        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.");
            }
        }
Exemplo n.º 24
0
        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);
            }
        }
Exemplo n.º 25
0
        /// <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);
                }
            }
        }
Exemplo n.º 26
0
 /// <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);
         }
     }
 }
Exemplo n.º 27
0
 /// <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);
 }
Exemplo n.º 28
0
 /// <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);
 }
Exemplo n.º 29
0
 /// <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);
 }
Exemplo n.º 30
0
 /// <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);
 }
Exemplo n.º 31
0
 /// <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();
 }
Exemplo n.º 32
0
 public void Write(string message, Exception e, RoggleLogLevel level)
 {
     Write($"{message}{Environment.NewLine}{e.ToString()}", level);
 }
Exemplo n.º 33
0
 public void Write(Exception e, RoggleLogLevel level) => Write2Func(e, level);
Exemplo n.º 34
0
 // Write a message log to roggle system
 public abstract void Write(string message, RoggleLogLevel level);
Exemplo n.º 35
0
 public override void Write(string message, RoggleLogLevel level)
 => Console.WriteLine($"{level.GetDisplayValue()}> {message}");
Exemplo n.º 36
0
        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));
        }
Exemplo n.º 37
0
 public BaseRoggle(RoggleLogLevel acceptedLogLevels)
 {
     AcceptedLogLevels = acceptedLogLevels;
 }
Exemplo n.º 38
0
 // Write a message log to roggle system
 public abstract void Write(string message, RoggleLogLevel level);
Exemplo n.º 39
0
 public void Write(Exception e, RoggleLogLevel level)
 {
     Write(e.ToString(), level);
 }
Exemplo n.º 40
0
 /// <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);
 }
Exemplo n.º 41
0
 public ConsoleRoggle(RoggleLogLevel acceptedLogLevels = RoggleLogLevel.Info | RoggleLogLevel.Warning | RoggleLogLevel.Error | RoggleLogLevel.Critical)
     : base(acceptedLogLevels)
 {
 }
Exemplo n.º 42
0
 public override void Write(string message, RoggleLogLevel level)
     => Console.WriteLine(message);
Exemplo n.º 43
0
 public void Write(string message, RoggleLogLevel level) => Write1Func(message, level);
Exemplo n.º 44
0
 public ConsoleRoggle(RoggleLogLevel acceptedLogLevels = RoggleLogLevel.Info | RoggleLogLevel.Warning | RoggleLogLevel.Error | RoggleLogLevel.Critical)
     : base(acceptedLogLevels)
 {
 }
Exemplo n.º 45
0
 public void Write(string message, Exception e, RoggleLogLevel level) => Write3Func(message, e, level);
Exemplo n.º 46
0
 public SentryRoggle(string dsn,
                     RoggleLogLevel acceptedLogLevels = RoggleLogLevel.Error | RoggleLogLevel.Info | RoggleLogLevel.Warning | RoggleLogLevel.Critical)
 {
     AcceptedLogLevels = acceptedLogLevels;
     RavenClient       = new RavenClient(dsn);
 }
Exemplo n.º 47
0
 /// <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);
 }
Exemplo n.º 48
0
        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);
            }
        }
Exemplo n.º 49
0
 /// <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();
 }
Exemplo n.º 50
0
 public BaseRoggle(RoggleLogLevel acceptedLogLevels)
 {
     AcceptedLogLevels = acceptedLogLevels;
 }