Files
Desktop_CorelDrawTool/RuningLog.vb

266 lines
7.8 KiB
VB.net
Raw Normal View History

2025-12-11 10:52:49 +08:00
Imports System.Threading
Public Class RuningLog
Enum LogType
e_none
e_info
e_Error
e_warning
End Enum
Enum LogMode
''' <summary>
''' 文本
''' </summary>
e_file
''' <summary>
''' 控制台
''' </summary>
e_console
''' <summary>
''' 文本框
''' </summary>
e_RichTextBox
''' <summary>
''' 文件和控制台
''' </summary>
e_fileandconsole
''' <summary>
''' 文件和文本框
''' </summary>
e_fileandRichTextBox
''' <summary>
''' 控制台和文本框
''' </summary>
e_consoleandRichTextBox
''' <summary>
''' 文件、控制台和文本框
''' </summary>
e_both
End Enum
''' <summary>
''' 日志显示等级
''' </summary>
Public LogLevel As Integer = 0
''' <summary>
''' 日志队列
''' </summary>
Public logQueue As New Queue(Of LogNode)
'日志输出文本框
Public RichTextBox As RichTextBox
'日志输出文件夹路径
Public LogFilePath As String
'日志输出线程
Public LogThread As Thread
Sub New(ric As RichTextBox, logFile As String)
LogFilePath = logFile
RichTextBox = ric
logQueue = New Queue(Of LogNode)
LogThread = New Thread(AddressOf LogThreadFunc)
LogThread.Start()
End Sub
Public Sub LogThreadFunc()
Dim str As LogNode
While True
If logQueue.Count > 0 Then
str = logQueue.Dequeue
'判断输出模式
Select Case str.LogMode
Case LogMode.e_file
WriteLog(str)
Case LogMode.e_console
'Console.WriteLine(str.LogText)
Case LogMode.e_RichTextBox
WriteRichTextBox(str)
Case LogMode.e_fileandconsole
WriteLog(str)
'Console.WriteLine(str.LogText)
Case LogMode.e_fileandRichTextBox
WriteLog(str)
WriteRichTextBox(str)
Case LogMode.e_consoleandRichTextBox
'Console.WriteLine(str.LogText)
WriteRichTextBox(str)
Case LogMode.e_both
WriteLog(str)
'Console.WriteLine(str.LogText)
WriteRichTextBox(str)
End Select
End If
Thread.Sleep(10)
End While
End Sub
'添加日志节点
Public Sub AddLogNode(node As LogNode
logQueue.Enqueue(node)
End Sub
'关闭线程
Public Sub CloseThread()
'判断线程初始化 和是否在运行
If Not IsNothing(LogThread) And LogThread.IsAlive Then
LogThread.Abort()
End If
End Sub
'写入文本框
Delegate Sub dWriteRichTextBox(node As LogNode)
Public Sub WriteRichTextBox(node As LogNode)
If IsNothing(RichTextBox) Then Return
If RichTextBox.InvokeRequired Then
RichTextBox.Invoke(New dWriteRichTextBox(AddressOf WriteRichTextBox), node)
Else
If LogLevel <= node.LogType Then
'设置文本 字体和文本颜色即字号大小并在输入框末尾追加文本并设置
Dim SelectionStart As Integer = RichTextBox.Text.Length
'写入日志
Dim logtxt As String = node.LogText & vbCrLf
'判断是否要加消息类型
If node.ShowType Then
logtxt = RuningLog.AddLogType(logtxt, node.LogType)
End If
'判断是否要加时间戳
If node.ShowTime Then
logtxt = RuningLog.AddTimeStamps(logtxt)
End If
RichTextBox.AppendText(logtxt)
'并设置颜色、字号、字体、
RichTextBox.Select(SelectionStart, logtxt.Length)
RichTextBox.SelectionColor = node.LogColor
RichTextBox.SelectionFont = node.LogFont
'设置字体大小
RichTextBox.SelectionLength = 0
'RichTextBox.SelectionFont = node.LogFont
'RichTextBox.SelectionColor = node.LogColor
'
'RichTextBox.SelectionLength = 0
'RichTextBox.SelectedText = node.LogText
End If
End If
End Sub
'写入日志
Public Sub WriteLog(node As LogNode)
'判断文件夹是否存在,不存在则创建 创建失败则退出
If Not System.IO.Directory.Exists(LogFilePath) Then
System.IO.Directory.CreateDirectory(LogFilePath)
End If
'以日期为文件名
Dim fileName As String = Now.ToString("yyyy-MM-dd") & ".log"
'判断文件是否存在,不存在则创建,创建失败则退出
If Not System.IO.File.Exists(LogFilePath & "\" & fileName) Then
Try
System.IO.File.Create(LogFilePath & "\" & fileName).Dispose()
Catch ex As Exception
Return
End Try
End If
'写入日志
Dim logtxt As String = node.LogText
'判断是否要加消息类型
If node.ShowType Then
logtxt = RuningLog.AddLogType(logtxt, node.LogType)
End If
'判断是否要加时间戳
If node.ShowTime Then
logtxt = RuningLog.AddTimeStamps(logtxt)
End If
System.IO.File.AppendAllText(LogFilePath & "\" & fileName, logtxt & vbCrLf)
End Sub
'字符串附加时间戳
Public Shared Function AddTimeStamps(str As String) As String
Return Now.ToString("yyyy-MM-dd HH:mm:ss:fff") & " " & str
End Function
'字符串加消息类型
Public Shared Function AddLogType(str As String, logType As LogType) As String
Select Case logType
Case LogType.e_info
Return "[Info] " & str
Case LogType.e_Error
Return "[Error] " & str
Case LogType.e_warning
Return "[Warning] " & str
Case Else
Return str
End Select
End Function
End Class
'日志文件节点类
Public Class LogNode
Public LogType As RuningLog.LogType
Public LogText As String
'Public InputText As String
Public LogTime As DateTime
Public LogMode As RuningLog.LogMode
'文本颜色
Public LogColor As System.Drawing.Color
'文本字体 '文本字号
Public LogFont As Font
'是否显示时间
Public ShowTime As Boolean = True
'是否显示类型
Public ShowType As Boolean = True
Sub New(logtxt As String, nLogType As Integer, nLogMode As Integer)
LogText = logtxt
LogType = nLogType
LogMode = nLogMode
'InputText = LogText
'默认字体为宋体 字号为 18 颜色为黑色
LogFont = New Font("宋体", 9)
LogColor = System.Drawing.Color.Black
'显示时间和类型
ShowTime = True
ShowType = True
End Sub
'设置文本颜色
Public Sub SetLogColor(color As System.Drawing.Color)
LogColor = color
End Sub
'设置文本字体
Public Sub SetLogFont(font As Font)
LogFont = font
End Sub
'设置是否显示时间
Public Sub SetShowTime(showTime As Boolean)
showTime = showTime
' InputText = RuningLog.AddTimeStamps(LogText)
End Sub
'设置是否显示类型
Public Sub SetShowType(showType As Boolean)
showType = showType
'InputText = RuningLog.AddLogType(LogText, LogType)
End Sub
End Class