diff --git a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Contracts/ILogger.cs b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Contracts/ILogger.cs index 61c3b2e..b7d2ea1 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Contracts/ILogger.cs +++ b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Contracts/ILogger.cs @@ -6,9 +6,14 @@ using System.Threading.Tasks; namespace TeamHobby.HobbyProjectGenerator.ServiceLayer { - public interface ILogger + public interface ILogger { - bool Log(LogEntry log); + // private IDataSource _datasource = T; + // attempts to connect to the data source provided by the type T + // returns true if the connection is successful + + // public bool Connect(); + public bool Log(LogEntry Log); // IList GetAllLogs(); diff --git a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Contracts/ILoggerFactory.cs b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Contracts/ILoggerFactory.cs index 7adf72e..7c649c7 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Contracts/ILoggerFactory.cs +++ b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Contracts/ILoggerFactory.cs @@ -8,9 +8,9 @@ namespace TeamHobby.HobbyProjectGenerator.ServiceLayer.Contracts { public interface ILoggerFactory { - ILogger CreateLogger() - { - return new DBLogger(); - } + + ILogger CreateLogger(); } } + + diff --git a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Implementations/DBLoggerFactory.cs b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Implementations/DBLoggerFactory.cs index 946075f..75ee8b3 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Implementations/DBLoggerFactory.cs +++ b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Implementations/DBLoggerFactory.cs @@ -11,9 +11,10 @@ namespace TeamHobby.HobbyProjectGenerator.ServiceLayer.Implementations { public DBLoggerFactory() { + //this._logDatabase = logDatabase; } - public ILogger CreateLogger() - { + + public ILogger CreateLogger() { return new DBLogger(); } } diff --git a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Implementations/LogEntry.cs b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Implementations/LogEntry.cs index 79e8a8c..dc5f4d2 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Implementations/LogEntry.cs +++ b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Implementations/LogEntry.cs @@ -4,9 +4,8 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace TeamHobby.HobbyProjectGenerator.ServiceLayer -{ - public enum LogLevel + +public enum LogLevel { Info, Debug, Warning, Error } @@ -16,38 +15,60 @@ namespace TeamHobby.HobbyProjectGenerator.ServiceLayer View, Business, Server, Data, Datastore } + +namespace TeamHobby.HobbyProjectGenerator.Logging.Contracts +{ // LogEntry is a record type with init properties for each field + // ensures that log entries are immutable after initialization + // LogEntry is a record type with init properties for each field // ensures that log entries are immutable after initialization public record LogEntry { - public LogLevel level { get; init; } - public LogCategory category { get; init; } - public string user { get; init; } - public string description { get; init; } - public DateTime timestamp { get; init; } + private LogLevel _level { get; init; } + private LogCategory _category { get; init; } + private string _user { get; init; } + private string _description { get; init; } - - // Constructor requireing only the description as an arg - // Assigns default values for LogLevel (Info), LogCategory (Server), user ("System"), and the UTC time at initialization for timestamp - public LogEntry(string description) - { - this.level = LogLevel.Info; - this.category = LogCategory.Server; - this.user = "System"; - this.description = description; - this.timestamp = DateTime.UtcNow; - } // Constructor with args for all fields except timestamp // timestamp is always set to the UTC time at the time of initialization - public LogEntry(LogLevel level, string user, LogCategory category, string description) + public LogEntry(LogLevel level, LogCategory category, string user, string description) { - this.level = level; - this.category = category; - this.user = user; - this.description = description; - this.timestamp = DateTime.UtcNow; + this._level = level; + this._category = category; + this._user = user; + this._description = description; } + // Constructor requiring only the description as an arg + // Assigns default values for LogLevel (Info), LogCategory (Server), user ("System"), and the UTC time at initialization for timestamp + // public LogEntry(string description) + // { + // this._level = LogLevel.Debug; + // this._category = LogCategory.Server; + // this._user = "SYSTEM"; + // this._description = description; + // } + public LogLevel GetLevel() { + return this._level; + } + + public LogCategory GetCategory() { + return this._category; + } + + public string GetUser() { + return this._user; + } + + public string GetDescription() { + return this._description; + } + + public void ShowLog() { + Console.WriteLine("Timestamp: {0} | Level: {1}, | Category: {2}, | User: {3}, | Description: '{4}' ", DateTime.Now, this._level.ToString(),this._category.ToString(), this._user, this._description); + } } -} \ No newline at end of file +} + + diff --git a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Implementations/LoggingManager.cs b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Implementations/LoggingManager.cs index d74aa53..bc12c1a 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Implementations/LoggingManager.cs +++ b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Logging/Implementations/LoggingManager.cs @@ -10,36 +10,81 @@ using TeamHobby.HobbyProjectGenerator.ServiceLayer.Implementations; namespace TeamHobby.HobbyProjectGenerator.ServiceLayer { - internal class LoggingManager + + public class LoggingManager { - private readonly IDataSource _conn; - private readonly ILogger _logger; - private readonly ILoggerFactory _factory; - private readonly LogEntry _logEntry; + // private static IDataSource _datasource; + private ILogger _logger; + private ILoggerFactory _factory; + private LogEntry _logEntry; + + // assign default values for LogEntry fields + // these are not readonly because they can be overwritten to specify logging at specific field(s) from the main controller by using the public setters for each field + private LogLevel _level = LogLevel.Debug; + private LogCategory _category = LogCategory.Server; + private string _user = "System"; // Both Constructors take an IDataSource arg to make logging extensible to future data sources - // first constructor has no additional args - defaults to using the DBFactiry implementation - public LoggingManager(IDataSource dataSource) + // first constructor has no additional args - defaults to using a DBLoggerFactory to log to database + public LoggingManager() { - _conn = dataSource; + // _datasource = datasource; + _logEntry = new LogEntry(_level, _category, _user, "Logging Manager instantiated"); _factory = new DBLoggerFactory(); _logger = _factory.CreateLogger(); } // second constructor takes an additional ILoggerFactory arg - allows for extensible logger types - public LoggingManager(IDataSource dataSource, ILoggerFactory factory) + public LoggingManager(ILoggerFactory factory) { - _conn = dataSource; + //_datasource = datasource; + _logEntry = new LogEntry(_level, _category, _user, "Logging Manager instantiated"); _factory = factory; _logger = _factory.CreateLogger(); } - public void Process() - { - _logger.Log(_logEntry); + // // used to create a template entry with the desired fields to write entries at + // public void CreateLog(LogLevel level, LogCategory category, string user, string description) { + // _logEntry = new LogEntry(level, + // category, user, description); + // _logger.Log(_logEntry); + // } + + // creates a LogEntry object using a description arg + // uses whateever the current assignments for the other fields ares + public bool CreateLog(string description) { + // creates a LogEntry using the passed in description and current assignements from the necessary fields + _logEntry = new LogEntry(_level, _category, _user, description); + + // attempt to log the LogEntry by calling the _logger's Log() method + try { + _logger.Log(_logEntry); + return true; + } + catch { + return false; + } + } + public void Level(LogLevel level) { + this._level = level; + } + public void Category(LogCategory category) { + this._category = category; + } + public void User(string user) { + this._user = user; + } + + // public static void Source(IDataSource datasource) { + // _datasource = datasource; + // } + + // public static IDataSource GetDataSource() { + // return _datasource; + // } } }