Imports System.Data.SqlClient Imports System.IO Imports System.Text Namespace AdminLog ''' ''' 应用程序日志 ''' Public NotInheritable Class ApplicationLog ''' ''' 日志类型 ''' Public Enum LogType ''' 堆栈跟踪信息 Trace ''' 警告信息 Warning ''' 错误信息应该包含对象名、发生错误点所在的方法名称、具体错误信息 [Error] ''' 与数据库相关的信息 Database End Enum ''' ''' 日志文件所在父文件夹路径 ''' Private Shared _logPath As String = My.Application.Info.DirectoryPath ''' ''' 日志文件名前缀 ''' Private Shared _logFilePrefix As String = "Log" ''' ''' 日志文件所在路径 ''' 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 = My.Application.Info.DirectoryPath End If Return _logPath End Get Set(ByVal 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($"ErrorMessage:{ex.Message}{vbNewLine}") msg.Append($"ErrorTime:{Now}{vbNewLine}") msg.Append($"ErrorSource:{ex.Source}{vbNewLine}") msg.Append($"ErrorType:{ex.GetType}{vbNewLine}") msg.Append($"ErrorTargetSite:{ex.TargetSite}{vbNewLine}") msg.Append($"ErrorStackTrace:{ex.StackTrace}{vbNewLine}") WriteLog(LogType.Error, msg.ToString()) End Sub ''' ''' 写入错误信息记录日志 ''' ''' Public Shared Sub WriteErrorLog(msg As String) WriteLog(LogType.Error, msg.ToString()) End Sub ''' ''' 写入流程信息记录日志 ''' ''' Public Shared Sub WriteTraceLog(msg As String) WriteLog(LogType.Trace, msg.ToString()) End Sub ''' ''' 写入警告信息记录日志 ''' ''' Public Shared Sub WriteWarningLog(msg As String) WriteLog(LogType.Warning, msg.ToString()) End Sub ''' ''' 写入数据库信息记录日志 ''' ''' Public Shared Sub WriteDatabaseLog(msg As String) WriteLog(LogType.Database, 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.ToString("yyyy-MM-dd HH:mm:ss:fff ")}]") logString.Append($"[{logType.PadRight(8)}]") 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 WriteLog(type As LogType, ByVal msg As String) WriteLog(type.ToString(), msg) End Sub End Class End Namespace