feat:增加NLog配置
This commit is contained in:
32
SocketHub/NLog.config
Normal file
32
SocketHub/NLog.config
Normal 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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user