From 632b5204dbeff34ab10f1cc2d755e64ae4c7f4f5 Mon Sep 17 00:00:00 2001 From: Gregorius Soedharmo Date: Fri, 12 May 2023 03:28:39 +0700 Subject: [PATCH] Add Akka.Hosting example --- Akka.Logger.Serilog.sln | 11 +++ .../Akka.Hosting.LoggingDemo.csproj | 18 +++++ src/Examples/Akka.Hosting.LoggingDemo/Echo.cs | 3 + .../Akka.Hosting.LoggingDemo/Program.cs | 72 +++++++++++++++++++ .../appsettings.Development.json | 9 +++ .../Akka.Hosting.LoggingDemo/appsettings.json | 11 +++ 6 files changed, 124 insertions(+) create mode 100644 src/Examples/Akka.Hosting.LoggingDemo/Akka.Hosting.LoggingDemo.csproj create mode 100644 src/Examples/Akka.Hosting.LoggingDemo/Echo.cs create mode 100644 src/Examples/Akka.Hosting.LoggingDemo/Program.cs create mode 100644 src/Examples/Akka.Hosting.LoggingDemo/appsettings.Development.json create mode 100644 src/Examples/Akka.Hosting.LoggingDemo/appsettings.json diff --git a/Akka.Logger.Serilog.sln b/Akka.Logger.Serilog.sln index acaf957..bf287c7 100644 --- a/Akka.Logger.Serilog.sln +++ b/Akka.Logger.Serilog.sln @@ -17,6 +17,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{489D8D37 build.sh = build.sh EndProjectSection EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{28CDBE4C-053C-4CD4-B5D2-4DF529922916}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Akka.Hosting.LoggingDemo", "src\Examples\Akka.Hosting.LoggingDemo\Akka.Hosting.LoggingDemo.csproj", "{1E83DF8F-408B-48DB-8896-B81AD742E7BB}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -35,6 +39,10 @@ Global {CAE7CA7C-0D0C-4FDA-BDE9-BE16A27343EF}.Debug|Any CPU.Build.0 = Debug|Any CPU {CAE7CA7C-0D0C-4FDA-BDE9-BE16A27343EF}.Release|Any CPU.ActiveCfg = Release|Any CPU {CAE7CA7C-0D0C-4FDA-BDE9-BE16A27343EF}.Release|Any CPU.Build.0 = Release|Any CPU + {1E83DF8F-408B-48DB-8896-B81AD742E7BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1E83DF8F-408B-48DB-8896-B81AD742E7BB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1E83DF8F-408B-48DB-8896-B81AD742E7BB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1E83DF8F-408B-48DB-8896-B81AD742E7BB}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -42,4 +50,7 @@ Global GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {6F6A6366-6F90-4FC6-8E46-861B3CB6C12B} EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {1E83DF8F-408B-48DB-8896-B81AD742E7BB} = {28CDBE4C-053C-4CD4-B5D2-4DF529922916} + EndGlobalSection EndGlobal diff --git a/src/Examples/Akka.Hosting.LoggingDemo/Akka.Hosting.LoggingDemo.csproj b/src/Examples/Akka.Hosting.LoggingDemo/Akka.Hosting.LoggingDemo.csproj new file mode 100644 index 0000000..f221c78 --- /dev/null +++ b/src/Examples/Akka.Hosting.LoggingDemo/Akka.Hosting.LoggingDemo.csproj @@ -0,0 +1,18 @@ + + + net6.0 + enable + enable + false + + + + + + + + + + + + diff --git a/src/Examples/Akka.Hosting.LoggingDemo/Echo.cs b/src/Examples/Akka.Hosting.LoggingDemo/Echo.cs new file mode 100644 index 0000000..9065b98 --- /dev/null +++ b/src/Examples/Akka.Hosting.LoggingDemo/Echo.cs @@ -0,0 +1,3 @@ +namespace Akka.Hosting.LoggingDemo; + +public struct Echo{} \ No newline at end of file diff --git a/src/Examples/Akka.Hosting.LoggingDemo/Program.cs b/src/Examples/Akka.Hosting.LoggingDemo/Program.cs new file mode 100644 index 0000000..375bfdb --- /dev/null +++ b/src/Examples/Akka.Hosting.LoggingDemo/Program.cs @@ -0,0 +1,72 @@ +using Akka.Hosting; +using Akka.Actor; +using Akka.Actor.Dsl; +using Akka.Cluster.Hosting; +using Akka.Event; +using Akka.Hosting.Logging; +using Akka.Hosting.LoggingDemo; +using Akka.Logger.Serilog; +using Akka.Remote.Hosting; +using Serilog; +using Serilog.Core.Enrichers; +using Serilog.Formatting.Json; +using LogLevel = Akka.Event.LogLevel; + +Serilog.Log.Logger = new LoggerConfiguration() + .WriteTo.Console(outputTemplate:"[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}") + .WriteTo.File(new JsonFormatter(), "output.json") + .MinimumLevel.Debug() + .CreateLogger(); + +var builder = WebApplication.CreateBuilder(args); + +builder.Services.AddAkka("MyActorSystem", (configurationBuilder, serviceProvider) => +{ + configurationBuilder + .ConfigureLoggers(setup => + { + // This sets the minimum log level + setup.LogLevel = LogLevel.InfoLevel; + + // Clear all loggers + setup.ClearLoggers(); + + // Add serilog logger + setup.AddLogger(); + setup.LogMessageFormatter = typeof(SerilogLogMessageFormatter); + }) + .WithRemoting("localhost", 8110) + .WithClustering(new ClusterOptions(){ Roles = new[]{ "myRole" }, + SeedNodes = new[]{ "akka.tcp://MyActorSystem@localhost:8110" }}) + .WithActors((system, registry) => + { + var echo = system.ActorOf(act => + { + var counter = 0; + act.ReceiveAny((o, context) => + { + counter++; + context.GetLogger().Info("Actor received {ID}", o, new PropertyEnricher( + "custom-property", + new + { + name = "Custom", + data = counter + })); + context.Sender.Tell($"{context.Self} rcv {o}"); + }); + }, "echo"); + registry.TryRegister(echo); // register for DI + }); +}); + +var app = builder.Build(); + +app.MapGet("/", async (context) => +{ + var echo = context.RequestServices.GetRequiredService().Get(); + var body = await echo.Ask(context.TraceIdentifier, context.RequestAborted).ConfigureAwait(false); + await context.Response.WriteAsync(body); +}); + +app.Run(); \ No newline at end of file diff --git a/src/Examples/Akka.Hosting.LoggingDemo/appsettings.Development.json b/src/Examples/Akka.Hosting.LoggingDemo/appsettings.Development.json new file mode 100644 index 0000000..8983e0f --- /dev/null +++ b/src/Examples/Akka.Hosting.LoggingDemo/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/src/Examples/Akka.Hosting.LoggingDemo/appsettings.json b/src/Examples/Akka.Hosting.LoggingDemo/appsettings.json new file mode 100644 index 0000000..d60ba0d --- /dev/null +++ b/src/Examples/Akka.Hosting.LoggingDemo/appsettings.json @@ -0,0 +1,11 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information", + "Akka": "Debug" + } + }, + "AllowedHosts": "*" +}