Skip to content

Commit 384bb64

Browse files
Add Akka.Hosting example (#230)
Co-authored-by: Aaron Stannard <[email protected]>
1 parent 8255627 commit 384bb64

File tree

6 files changed

+124
-0
lines changed

6 files changed

+124
-0
lines changed

Akka.Logger.Serilog.sln

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{489D8D37
1717
build.sh = build.sh
1818
EndProjectSection
1919
EndProject
20+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{28CDBE4C-053C-4CD4-B5D2-4DF529922916}"
21+
EndProject
22+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Akka.Hosting.LoggingDemo", "src\Examples\Akka.Hosting.LoggingDemo\Akka.Hosting.LoggingDemo.csproj", "{1E83DF8F-408B-48DB-8896-B81AD742E7BB}"
23+
EndProject
2024
Global
2125
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2226
Debug|Any CPU = Debug|Any CPU
@@ -35,11 +39,18 @@ Global
3539
{CAE7CA7C-0D0C-4FDA-BDE9-BE16A27343EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
3640
{CAE7CA7C-0D0C-4FDA-BDE9-BE16A27343EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
3741
{CAE7CA7C-0D0C-4FDA-BDE9-BE16A27343EF}.Release|Any CPU.Build.0 = Release|Any CPU
42+
{1E83DF8F-408B-48DB-8896-B81AD742E7BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
43+
{1E83DF8F-408B-48DB-8896-B81AD742E7BB}.Debug|Any CPU.Build.0 = Debug|Any CPU
44+
{1E83DF8F-408B-48DB-8896-B81AD742E7BB}.Release|Any CPU.ActiveCfg = Release|Any CPU
45+
{1E83DF8F-408B-48DB-8896-B81AD742E7BB}.Release|Any CPU.Build.0 = Release|Any CPU
3846
EndGlobalSection
3947
GlobalSection(SolutionProperties) = preSolution
4048
HideSolutionNode = FALSE
4149
EndGlobalSection
4250
GlobalSection(ExtensibilityGlobals) = postSolution
4351
SolutionGuid = {6F6A6366-6F90-4FC6-8E46-861B3CB6C12B}
4452
EndGlobalSection
53+
GlobalSection(NestedProjects) = preSolution
54+
{1E83DF8F-408B-48DB-8896-B81AD742E7BB} = {28CDBE4C-053C-4CD4-B5D2-4DF529922916}
55+
EndGlobalSection
4556
EndGlobal
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<Project Sdk="Microsoft.NET.Sdk.Web">
2+
<PropertyGroup>
3+
<TargetFramework>net6.0</TargetFramework>
4+
<Nullable>enable</Nullable>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<IsPackable>false</IsPackable>
7+
</PropertyGroup>
8+
9+
<ItemGroup>
10+
<PackageReference Include="Akka.Cluster.Hosting" Version="1.5.6" />
11+
<PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" />
12+
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
13+
</ItemGroup>
14+
15+
<ItemGroup>
16+
<ProjectReference Include="..\..\Akka.Logger.Serilog\Akka.Logger.Serilog.csproj" />
17+
</ItemGroup>
18+
</Project>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
namespace Akka.Hosting.LoggingDemo;
2+
3+
public struct Echo{}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
using Akka.Hosting;
2+
using Akka.Actor;
3+
using Akka.Actor.Dsl;
4+
using Akka.Cluster.Hosting;
5+
using Akka.Event;
6+
using Akka.Hosting.Logging;
7+
using Akka.Hosting.LoggingDemo;
8+
using Akka.Logger.Serilog;
9+
using Akka.Remote.Hosting;
10+
using Serilog;
11+
using Serilog.Core.Enrichers;
12+
using Serilog.Formatting.Json;
13+
using LogLevel = Akka.Event.LogLevel;
14+
15+
Serilog.Log.Logger = new LoggerConfiguration()
16+
.WriteTo.Console(outputTemplate:"[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}")
17+
.WriteTo.File(new JsonFormatter(), "output.json")
18+
.MinimumLevel.Debug()
19+
.CreateLogger();
20+
21+
var builder = WebApplication.CreateBuilder(args);
22+
23+
builder.Services.AddAkka("MyActorSystem", (configurationBuilder, serviceProvider) =>
24+
{
25+
configurationBuilder
26+
.ConfigureLoggers(setup =>
27+
{
28+
// This sets the minimum log level
29+
setup.LogLevel = LogLevel.InfoLevel;
30+
31+
// Clear all loggers
32+
setup.ClearLoggers();
33+
34+
// Add serilog logger
35+
setup.AddLogger<SerilogLogger>();
36+
setup.LogMessageFormatter = typeof(SerilogLogMessageFormatter);
37+
})
38+
.WithRemoting("localhost", 8110)
39+
.WithClustering(new ClusterOptions(){ Roles = new[]{ "myRole" },
40+
SeedNodes = new[]{ "akka.tcp://MyActorSystem@localhost:8110" }})
41+
.WithActors((system, registry) =>
42+
{
43+
var echo = system.ActorOf(act =>
44+
{
45+
var counter = 0;
46+
act.ReceiveAny((o, context) =>
47+
{
48+
counter++;
49+
context.GetLogger().Info("Actor received {ID}", o, new PropertyEnricher(
50+
"custom-property",
51+
new
52+
{
53+
name = "Custom",
54+
data = counter
55+
}));
56+
context.Sender.Tell($"{context.Self} rcv {o}");
57+
});
58+
}, "echo");
59+
registry.TryRegister<Echo>(echo); // register for DI
60+
});
61+
});
62+
63+
var app = builder.Build();
64+
65+
app.MapGet("/", async (context) =>
66+
{
67+
var echo = context.RequestServices.GetRequiredService<ActorRegistry>().Get<Echo>();
68+
var body = await echo.Ask<string>(context.TraceIdentifier, context.RequestAborted).ConfigureAwait(false);
69+
await context.Response.WriteAsync(body);
70+
});
71+
72+
app.Run();
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"Logging": {
3+
"LogLevel": {
4+
"Default": "Information",
5+
"Microsoft": "Warning",
6+
"Microsoft.Hosting.Lifetime": "Information"
7+
}
8+
}
9+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"Logging": {
3+
"LogLevel": {
4+
"Default": "Information",
5+
"Microsoft": "Warning",
6+
"Microsoft.Hosting.Lifetime": "Information",
7+
"Akka": "Debug"
8+
}
9+
},
10+
"AllowedHosts": "*"
11+
}

0 commit comments

Comments
 (0)