using GreenTree.Nachtragsmanagement.Core; using GreenTree.Nachtragsmanagement.Core.Data; using GreenTree.Nachtragsmanagement.Core.Domain.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace GreenTree.Nachtragsmanagement.Services.Logging { /// /// Default logger /// public partial class DefaultLogger : ILogger { #region Fields private readonly IRepository _logRepository; private readonly IWebHelper _webHelper; #endregion #region Ctor /// /// Initializes a new instance of the DefaultLogger class /// public DefaultLogger( IRepository logRepository, IWebHelper webHelper) { this._logRepository = logRepository; this._webHelper = webHelper; } #endregion #region Methods /// /// Determines whether a log level is enabled /// /// Log level /// Result public virtual bool IsEnabled(LogLevel level) { switch (level) { case LogLevel.Debug: return false; default: return true; } } /// /// Deletes a log item /// /// Log item public virtual void DeleteLog(Log log) { if (log == null) throw new ArgumentNullException("log"); _logRepository.Delete(log); } /// /// Clears a log /// public virtual void ClearLog() { var logs = _logRepository.Table.ToList(); foreach (var logItem in logs) _logRepository.Delete(logItem); } /// /// Gets all log items /// /// Log item collection public IList GetAllLogs() { return _logRepository.Table.ToList(); } /// /// Gets a log item /// /// Log item identifier /// Log item public virtual Log GetLogById(int logId) { if (logId == 0) return null; return _logRepository.GetById(logId); } /// /// Get log items by identifiers /// /// Log item identifiers /// Log items public virtual IList GetLogByIds(int[] logIds) { if (logIds == null || logIds.Length == 0) return new List(); var query = from l in _logRepository.Table where logIds.Contains(l.Id) select l; var logItems = query.ToList(); //sort by passed identifiers var sortedLogItems = new List(); foreach (int id in logIds) { var log = logItems.Find(x => x.Id == id); if (log != null) sortedLogItems.Add(log); } return sortedLogItems; } /// /// Inserts a log item /// /// Log level /// /// The short message /// The full message /// The user to associate log record with /// A log item public virtual Log InsertLog(LogLevel logLevel, string shortMessage, BaseEntity entity = null, string fullMessage = "", Core.Domain.User.User user = null) { var log = new Log { LogLevel = logLevel, ShortMessage = shortMessage, FullMessage = fullMessage, IpAddress = _webHelper.GetCurrentIpAddress(), UserId = user == null ? null : (int?)user.Id, EntityId = entity == null ? null : (int?)entity.Id, EntityType = entity == null ? null : LoggingExtensions.GetTypeNameFromEfEntityType(entity), PageUrl = _webHelper.GetThisPageUrl(true), ReferrerUrl = _webHelper.GetUrlReferrer(), CreatedOnUtc = DateTime.UtcNow }; _logRepository.Insert(log); return log; } #endregion } }