Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.46 KB | None | 0 0
  1. using System;
  2. using System.Collections.Concurrent;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Text;
  6. using System.Threading;
  7.  
  8. namespace SharedLibrary
  9. {
  10.     public class Logger
  11.     {
  12.         readonly string path;
  13.         private ConcurrentQueue<string> logQueue;
  14.         private Thread logThread;
  15.         public Logger()
  16.         {
  17.             logQueue = new ConcurrentQueue<string>();
  18.             logThread = new Thread(new ThreadStart(processQueue));
  19.             logThread.Start();
  20.  
  21.             string yearDir = DateTime.Now.ToString("yyyy");
  22.             string monthDir = DateTime.Now.ToString("MMMM");
  23.             string dayDir = DateTime.Now.ToString("dd");
  24.             string time = DateTime.Now.TimeOfDay.ToString().Replace(':',' ');
  25.  
  26.             path = String.Format("Logs/{0}/{1}/{2}/{3}.txt", yearDir, monthDir, dayDir, time);
  27.             if (!Directory.Exists("Logs"))
  28.                 Directory.CreateDirectory("Logs");
  29.             if (!Directory.Exists("Logs/"+yearDir))
  30.                 Directory.CreateDirectory("Logs/" + yearDir);
  31.             if (!Directory.Exists("Logs/" + yearDir +"/"+monthDir))
  32.                 Directory.CreateDirectory("Logs/" + yearDir + "/" + monthDir);
  33.             if (!Directory.Exists("Logs/" + yearDir +"/"+monthDir+"/"+dayDir))
  34.                 Directory.CreateDirectory("Logs/" + yearDir + "/" + monthDir + "/" + dayDir);
  35.             if (!File.Exists(path))
  36.                 File.Create(path).Dispose();
  37.  
  38.             WriteLine("Logger initialized.");
  39.         }
  40.         void processQueue()
  41.         {
  42.             while (true)
  43.             {
  44.                 lock (logQueue)
  45.                 {
  46.                     for (int i = 0; i < (logQueue.Count < 10 ? logQueue.Count : 10); i++)
  47.                     {
  48.                         string logItem;
  49.                         if (logQueue.TryDequeue(out logItem))
  50.                             using (StreamWriter wrtr = new StreamWriter(path))
  51.                             {
  52.                                 wrtr.WriteLine(logItem);
  53.                                 wrtr.Close();
  54.                             }
  55.                     }
  56.                 }
  57.                 Thread.Sleep(1000);
  58.             }
  59.         }
  60.         public void WriteLine(string value)
  61.         {
  62.             string toWrite = String.Format("[{0}] {1}", DateTime.Now.ToShortTimeString(), value);
  63.             logQueue.Enqueue(toWrite);
  64.             Console.WriteLine(toWrite);
  65.         }
  66.     }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement