LogPurge.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Configuration;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Text.RegularExpressions;
  8. using System.Timers;
  9. namespace SinoChemFC2PosProxy
  10. {
  11. public class LogPurge
  12. {
  13. private System.Timers.Timer scannerTimer;
  14. private int purgeLogFilesWhenOldThanDays = -1;
  15. string[] searchFolders = new[]
  16. {
  17. //Proxy_Main_20150831.txt
  18. @"c:\Wayne\Log\SinoChemFC2PosProxy\",
  19. //SSF.FC.20150826.132125928.LOG.gz
  20. @"c:\Program Files\Fusion\Bin\SSF.Logs\SSF.FC.Logs\Backup\",
  21. //SSF.ROUTER.20150826.094252740.LOG.gz
  22. @"c:\Program Files\Fusion\Bin\SSF.Logs\SSF.Router.Logs\Backup\",
  23. };
  24. public void Start()
  25. {
  26. this.purgeLogFilesWhenOldThanDays = int.Parse(ConfigurationManager.AppSettings["purgeLogFilesWhenOldThanDays"]);
  27. // every 1 days, do a log purge.
  28. this.scannerTimer = new System.Timers.Timer(1000 * 60);// * 60 * 24);
  29. this.scannerTimer.Elapsed += scannerTimer_Elapsed;
  30. this.scannerTimer.Start();
  31. }
  32. void scannerTimer_Elapsed(object sender, ElapsedEventArgs e)
  33. {
  34. foreach (var dirPath in searchFolders)
  35. {
  36. var dirInfo = new DirectoryInfo(dirPath);
  37. if (!dirInfo.Exists) continue;
  38. foreach (var logFileInfo in dirInfo.GetFiles())
  39. {
  40. if (isFilePendingForPurge(logFileInfo))
  41. {
  42. logFileInfo.Delete();
  43. }
  44. }
  45. }
  46. }
  47. private bool isFilePendingForPurge(FileInfo fileInfo)
  48. {
  49. Regex r = new Regex(@"20\d\d\d\d\d\d\.");
  50. var dateInFileName = r.Match(fileInfo.Name);
  51. if (dateInFileName.Success)
  52. {
  53. var dateString = dateInFileName.Value.Substring(0, dateInFileName.Value.Length - 1);
  54. dateString = dateString.Substring(0, 4) + "-" + dateString.Substring(4, 2) + "-" +
  55. dateString.Substring(6, 2);
  56. DateTime convertedDateTime;
  57. try
  58. {
  59. convertedDateTime = DateTime.Parse(dateString);
  60. }
  61. catch (Exception exx)
  62. { return false; }
  63. var timeDiff = DateTime.Now - convertedDateTime;
  64. if (timeDiff.TotalDays >= this.purgeLogFilesWhenOldThanDays)
  65. {
  66. return true;
  67. }
  68. else
  69. {
  70. return false;
  71. }
  72. }
  73. return false;
  74. }
  75. }
  76. }