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