Implement SignalRLoggerClient

This commit is contained in:
Loretta 2025-09-02 11:48:05 +02:00
parent 77a6f26a5c
commit 9673b629c6
5 changed files with 100 additions and 3 deletions

View File

@ -0,0 +1,39 @@
using AyCode.Core.Consts;
using AyCode.Core.Loggers;
using AyCode.Entities.Server.LogItems;
using Castle.Core.Logging;
using Microsoft.AspNetCore.SignalR;
namespace AyCode.Services.Server.SignalRs;
public class AcLoggerSignalRHub<TLogger>(TLogger logger) : Hub where TLogger : IAcLoggerBase
{
private TLogger _logger = logger;
public void AddLogItem(AcLogItem? logItem)
{
try
{
if (logItem == null)
{
_logger.Error("AddLogItem; LogItem == null");
//_logger.Writer<ConsoleLogWriter>().Detail("");
return;
}
//logItem.LogHeaderId = ???
logItem.TimeStampUtc = DateTime.UtcNow;
_logger.Write(logItem);
//_logger.Writer<IAcConsoleLogWriter>()?.Write(logItem.AppType, logItem.LogLevel, logItem.Text, logItem.CallerName, logItem.CategoryName, logItem.ErrorType, logItem.Exception);
//_logger.Writer<DbLogItemWriter>().WriteLogItemAsync(logItem);
}
catch (Exception ex)
{
Console.WriteLine($@"ERROR!!! {nameof(AcLoggerSignalRHub<TLogger>)}->AddLogItem; ex: {ex.Message}{AcEnv.NL}{AcEnv.NL}{ex}");
}
}
}

View File

@ -7,6 +7,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="9.0.8" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="9.0.8" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="9.0.8" />
</ItemGroup>

View File

@ -0,0 +1,57 @@
using AyCode.Core.Enums;
using AyCode.Core.Helpers;
using AyCode.Core.Loggers;
using AyCode.Entities;
using AyCode.Entities.LogItems;
using Microsoft.AspNetCore.SignalR.Client;
namespace AyCode.Services.Loggers
{
public class AcSignaRClientLogItemWriter : AcLogItemWriterBase<AcLogItemClient>, IAcLogWriterClientBase
{
private readonly HubConnection _hubConnection;
public AcSignaRClientLogItemWriter(string fullHubName, AppType appType = AppType.Web, LogLevel logLevel = LogLevel.Detail, string? categoryName = null) : base(appType, logLevel, categoryName)
{
_hubConnection = new HubConnectionBuilder()
.WithUrl(fullHubName)
//.WithAutomaticReconnect()
//.AddMessagePackProtocol(options => options.SerializerOptions = MessagePackSerializerOptions.Standard.WithSecurity(MessagePackSecurity.UntrustedData))
.Build();
_hubConnection.StartAsync().Forget();
}
public async Task StartConnection()
{
if (_hubConnection.State == HubConnectionState.Disconnected)
await _hubConnection.StartAsync();
if (_hubConnection.State != HubConnectionState.Connected)
await TaskHelper.WaitToAsync(() => _hubConnection.State == HubConnectionState.Connected, 10000, 10, 25);
}
public async Task StopConnection()
{
await _hubConnection.StopAsync();
await _hubConnection.DisposeAsync();
}
public override void Write(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName, string? errorType, string? exMessage)
=> WriteLogItem(CreateLogItem(DateTime.UtcNow, appType, Environment.CurrentManagedThreadId, logLevel, logText, callerMemberName, categoryName, errorType, exMessage));
protected override async void WriteLogItemCallback(AcLogItemClient logItem)
{
//Ez fontos, mert a signalR nem küldi a DateTime.Kind-ot! A szeró oldalon kap egy utc DateTime-ot, ami a kliens lokális DateTime-ját tartalmazza! - J.
logItem.TimeStampUtc = logItem.TimeStampUtc.ToUniversalTime();
await StartConnection();
if (_hubConnection.State != HubConnectionState.Connected)
return;
//var refreshToken = Setting.UserBasicDetails?.RefreshToken ?? Guid.NewGuid().ToString("N");
_hubConnection.SendAsync("AddLogItem", /*refreshToken,*/ logItem).Forget();
}
}
}

View File

@ -4,11 +4,10 @@ using AyCode.Core.Extensions;
using AyCode.Core.Helpers;
using AyCode.Core.Loggers;
using AyCode.Interfaces.Entities;
using AyCode.Services.SignalRs;
using MessagePack.Resolvers;
using Microsoft.AspNetCore.SignalR.Client;
namespace AyCode.Services.Server.SignalRs
namespace AyCode.Services.SignalRs
{
public abstract class AcSignalRClientBase : IAcSignalRHubClient
{
@ -30,6 +29,7 @@ namespace AyCode.Services.Server.SignalRs
HubConnection = new HubConnectionBuilder()
.WithUrl(fullHubName)
//.WithAutomaticReconnect()
//.AddMessagePackProtocol(options => {
// options.SerializerOptions = MessagePackSerializerOptions.Standard
// .WithResolver(MessagePack.Resolvers.StandardResolver.Instance)

View File

@ -1,4 +1,4 @@
namespace AyCode.Services.Server.SignalRs;
namespace AyCode.Services.SignalRs;
public class SignalRRequestModel
{