12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- using System.Diagnostics.CodeAnalysis;
- using System.Text;
- using InABox.Core;
- namespace InABox.Logging;
- public class LogFileLogger : LoggerBase
- {
- private static readonly object logfileLock = new();
- private string TmpFolder;
- private string _folder;
- public string Folder
- {
- get => _folder;
- [MemberNotNull(nameof(_folder), nameof(TmpFolder))]
- set
- {
- _folder = value;
- TmpFolder = Path.Combine(Folder, "Temp");
- if (Directory.Exists(TmpFolder))
- {
- Directory.CreateDirectory(TmpFolder);
- var files = Directory.GetFiles(TmpFolder);
- foreach (var file in files)
- File.Delete(file);
- }
- }
- }
- public LogFileLogger(string folder)
- {
- Folder = folder;
- }
- public override void Send(LogType logtype, string user, string message, Guid transaction)
- {
- if (logtype == LogType.Update)
- UpdateJournal(message);
- else
- base.Send(logtype, user, message, transaction);
- }
- protected override void DoSend(string message)
- {
- if (!string.IsNullOrEmpty(Folder))
- {
- UpdateLogFile(message);
- }
- }
- private void UpdateLogFile(string msg)
- {
- if (!Directory.Exists(Folder)) Directory.CreateDirectory(Folder);
- var filename = Path.Combine(Folder, string.Format("{0:yyyy-MM-dd}.log", DateTime.Today));
- try
- {
- lock (logfileLock)
- {
- using (var sw = new StreamWriter(filename, true, Encoding.UTF8, 65536))
- {
- sw.WriteLine(msg);
- sw.Close();
- }
- }
- }
- catch (Exception e)
- {
- Console.WriteLine("*** Failed to Update Log: " + e.Message);
- Console.WriteLine("*** Message: " + msg);
- }
- }
- private void UpdateJournal(string sql)
- {
- var filename = Path.Combine(Folder, string.Format("{0:yyyy-MM-dd}.sql", DateTime.Today));
- try
- {
- lock (logfileLock)
- {
- using (var sw = new StreamWriter(filename, true, Encoding.UTF8, 65536))
- {
- sw.WriteLine(sql);
- sw.Close();
- }
- }
- }
- catch (Exception e)
- {
- Console.WriteLine("*** Failed to Update SQL Journal: " + e.Message);
- Console.WriteLine("*** Message: " + sql);
- }
- }
- }
|