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
}
}