1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- namespace StationProbe
- {
- internal class Logger
- {
- private static DateTime _date;
- private static StreamWriter? _logWriter;
- private static readonly object _logWriterLocker = new();
- public static bool ConsoleOutput { get; set; } = true;
- static Logger()
- {
- RebuildLogger();
- }
- private static void RebuildLogger()
- {
- var logDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs");
- if (!Directory.Exists(logDirectory))
- {
- Directory.CreateDirectory(logDirectory);
- }
- var today = DateTime.Today;
- var logTag = $"{today:yyyyMMdd}";
- var logFileName = $"log_{logTag}.log";
- var logFile = Path.Combine(logDirectory, logFileName);
- if (!File.Exists(logFile))
- {
- _logWriter?.Close();
- var logFileStream = new FileStream(logFile, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
- _logWriter = new StreamWriter(logFileStream);
- }
- else
- {
- _logWriter?.Close();
- var logFileStream = new FileStream(logFile, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
- logFileStream.Position = logFileStream.Length;
- _logWriter = new StreamWriter(logFileStream);
- }
- }
- public static void WriteLine(string log)
- {
- lock (_logWriterLocker)
- {
- if (DateTime.Today != _date)
- {
- RebuildLogger();
- _date = DateTime.Today;
- }
- try
- {
- var now = DateTime.Now;
- var message = $"[{now:HH:mm:ss},{now.Millisecond:d3}]-{log}";
- _logWriter?.WriteLine(message);
- _logWriter?.Flush();
- if (ConsoleOutput)
- {
- Console.WriteLine(message);
- }
- }
- catch (Exception)
- {
- // There is exception during writing log, so just ignore
- }
- }
- }
- }
- }
|