This repository has been archived on 2025-11-27. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
AUTS_OLD/AUTS_UpdateService/ApplicationLog.vb
2024-03-11 16:34:21 +08:00

200 lines
6.9 KiB
VB.net
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Imports System.Management
Imports System.Threading
Imports UTS_Core.Database
Imports UTS_Core.UTSModule
Imports UTS_Core.UTSModule.DbConnect
Imports UTS_Core.UTSModule.DbTableModel.Manage
Public Class ApplicationLog
Private Shared _serviceRunning As Boolean
Private Shared _startThread As Thread
Private Shared ReadOnly LogLock As Object = New Object()
Private Shared ReadOnly LogQueue As New Queue(Of Dictionary(Of String, String))
''' <summary>
''' 厂商名
''' </summary>
Public Shared VendorName As String
Public Shared Sub WriteErrorLog(msg As String)
UTS_Core.DebugLog.ApplicationLog.WriteErrorLog(msg)
WriteLogToLogQueue($"{UTS_Core.DebugLog.ApplicationLog.LogTypes.Error}", msg)
End Sub
Public Shared Sub WriteWarningLog(msg As String)
UTS_Core.DebugLog.ApplicationLog.WriteWarningLog(msg)
WriteLogToLogQueue($"{UTS_Core.DebugLog.ApplicationLog.LogTypes.Warn}", msg)
End Sub
Public Shared Sub WriteTraceLog(msg As String)
UTS_Core.DebugLog.ApplicationLog.WriteInfoLog(msg)
WriteLogToLogQueue($"{UTS_Core.DebugLog.ApplicationLog.LogTypes.Info}", msg)
End Sub
Private Shared Sub WriteLogToLogQueue(logType As String, msg As String)
Try
Static mac As String = ""
Static ip As String = ""
If String.IsNullOrEmpty(mac) OrElse String.IsNullOrEmpty(ip) Then
Dim searcher As New ManagementObjectSearcher("select * from win32_NetworkAdapterConfiguration")
Dim moc2 As ManagementObjectCollection = searcher.Get()
For Each mo As ManagementObject In moc2
If CBool(mo("IPEnabled")) Then
mac = mo("MACAddress").ToString()
Dim a() As String = CType(mo("IpAddress"), String())
ip = a(0)
Exit For
End If
Next
End If
Static userName As String = Environment.UserName '获取用户名 eg:Admin
Static machineName As String = Environment.MachineName '获取电脑名称 PC
Static osVersion As String = Environment.OSVersion.VersionString 'os 版本
Static appName As String = $"{My.Application.Info.ProductName}" 'os 版本
Static appVersion As String = $"{My.Application.Info.Version}" 'os 版本
Dim dicFiled As New Dictionary(Of String, String)
dicFiled.Add($"{ServiceLogTable.ColNamesEnum.DateTime}", Date.Now.ToString("yyyy-MM-dd HH:mm:ss"))
dicFiled.Add($"{ServiceLogTable.ColNamesEnum.DevPrivateIP}", ip)
dicFiled.Add($"{ServiceLogTable.ColNamesEnum.DevMac}", mac)
dicFiled.Add($"{ServiceLogTable.ColNamesEnum.DevOS}", osVersion)
dicFiled.Add($"{ServiceLogTable.ColNamesEnum.DevName}", machineName)
dicFiled.Add($"{ServiceLogTable.ColNamesEnum.DevUserName}", userName)
dicFiled.Add($"{ServiceLogTable.ColNamesEnum.LogType}", logType)
dicFiled.Add($"{ServiceLogTable.ColNamesEnum.LogText}", msg.Replace("'", "_"))
dicFiled.Add($"{ServiceLogTable.ColNamesEnum.CompanyName}", VendorName)
dicFiled.Add($"{ServiceLogTable.ColNamesEnum.AppName}", appName)
dicFiled.Add($"{ServiceLogTable.ColNamesEnum.AppVersion}", appVersion)
SyncLock LogLock
LogQueue.Enqueue(dicFiled) '将日志信息放入缓冲队列
End SyncLock
Catch ex As Exception
UTS_Core.DebugLog.ApplicationLog.WriteErrorLog($"Write ApplicationLog To LogQueue Error:{ex.Message}")
End Try
End Sub
Private Shared Sub WriteLogT()
End Sub
Private Shared Sub WriteLogToDatabase()
Static firstJoin As Boolean = True
If String.IsNullOrWhiteSpace(UtsDb.LocalConnString) Then
UTS_Core.DebugLog.ApplicationLog.WriteErrorLog($"Invalid LocalConnString!")
Return
End If
Try
Using db As New DbExecutor(UtsDb.LocalDbType, UtsDb.LocalConnString)
db.Open()
If firstJoin Then
db.ExecuteNonQuery(ServiceLogTable.CreateTableString(DbExecutor.DbTypeEnum.Sqlite))
firstJoin = False
End If
db.BeginTransaction()
Dim dicFiled As Dictionary(Of String, String)
Dim cmdText As String
Dim cmdHelper As DbCmdHelper = DbCmdHelper.CreateCmdHelper(UtsDb.RemoteDbType)
For i As Integer = 0 To LogQueue.Count - 1
dicFiled = LogQueue.Dequeue()
cmdText = db.CmdHelper.Insert(ServiceLogTable.TableName, dicFiled)
db.ExecuteNonQuery(cmdText) '执行语句
cmdText = cmdHelper.DbInsert(UtsDb.RemotePublicDb, ServiceLogTable.TableName, dicFiled)
DbConnector.SaveCmdStringToCacheTable(db, cmdText) '执行命令入缓存库
Next
db.CommitTransaction()
db.Close()
End Using
Catch ex As Exception
UTS_Core.DebugLog.ApplicationLog.WriteErrorLog($"Write ApplicationLog To LocalDB Error:{ex.Message}")
End Try
End Sub
Private Shared Sub LogQueueMonitor()
Static writeInterval As Integer = 16 '写入间隔单位S
Static writeMinValue As Integer = 64 '写入数据库最小值包数
Static lastWriteTime As DateTime = Now '上一次写入间隔
While _serviceRunning
If (LogQueue.Count >= writeMinValue) OrElse ((Now - lastWriteTime).TotalSeconds >= writeInterval) Then
WriteLogToDatabase()
lastWriteTime = Now
End If
Thread.Sleep(100)
End While
End Sub
''' <summary>
''' 初始化应用日志信息
''' </summary>
Public Shared Sub InitApplicationLogInfo(logDirPath As String, logFilePrefix As String)
UTS_Core.DebugLog.ApplicationLog.LogDirPath = logDirPath
UTS_Core.DebugLog.ApplicationLog.LogFilePrefix = logFilePrefix
End Sub
''' <summary>
''' 开启更新服务监听
''' </summary>
Public Shared Sub StartSaveLogToDatabase()
_serviceRunning = True
If _startThread IsNot Nothing AndAlso _startThread.IsAlive Then
StopSaveLogToDatabase()
End If
_startThread = New Thread(AddressOf LogQueueMonitor)
_startThread.Start()
End Sub
Public Shared Sub StopSaveLogToDatabase()
_serviceRunning = False
Dim lastTime As DateTime = Now
While _startThread IsNot Nothing AndAlso _startThread.IsAlive
If (Now - lastTime).TotalMilliseconds > 1000 Then
_startThread.Abort()
End If
Thread.Sleep(10)
End While
If LogQueue.Count > 0 Then
WriteLogToDatabase()
End If
End Sub
End Class