feat:增加NLog配置

This commit is contained in:
2026-04-20 20:01:00 +08:00
parent 68221dcae5
commit 964bbcb51d
3 changed files with 93 additions and 10 deletions

32
SocketHub/NLog.config Normal file
View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true">
<extensions>
<add assembly="NLog.Targets.Network" />
</extensions>
<targets async="true">
<target name="fluentbit" xsi:type="Network"
newLine="true" lineEnding="LF"
address="tcp://60.247.145.200:5170">
<layout xsi:type="JsonLayout">
<attribute name="topic" layout="message-hub"/>
<attribute name="timestamp" layout="${longdate:universalTime=true}"/>
<attribute name="level" layout="${level:uppercase=true}"/>
<attribute name="logger" layout="${logger}"/>
<attribute name="message" layout="${message}"/>
<attribute name="throwable" layout="${exception:format=ToString}"/>
</layout>
</target>
<target name="stdout"
xsi:type="Console"
layout="${longdate} ${level:uppercase=true}: ${logger} - ${message}${onexception:${newline}${exception:format=ToString}}" />
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="stdout"/>
</rules>
</nlog>

View File

@@ -1,26 +1,27 @@
using System.Buffers;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using NLog.Extensions.Hosting;
using SuperSocket.ProtoBase;
using SuperSocket.Server;
using SuperSocket.Server.Abstractions;
using SuperSocket.Server.Abstractions.Session;
using SuperSocket.Server.Host;
using SuperSocket.WebSocket;
using SuperSocket.WebSocket.Server;
using System.Buffers;
var host = Host.CreateDefaultBuilder(args)
.ConfigureServices((context, services) =>
{
services.AddSingleton<IPackageHandler<ProtocolFrame>, TcpPackageHandler>();
services.AddSingleton<WebSocketMessageHandler>();
})
.AsMultipleServerHostBuilder()
.AddServer<TcpService, ProtocolFrame, BinaryPipelineFilter>(builder =>
{
builder
.UsePackageHandler(async (session, package) =>
{
Console.WriteLine($"Magic={package.Magic:X4}, Type={package.Type}, Len={package.Length}");
await session.SendAsync(package.Payload);
})
.ConfigureServerOptions((ctx, config) =>
{
return config.GetSection("TcpServer");
@@ -31,14 +32,21 @@ var host = Host.CreateDefaultBuilder(args)
builder
.UseWebSocketMessageHandler(async (session, package) =>
{
Console.WriteLine($"[WebSocket] ${package.Message}");
await session.SendAsync("ok");
using var scope = session.Server.ServiceProvider.CreateScope();
var handler = scope.ServiceProvider.GetRequiredService<WebSocketMessageHandler>();
await handler.HandleAsync(session, package);
})
.ConfigureServerOptions((ctx, config) =>
{
return config.GetSection("WebSocketServer");
});
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
})
.UseNLog()
.Build();
await host.RunAsync();
@@ -52,8 +60,40 @@ public class TcpService : SuperSocketService<ProtocolFrame>
}
}
public class TcpPackageHandler : IPackageHandler<ProtocolFrame>
{
private readonly ILogger<TcpPackageHandler> _logger;
public TcpPackageHandler(ILogger<TcpPackageHandler> logger)
{
_logger = logger;
}
public async ValueTask Handle(IAppSession session, ProtocolFrame package, CancellationToken cancellationToken)
{
_logger.LogInformation($"Magic={package.Magic:X4}, Type={package.Type}, Len={package.Length}");
await session.SendAsync(package.Payload, cancellationToken);
}
}
public class WebSocketMessageHandler
{
private readonly ILogger<WebSocketMessageHandler> _logger;
public WebSocketMessageHandler(ILogger<WebSocketMessageHandler> logger)
{
_logger = logger;
}
public async ValueTask HandleAsync(WebSocketSession session, WebSocketPackage package)
{
_logger.LogInformation($"[WebSocket] {package.Message}");
await session.SendAsync("ok");
}
}
/// <summary>
/// 协议数据结构
/// 协议数据结构 示例65 6D 00 05 00 01 68 65 6C 6C 6F
/// </summary>
/// <param name="Magic">帧头标识</param>
/// <param name="Length">数据长度</param>

View File

@@ -8,15 +8,26 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NLog.Extensions.Hosting" Version="6.1.2" />
<PackageReference Include="NLog.Targets.Network" Version="6.0.4" />
<PackageReference Include="SuperSocket" Version="2.0.2" />
<PackageReference Include="SuperSocket.WebSocket" Version="2.1.0" />
<PackageReference Include="SuperSocket.WebSocket.Server" Version="2.1.0" />
</ItemGroup>
<ItemGroup>
<Compile Update="Program.cs">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Compile>
</ItemGroup>
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="NLog.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>