mirror of
				https://gitee.com/ThingsGateway/ThingsGateway.git
				synced 2025-11-04 17:43:58 +08:00 
			
		
		
		
	添加报文日志入库选项
This commit is contained in:
		@@ -10,6 +10,8 @@
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
#endregion
 | 
			
		||||
 | 
			
		||||
using Furion;
 | 
			
		||||
 | 
			
		||||
using Microsoft.Extensions.Logging;
 | 
			
		||||
 | 
			
		||||
using Newtonsoft.Json.Linq;
 | 
			
		||||
@@ -157,7 +159,7 @@ public abstract class CollectBase : DriverBase
 | 
			
		||||
            {
 | 
			
		||||
                deviceVariableSourceRead.DeviceVariables.ForEach(it =>
 | 
			
		||||
                {
 | 
			
		||||
                    var operResult = it.SetValue(null,isOnline:false);
 | 
			
		||||
                    var operResult = it.SetValue(null, isOnline: false);
 | 
			
		||||
                    if (!operResult.IsSuccess)
 | 
			
		||||
                    {
 | 
			
		||||
                        _logger.LogWarning("变量值更新失败:" + operResult.Message);
 | 
			
		||||
@@ -220,6 +222,31 @@ public abstract class CollectBase : DriverBase
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal override void NewMessage(TouchSocket.Core.LogLevel arg1, object arg2, string arg3, Exception arg4)
 | 
			
		||||
    {
 | 
			
		||||
        if (IsSaveLog)
 | 
			
		||||
        {
 | 
			
		||||
            if (arg3.StartsWith(FoundationConst.LogMessageHeader))
 | 
			
		||||
            {
 | 
			
		||||
                var customLevel = App.GetConfig<Microsoft.Extensions.Logging.LogLevel?>("Logging:LogLevel:BackendLog") ?? Microsoft.Extensions.Logging.LogLevel.Trace;
 | 
			
		||||
                if ((byte)arg1 < (byte)customLevel)
 | 
			
		||||
                {
 | 
			
		||||
                    var logRuntime = new BackendLog
 | 
			
		||||
                    {
 | 
			
		||||
                        LogLevel = (Microsoft.Extensions.Logging.LogLevel)arg1,
 | 
			
		||||
                        LogMessage = arg3,
 | 
			
		||||
                        LogSource = "采集设备:" + CurDevice.Name,
 | 
			
		||||
                        LogTime = SysDateTimeExtensions.CurrentDateTime,
 | 
			
		||||
                        Exception = null,
 | 
			
		||||
                    };
 | 
			
		||||
                    _logQueues.Enqueue(logRuntime);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        base.NewMessage(arg1, arg2, arg3, arg4);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// 返回全部内容字节数组
 | 
			
		||||
    /// <br></br>
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,10 @@
 | 
			
		||||
 | 
			
		||||
using Microsoft.Extensions.Logging;
 | 
			
		||||
 | 
			
		||||
using System.Collections.Concurrent;
 | 
			
		||||
 | 
			
		||||
using ThingsGateway.Foundation;
 | 
			
		||||
using ThingsGateway.Foundation.Extension.ConcurrentQueue;
 | 
			
		||||
 | 
			
		||||
using TouchSocket.Core;
 | 
			
		||||
 | 
			
		||||
@@ -40,6 +43,7 @@ public abstract class DriverBase : DisposableObject
 | 
			
		||||
        LogMessage = new LoggerGroup() { LogLevel = TouchSocket.Core.LogLevel.Trace };
 | 
			
		||||
        LogMessage.AddLogger(new EasyLogger(Log_Out) { LogLevel = TouchSocket.Core.LogLevel.Trace });
 | 
			
		||||
        FoundataionConfig.ConfigureContainer(a => a.RegisterSingleton<ILog>(LogMessage));
 | 
			
		||||
        Task.Factory.StartNew(LogInsertAsync);
 | 
			
		||||
    }
 | 
			
		||||
    /// <inheritdoc/>
 | 
			
		||||
    protected override void Dispose(bool disposing)
 | 
			
		||||
@@ -67,6 +71,12 @@ public abstract class DriverBase : DisposableObject
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public bool IsLogOut { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// 是否存储报文
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public bool IsSaveLog { get; set; }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// 报文信息
 | 
			
		||||
    /// </summary>
 | 
			
		||||
@@ -82,11 +92,14 @@ public abstract class DriverBase : DisposableObject
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    /// <returns></returns>
 | 
			
		||||
    public abstract bool IsConnected();
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// 存储日志队列
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    protected ConcurrentQueue<BackendLog> _logQueues = new();
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// 设备报文
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    internal void NewMessage(TouchSocket.Core.LogLevel arg1, object arg2, string arg3, Exception arg4)
 | 
			
		||||
    internal virtual void NewMessage(TouchSocket.Core.LogLevel arg1, object arg2, string arg3, Exception arg4)
 | 
			
		||||
    {
 | 
			
		||||
        if (IsLogOut)
 | 
			
		||||
        {
 | 
			
		||||
@@ -102,6 +115,27 @@ public abstract class DriverBase : DisposableObject
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    private async Task LogInsertAsync()
 | 
			
		||||
    {
 | 
			
		||||
        var db = DbContext.Db.CopyNew();
 | 
			
		||||
        while (!DisposedValue)
 | 
			
		||||
        {
 | 
			
		||||
            if (_logQueues.Count > 0)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    var data = _logQueues.ToListWithDequeue();
 | 
			
		||||
                    await db.InsertableWithAttr(data).ExecuteCommandAsync();//入库
 | 
			
		||||
                }
 | 
			
		||||
                catch
 | 
			
		||||
                {
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            await Task.Delay(5000);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// 底层日志输出
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,8 @@ using Furion;
 | 
			
		||||
 | 
			
		||||
using Microsoft.Extensions.Logging;
 | 
			
		||||
 | 
			
		||||
using ThingsGateway.Foundation;
 | 
			
		||||
 | 
			
		||||
using TouchSocket.Core;
 | 
			
		||||
 | 
			
		||||
namespace ThingsGateway.Application;
 | 
			
		||||
@@ -153,6 +155,32 @@ public abstract class UpLoadBase : DriverBase
 | 
			
		||||
            _logger.Log_Out(arg1, arg2, arg3, arg4);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal override void NewMessage(TouchSocket.Core.LogLevel arg1, object arg2, string arg3, Exception arg4)
 | 
			
		||||
    {
 | 
			
		||||
        if (IsSaveLog)
 | 
			
		||||
        {
 | 
			
		||||
            if (arg3.StartsWith(FoundationConst.LogMessageHeader))
 | 
			
		||||
            {
 | 
			
		||||
                var customLevel = App.GetConfig<Microsoft.Extensions.Logging.LogLevel?>("Logging:LogLevel:BackendLog") ?? Microsoft.Extensions.Logging.LogLevel.Trace;
 | 
			
		||||
                if ((byte)arg1 < (byte)customLevel)
 | 
			
		||||
                {
 | 
			
		||||
                    var logRuntime = new BackendLog
 | 
			
		||||
                    {
 | 
			
		||||
                        LogLevel = (Microsoft.Extensions.Logging.LogLevel)arg1,
 | 
			
		||||
                        LogMessage = arg3,
 | 
			
		||||
                        LogSource = "上传设备:" + CurDevice.Name,
 | 
			
		||||
                        LogTime = SysDateTimeExtensions.CurrentDateTime,
 | 
			
		||||
                        Exception = null,
 | 
			
		||||
                    };
 | 
			
		||||
                    _logQueues.Enqueue(logRuntime);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        base.NewMessage(arg1, arg2, arg3, arg4);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1978,6 +1978,11 @@
 | 
			
		||||
            是否输出日志
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:ThingsGateway.Application.DriverBase.IsSaveLog">
 | 
			
		||||
            <summary>
 | 
			
		||||
            是否存储报文
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:ThingsGateway.Application.DriverBase.Messages">
 | 
			
		||||
            <summary>
 | 
			
		||||
            报文信息
 | 
			
		||||
@@ -1994,6 +1999,11 @@
 | 
			
		||||
            </summary>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="F:ThingsGateway.Application.DriverBase._logQueues">
 | 
			
		||||
            <summary>
 | 
			
		||||
            存储日志队列
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:ThingsGateway.Application.DriverBase.NewMessage(TouchSocket.Core.LogLevel,System.Object,System.String,System.Exception)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            设备报文
 | 
			
		||||
 
 | 
			
		||||
@@ -253,6 +253,23 @@
 | 
			
		||||
                                            </ChildContent>
 | 
			
		||||
                                        </MTooltip>
 | 
			
		||||
 | 
			
		||||
                                        <MTooltip Bottom Context="tip">
 | 
			
		||||
                                            <ActivatorContent>
 | 
			
		||||
                                                <MButton Disabled=@(!UserResoures.IsHasButtonWithRole("gatewaydevicepause")) Class="mx-2" @attributes="@tip.Attrs" Dark Fab Small
 | 
			
		||||
                                                         OnClick=@(()=>
 | 
			
		||||
                                                 {
 | 
			
		||||
                                                 if(collectDeviceInfoItem.Driver!=null)
 | 
			
		||||
                                                 collectDeviceInfoItem.Driver.IsSaveLog=! collectDeviceInfoItem.Driver.IsSaveLog;
 | 
			
		||||
                                                 }
 | 
			
		||||
                                                 )>
 | 
			
		||||
                                                    <MIcon>@((collectDeviceInfoItem.Driver?.IsSaveLog==true) ? "mdi-pause" : "mdi-play")</MIcon>
 | 
			
		||||
                                                    </MButton>
 | 
			
		||||
                                                </ActivatorContent>
 | 
			
		||||
                                                <ChildContent>
 | 
			
		||||
                                                    <span>@((collectDeviceInfoItem.Driver?.IsSaveLog != true) ? "存入数据库,注意若交互频繁,可能导致数据库太大" : "不存入数据库")</span>
 | 
			
		||||
                                            </ChildContent>
 | 
			
		||||
                                        </MTooltip>
 | 
			
		||||
 | 
			
		||||
                                        <MTooltip Bottom Context="tip">
 | 
			
		||||
                                            <ActivatorContent>
 | 
			
		||||
                                                <MButton Loading=isDownExport Disabled=@(!UserResoures.IsHasButtonWithRole("gatewaydevicepause")) Class="mx-2" @attributes="@tip.Attrs" Dark Fab Small
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user