Imports System.IO
Imports System.Text
Imports System.Windows.Forms
Namespace DebugLog
'''
''' 应用程序日志
'''
Public NotInheritable Class ApplicationLog
''' 日志文件所在父文件夹路径
Private Shared _logPath As String = Application.StartupPath
''' 日志文件名前缀
Private Shared _logFilePrefix As String = Application.ProductName
''' 日志文件所在路径
Private Shared _logFilePath As String = $"{LogDirPath}{Path.DirectorySeparatorChar}{LogFilePrefix}_{Date.Now:yyyyMMdd}.Log"
'''
''' 保存日志的文件夹完整路径
'''
Public Shared Property LogDirPath As String
Get
If Equals(_logPath, String.Empty) Then
_logPath = Application.StartupPath
End If
Return _logPath
End Get
Set(value As String)
_logPath = value
_logFilePath = $"{LogDirPath}{Path.DirectorySeparatorChar}{LogFilePrefix}_{Date.Now:yyyyMMdd}.Log"
End Set
End Property
'''
''' 日志文件前缀
'''
Public Shared Property LogFilePrefix As String
Get
Return _logFilePrefix
End Get
Set(value As String)
_logFilePrefix = value
_logFilePath = $"{LogDirPath}{Path.DirectorySeparatorChar}{LogFilePrefix}_{Date.Now:yyyyMMdd}.Log"
End Set
End Property
Public Shared ReadOnly Property LogFilePath() As String
Get
Return _logFilePath
End Get
End Property
'''
''' 写入错误信息记录日志
'''
'''
Public Shared Sub WriteErrorLog(ex As Exception)
Dim msg As New StringBuilder
msg.Append($"{ex.StackTrace} {ex.Message}")
WriteLog(LogTypes.Error, msg.ToString())
End Sub
'''
''' 写入流程信息记录日志
'''
'''
Public Shared Sub WriteDebugLog1(msg As String)
WriteLog1(LogTypes.Debug.ToString, msg.ToString())
End Sub
Public Shared Sub WriteDebugLog(msg As String)
WriteLog(LogTypes.Debug, msg.ToString())
End Sub
'''
''' 写入流程信息记录日志
'''
'''
Public Shared Sub WriteInfoLog(msg As String)
WriteLog(LogTypes.Info, msg.ToString())
End Sub
'''
''' 写入警告信息记录日志
'''
'''
Public Shared Sub WriteWarningLog(msg As String)
WriteLog(LogTypes.Warn, msg.ToString())
End Sub
'''
''' 写入错误信息记录日志
'''
'''
Public Shared Sub WriteErrorLog(msg As String)
WriteLog(LogTypes.Error, msg.ToString())
End Sub
'''
''' 写入数据库信息记录日志
'''
'''
Public Shared Sub WriteFatalLog(msg As String)
WriteLog(LogTypes.Fatal, msg.ToString())
End Sub
Private Shared ReadOnly LogLock As New Object() '日志锁,防止多线程同时写日志导致冲突
'''
''' 将信息入到日志
'''
''' 日志类型
''' 日志内容
Public Shared Sub WriteLog(logType As String, msg As String)
'写入记录入日志文件
SyncLock LogLock
Try
Dim logString As New StringBuilder
logString.Append($"[{Date.Now:yyyy-MM-dd HH:mm:ss:fff}]") '日志产生时间
logString.Append($"[{logType,-6}]") '日志类型
logString.Append($"[{Process.GetCurrentProcess.Id,-6}]") '日志的进程号
logString.Append($"[{Threading.Thread.CurrentThread.ManagedThreadId,-4}]") '日志的线程号
logString.Append(msg) '日志的消息主题
Using sw As StreamWriter = File.AppendText($"{LogDirPath}{Path.DirectorySeparatorChar}{LogFilePrefix}_{Date.Now:yyyyMMdd}.Log")
sw.WriteLine(logString.ToString())
End Using
Catch ex As Exception
Console.WriteLine($"Uts WriteLog Error:{ex.Message}")
End Try
End SyncLock
End Sub
Public Shared Sub WriteLog1(logType As String, msg As String)
'写入记录入日志文件
SyncLock LogLock
Try
Dim logString As New StringBuilder
logString.Append($"[{Date.Now:yyyy-MM-dd HH:mm:ss:fff}]") '日志产生时间
logString.Append($"[{logType,-6}]") '日志类型
logString.Append($"[{Process.GetCurrentProcess.Id,-6}]") '日志的进程号
logString.Append($"[{Threading.Thread.CurrentThread.ManagedThreadId,-4}]") '日志的线程号
logString.Append(msg) '日志的消息主题
Using sw As StreamWriter = File.AppendText($"{LogDirPath}{Path.DirectorySeparatorChar}{logType}_{Date.Now:yyyyMMdd}.Log")
sw.WriteLine(logString.ToString())
End Using
Catch ex As Exception
Console.WriteLine($"Uts WriteLog Error:{ex.Message}")
End Try
End SyncLock
End Sub
'''
''' 写日志
'''
Public Shared Sub WriteLog(type As LogTypes, ByVal msg As String)
WriteLog(type.ToString(), msg)
End Sub
'''
''' 日志类型
'''
Public Enum LogTypes
''' 调试信息
Debug
''' 系统运行信息
Info
''' 警告信息
Warn
''' 错误信息应该包含对象名、发生错误点所在的方法名称、具体错误信息
[Error]
''' 致命信息
Fatal
End Enum
End Class
End Namespace