| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Diagnostics; |
| | | using System.IO; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | |
| | | namespace WIDESEAWCS_Core.LogHelper |
| | | { |
| | | public class LoggerHelper |
| | | { |
| | | // 读åéï¼ç¡®ä¿å¤çº¿ç¨ç¯å¢ä¸æ¥å¿åå
¥ç线ç¨å®å
¨ |
| | | static ReaderWriterLockSlim LogWriteLock = new ReaderWriterLockSlim(); |
| | | |
| | | // æ¥å¿æä»¶å¤¹è·¯å¾ |
| | | static string folderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Log"); |
| | | |
| | | // è®°å½æ¥å¿çéå |
| | | static Queue<string> logQueue = new Queue<string>(); |
| | | |
| | | static LoggerHelper() |
| | | { |
| | | try |
| | | { |
| | | if (!Directory.Exists(folderPath)) |
| | | { |
| | | Directory.CreateDirectory(folderPath); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Debug.WriteLine(ex.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | /// <param name="ex"></param> |
| | | /// <param name="filePath"></param> |
| | | public static void WriteError(Exception ex, string filePath = "") |
| | | { |
| | | StringBuilder builder = new StringBuilder(); |
| | | builder.Append("é误信æ¯ï¼"); |
| | | builder.Append(ex.Message); |
| | | builder.Append(Environment.NewLine); |
| | | builder.Append("é误æºï¼"); |
| | | builder.Append(ex.Source); |
| | | builder.Append(Environment.NewLine); |
| | | builder.Append("éè¯¯å æ ï¼"); |
| | | builder.Append(ex.StackTrace); |
| | | builder.Append(Environment.NewLine); |
| | | builder.Append("é误类åï¼"); |
| | | builder.Append(ex.GetType().ToString()); |
| | | builder.Append(Environment.NewLine); |
| | | builder.Append("éè¯¯æ¹æ³ï¼"); |
| | | builder.Append(ex.TargetSite?.ToString()); |
| | | builder.Append(Environment.NewLine); |
| | | builder.Append(Environment.NewLine); |
| | | |
| | | WriteLogToFile($"Error_", builder.ToString(), filePath); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å°æ¥å¿å
容åå
¥æå®æä»¶ |
| | | /// </summary> |
| | | /// <param name="fileName">æ¥å¿æä»¶å</param> |
| | | /// <param name="log">è¦è®°å½çæ¥å¿å
容</param> |
| | | /// <remarks> |
| | | /// è¯¥æ¹æ³ä¼ç¡®ä¿çº¿ç¨å®å
¨å°åå
¥æ¥å¿ï¼è¥ç®å½ä¸åå¨ä¼èªå¨åå»ºï¼ |
| | | /// æ¥å¿å
容ä¼èªå¨æ·»å æ¶é´æ³å¹¶è¿½å å°æä»¶æ«å°¾ |
| | | /// </remarks> |
| | | public static void WriteLogToFile(string fileName, string log, string filePath = "") |
| | | { |
| | | try |
| | | { |
| | | // è¿å
¥åé |
| | | LogWriteLock.EnterWriteLock(); |
| | | |
| | | string path = string.IsNullOrEmpty(filePath) ? folderPath : filePath; |
| | | |
| | | // 妿æä»¶å¤¹ä¸åå¨ï¼åå建æä»¶å¤¹ |
| | | if (!Directory.Exists(path)) |
| | | { |
| | | Directory.CreateDirectory(path); |
| | | } |
| | | // è·åæ¥å¿æä»¶è·¯å¾ |
| | | string logFilePath = Path.Combine(path, GetLastAccessFileName(fileName, path)); |
| | | // è·åå½åæ¶é´ |
| | | DateTime now = DateTime.Now; |
| | | // æé æ¥å¿å
容 |
| | | string logContent = $"ã{now}ã{Environment.NewLine}{log}"; |
| | | |
| | | // å°æ¥å¿å
容追å å°æ¥å¿æä»¶ä¸ |
| | | File.AppendAllText(logFilePath, logContent); |
| | | |
| | | WriteCompleted(); |
| | | } |
| | | catch { } |
| | | finally |
| | | { |
| | | // éåºåé |
| | | LogWriteLock.ExitWriteLock(); |
| | | } |
| | | } |
| | | static int size = 10 * 1024 * 1024; |
| | | |
| | | /// <summary> |
| | | /// è·åæåä¸ä¸ªå¯ç¨çæ¥å¿æä»¶å |
| | | /// </summary> |
| | | /// <param name="fileName">æ¥å¿æä»¶åºç¡åç§°</param> |
| | | /// <returns>妿å卿ªè¾¾å°å¤§å°éå¶çæ¥å¿æä»¶åè¿å该æä»¶åï¼å¦åè¿ååºäºå½åæ¶é´çæ°æ¥å¿æä»¶å</returns> |
| | | /// <remarks> |
| | | /// è¯¥æ¹æ³ä¼éåææå·²åå¨çæ¥å¿æä»¶ï¼è¿å第ä¸ä¸ªæä»¶å¤§å°æªè¶
è¿éå¶çæä»¶åã |
| | | /// å¦ææ²¡æç¬¦åæ¡ä»¶çæä»¶ï¼åçæä¸ä¸ªä»¥å½åæ¶é´å½åçæ°æ¥å¿æä»¶åã |
| | | /// </remarks> |
| | | private static string GetLastAccessFileName(string fileName, string path) |
| | | { |
| | | foreach (var m in GetExistLogFileNames(fileName, path)) |
| | | { |
| | | FileInfo fileInfo = new FileInfo(m); |
| | | if (fileInfo.Length < size) |
| | | { |
| | | return m; |
| | | } |
| | | } |
| | | |
| | | // è¿åä¸ä¸ªæ°çé»è®¤å½åæ¶é´çæ¥å¿åç§° |
| | | return $@"{fileName}_{DateTime.Now.ToString("yyyyMMddHHmmss")}.log"; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·åæå®æä»¶å模å¼çæææ¥å¿æä»¶ |
| | | /// </summary> |
| | | /// <param name="fileName">æ¥å¿æä»¶ååç¼</param> |
| | | /// <returns>å¹é
æä»¶å模å¼çæææ¥å¿æä»¶è·¯å¾æ°ç»</returns> |
| | | private static string[] GetExistLogFileNames(string fileName, string path) |
| | | { |
| | | string[] fileNames = Directory.GetFiles(path, fileName + "*.log"); |
| | | return fileNames; |
| | | } |
| | | |
| | | private static string[] GetExistLogFileNames() |
| | | { |
| | | if (!string.IsNullOrEmpty(folderPath)) |
| | | return Directory.GetFiles(folderPath, "Error_*.log"); |
| | | else |
| | | return new string[] { }; |
| | | } |
| | | |
| | | private static int controlFileQuantity = 100; |
| | | |
| | | protected static void WriteCompleted() |
| | | { |
| | | if (controlFileQuantity > 1) |
| | | { |
| | | try |
| | | { |
| | | string[] files = GetExistLogFileNames(); |
| | | if (files.Length > controlFileQuantity) |
| | | { |
| | | List<FileInfo> fileInfos = new List<FileInfo>(); |
| | | for (int i = 0; i < files.Length; i++) |
| | | { |
| | | fileInfos.Add(new FileInfo(files[i])); |
| | | } |
| | | |
| | | fileInfos.Sort(new Comparison<FileInfo>((m, n) => |
| | | { |
| | | return m.CreationTime.CompareTo(n.CreationTime); |
| | | })); |
| | | |
| | | for (int i = 0; i < fileInfos.Count - controlFileQuantity; i++) |
| | | { |
| | | File.Delete(fileInfos[i].FullName); |
| | | } |
| | | } |
| | | } |
| | | catch |
| | | { |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |