From 0711da45b346365792204add55cb1b7d34596fa4 Mon Sep 17 00:00:00 2001 From: Ogoun Date: Fri, 20 Dec 2019 15:44:17 +0300 Subject: [PATCH] Append ZeroLevel.Logger --- ConfigurationTests/ConfigurationTests.csproj | 4 -- ConfigurationTests/Program.cs | 7 +--- ZeroLevel.Logger/App.config | 8 ++++ ZeroLevel.Logger/LogService.cs | 40 +++++++++++++++++++ ZeroLevel.Logger/Program.cs | 15 +++++++ .../PublishProfiles/FolderProfile.pubxml | 18 +++++++++ ZeroLevel.Logger/ProxySample/LogMessage.cs | 24 +++++++++++ ZeroLevel.Logger/ProxySample/LogProxy.cs | 38 ++++++++++++++++++ ZeroLevel.Logger/ZeroLevel.Logger.csproj | 12 ++++++ ZeroLevel.sln | 14 +++++++ ZeroLevel/Services/Bootstrap.cs | 2 +- .../Logging/Implementation/DelegateLogger.cs | 12 +++++- ZeroLevel/Services/Logging/Log.cs | 10 ++++- 13 files changed, 190 insertions(+), 14 deletions(-) create mode 100644 ZeroLevel.Logger/App.config create mode 100644 ZeroLevel.Logger/LogService.cs create mode 100644 ZeroLevel.Logger/Program.cs create mode 100644 ZeroLevel.Logger/Properties/PublishProfiles/FolderProfile.pubxml create mode 100644 ZeroLevel.Logger/ProxySample/LogMessage.cs create mode 100644 ZeroLevel.Logger/ProxySample/LogProxy.cs create mode 100644 ZeroLevel.Logger/ZeroLevel.Logger.csproj diff --git a/ConfigurationTests/ConfigurationTests.csproj b/ConfigurationTests/ConfigurationTests.csproj index 8c4b742..c638033 100644 --- a/ConfigurationTests/ConfigurationTests.csproj +++ b/ConfigurationTests/ConfigurationTests.csproj @@ -5,10 +5,6 @@ netcoreapp2.2 - - - - diff --git a/ConfigurationTests/Program.cs b/ConfigurationTests/Program.cs index 3c29227..8700b78 100644 --- a/ConfigurationTests/Program.cs +++ b/ConfigurationTests/Program.cs @@ -1,9 +1,4 @@ -using BaGet.Protocol; -using NuGet.Versioning; -using System; -using System.IO; -using System.Net; -using System.Net.Http; +using System; using ZeroLevel; namespace ConfigurationTests diff --git a/ZeroLevel.Logger/App.config b/ZeroLevel.Logger/App.config new file mode 100644 index 0000000..1c161df --- /dev/null +++ b/ZeroLevel.Logger/App.config @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/ZeroLevel.Logger/LogService.cs b/ZeroLevel.Logger/LogService.cs new file mode 100644 index 0000000..7eafc03 --- /dev/null +++ b/ZeroLevel.Logger/LogService.cs @@ -0,0 +1,40 @@ +using ZeroLevel.Logger.ProxySample; +using ZeroLevel.Network; +using ZeroLevel.Services.Applications; + +namespace ZeroLevel.Logger +{ + public class LogService + : BaseZeroService + { + public LogService() + : base() + { + var config = Configuration.Default; + if (config.FirstOrDefault("useConsoleLog")) + { + Log.AddConsoleLogger(Logging.LogLevel.FullDebug); + } + if (config.FirstOrDefault("useFileLog")) + { + Log.AddTextFileLogger(new Logging.TextFileLoggerOptions().SetFolderPath("logs")); + } + AutoregisterInboxes(UseHost(config.First("port"))); + } + protected override void StartAction() + { + + } + + protected override void StopAction() + { + + } + + [ExchangeHandler("log")] + public void LogMessageHandler(ISocketClient client, LogMessage message) + { + Log.Write(message.Level, message.Message); + } + } +} diff --git a/ZeroLevel.Logger/Program.cs b/ZeroLevel.Logger/Program.cs new file mode 100644 index 0000000..2270c14 --- /dev/null +++ b/ZeroLevel.Logger/Program.cs @@ -0,0 +1,15 @@ +namespace ZeroLevel.Logger +{ + class Program + { + static void Main(string[] args) + { + Bootstrap.Startup(args) + .EnableConsoleLog() + .Run() + .WaitWhileStatus(ZeroServiceStatus.Running) + .Stop(); + Bootstrap.Shutdown(); + } + } +} diff --git a/ZeroLevel.Logger/Properties/PublishProfiles/FolderProfile.pubxml b/ZeroLevel.Logger/Properties/PublishProfiles/FolderProfile.pubxml new file mode 100644 index 0000000..1561f76 --- /dev/null +++ b/ZeroLevel.Logger/Properties/PublishProfiles/FolderProfile.pubxml @@ -0,0 +1,18 @@ + + + + + FileSystem + Release + Any CPU + netcoreapp3.1 + bin\Release\netcoreapp3.1\publish\ + win-x86 + true + False + False + False + + \ No newline at end of file diff --git a/ZeroLevel.Logger/ProxySample/LogMessage.cs b/ZeroLevel.Logger/ProxySample/LogMessage.cs new file mode 100644 index 0000000..7825002 --- /dev/null +++ b/ZeroLevel.Logger/ProxySample/LogMessage.cs @@ -0,0 +1,24 @@ +using ZeroLevel.Logging; +using ZeroLevel.Services.Serialization; + +namespace ZeroLevel.Logger.ProxySample +{ + public class LogMessage + : IBinarySerializable + { + public LogLevel Level { get; set; } + public string Message { get; set; } + + public void Deserialize(IBinaryReader reader) + { + this.Level = (LogLevel)reader.ReadInt32(); + this.Message = reader.ReadString(); + } + + public void Serialize(IBinaryWriter writer) + { + writer.WriteInt32((int)this.Level); + writer.WriteString(this.Message); + } + } +} diff --git a/ZeroLevel.Logger/ProxySample/LogProxy.cs b/ZeroLevel.Logger/ProxySample/LogProxy.cs new file mode 100644 index 0000000..82504d3 --- /dev/null +++ b/ZeroLevel.Logger/ProxySample/LogProxy.cs @@ -0,0 +1,38 @@ +using System; +using System.Net; +using ZeroLevel.Logging; +using ZeroLevel.Network; + +namespace ZeroLevel.Logger.ProxySample +{ + public class LogProxy + : IDisposable + { + private readonly IExchange _exchange; + public LogProxy(IPEndPoint endpoint) + { + _exchange = Bootstrap.CreateExchange(); + _exchange.RoutesStorage.Set("log.service", endpoint); + } + + public void Dispose() + { + _exchange?.Dispose(); + } + + public bool SendLog(LogMessage message) + { + try + { + return _exchange.Send("log.service", "log", message); + } + catch (Exception ex) + { + Log.Error(ex, "[LogProxy] SendLog"); + return false; + } + } + + public bool SendLog(LogLevel level, string message) => SendLog(new LogMessage { Level = level, Message = message }); + } +} diff --git a/ZeroLevel.Logger/ZeroLevel.Logger.csproj b/ZeroLevel.Logger/ZeroLevel.Logger.csproj new file mode 100644 index 0000000..16f7ba0 --- /dev/null +++ b/ZeroLevel.Logger/ZeroLevel.Logger.csproj @@ -0,0 +1,12 @@ + + + + Exe + netcoreapp3.1 + + + + + + + diff --git a/ZeroLevel.sln b/ZeroLevel.sln index 7114111..b2a8f56 100644 --- a/ZeroLevel.sln +++ b/ZeroLevel.sln @@ -35,6 +35,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConfigurationTests", "Confi EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DependencyInjectionTests", "DependencyInjectionTests\DependencyInjectionTests.csproj", "{665B38E3-A5F2-4AD0-946B-209D80C1AA40}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZeroLevel.Logger", "ZeroLevel.Logger\ZeroLevel.Logger.csproj", "{D1C061DB-3565-43C3-B8F3-628DE4908750}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -213,6 +215,18 @@ Global {665B38E3-A5F2-4AD0-946B-209D80C1AA40}.Release|x64.Build.0 = Release|Any CPU {665B38E3-A5F2-4AD0-946B-209D80C1AA40}.Release|x86.ActiveCfg = Release|Any CPU {665B38E3-A5F2-4AD0-946B-209D80C1AA40}.Release|x86.Build.0 = Release|Any CPU + {D1C061DB-3565-43C3-B8F3-628DE4908750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D1C061DB-3565-43C3-B8F3-628DE4908750}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D1C061DB-3565-43C3-B8F3-628DE4908750}.Debug|x64.ActiveCfg = Debug|Any CPU + {D1C061DB-3565-43C3-B8F3-628DE4908750}.Debug|x64.Build.0 = Debug|Any CPU + {D1C061DB-3565-43C3-B8F3-628DE4908750}.Debug|x86.ActiveCfg = Debug|Any CPU + {D1C061DB-3565-43C3-B8F3-628DE4908750}.Debug|x86.Build.0 = Debug|Any CPU + {D1C061DB-3565-43C3-B8F3-628DE4908750}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D1C061DB-3565-43C3-B8F3-628DE4908750}.Release|Any CPU.Build.0 = Release|Any CPU + {D1C061DB-3565-43C3-B8F3-628DE4908750}.Release|x64.ActiveCfg = Release|Any CPU + {D1C061DB-3565-43C3-B8F3-628DE4908750}.Release|x64.Build.0 = Release|Any CPU + {D1C061DB-3565-43C3-B8F3-628DE4908750}.Release|x86.ActiveCfg = Release|Any CPU + {D1C061DB-3565-43C3-B8F3-628DE4908750}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/ZeroLevel/Services/Bootstrap.cs b/ZeroLevel/Services/Bootstrap.cs index a920d61..630da96 100644 --- a/ZeroLevel/Services/Bootstrap.cs +++ b/ZeroLevel/Services/Bootstrap.cs @@ -87,7 +87,7 @@ namespace ZeroLevel static Bootstrap() { // Tricks for minimize config changes for dependency resolve - AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; + //AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; } private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) diff --git a/ZeroLevel/Services/Logging/Implementation/DelegateLogger.cs b/ZeroLevel/Services/Logging/Implementation/DelegateLogger.cs index 50fc09a..f6dfc83 100644 --- a/ZeroLevel/Services/Logging/Implementation/DelegateLogger.cs +++ b/ZeroLevel/Services/Logging/Implementation/DelegateLogger.cs @@ -5,12 +5,18 @@ namespace ZeroLevel.Logging public sealed class DelegateLogger : ILogger { private readonly Action _handler; + private readonly Action _handlerFull; public DelegateLogger(Action handler) { _handler = handler ?? throw new ArgumentNullException(nameof(handler)); } + public DelegateLogger(Action handler) + { + _handlerFull = handler ?? throw new ArgumentNullException(nameof(handler)); + } + public void Dispose() { } @@ -21,11 +27,13 @@ namespace ZeroLevel.Logging { if (level == LogLevel.Raw) { - _handler(message); + _handler?.Invoke(message); + _handlerFull?.Invoke(level, message); } else { - _handler($"[{DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")} {LogLevelNameMapping.CompactName(level)}] {message}"); + _handler?.Invoke($"[{DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")} {LogLevelNameMapping.CompactName(level)}] {message}"); + _handlerFull?.Invoke(level, message); } } catch diff --git a/ZeroLevel/Services/Logging/Log.cs b/ZeroLevel/Services/Logging/Log.cs index 3c9ed9d..d14a351 100644 --- a/ZeroLevel/Services/Logging/Log.cs +++ b/ZeroLevel/Services/Logging/Log.cs @@ -21,7 +21,10 @@ namespace ZeroLevel #endregion Ctor #region Logging - + public static void Write(LogLevel level, string message) + { + _router.Write(level, message); + } public static void Raw(string line, params object[] args) { _router.Write(LogLevel.Raw, FormatMessage(line, args)); @@ -139,6 +142,11 @@ namespace ZeroLevel AddLogger(new DelegateLogger(handler), level); } + public static void AddDelegateLogger(Action handler, LogLevel level = LogLevel.Standart) + { + AddLogger(new DelegateLogger(handler), level); + } + #endregion Delegate logger #region Console