using System; using System.Collections.Generic; using System.Text; using System.Globalization; using System.IO; namespace DaoCommon { public enum LogfileType { LogTransactions, LogEvents, LogDiscarded } public class Logfile : IDisposable { // Flag: Has Dispose already been called? bool disposed = false; //IDisposable private LogfileType type; private string name; private String logDirectory; private LinkedList logEntries = new LinkedList(); StreamWriter realLogFile = null; public Logfile(LogfileType type, string logname, string logDirectory) { this.type = type; this.logDirectory = logDirectory; this.name = logname; } public static string getNowString() { DateTime now = DateTime.Now; return now.ToString("s"); } public string getLogFilename() { return getLogFilename(type, logDirectory, name); } public static string getLogFilename(LogfileType type, string logDirectory, string name) { DateTime now = DateTime.Now; string filename = logDirectory + "\\"; //Find uge nr DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo; Calendar myCal = CultureInfo.InvariantCulture.Calendar;//System.Globalization int week = myCal.GetWeekOfYear(now, dfi.CalendarWeekRule, dfi.FirstDayOfWeek); switch (type) { case LogfileType.LogEvents: filename += "eventlog_"; break; case LogfileType.LogTransactions: filename += "transactionlog_"; break; case LogfileType.LogDiscarded: filename += "discardedlog_"; break; } filename += name + "_" + now.Year.ToString("D4") + "_W" + week.ToString("D2") + ".log"; return filename; } private void checkAndOpenfile() { if (realLogFile != null) return; string filename = getLogFilename(); realLogFile = new StreamWriter(filename, true); } public void writeLogEntry(string msg) { checkAndOpenfile(); realLogFile.WriteLine(getNowString() + " " + msg); realLogFile.Flush(); } public void addSingleLogEntry(string msg) { msg = Logfile.getNowString() + " " + msg; lock (logEntries) { logEntries.AddFirst(msg); if (logEntries.Count > 20) { logEntries.RemoveLast(); } } string filename = getLogFilename(); using (StreamWriter eventlog = new StreamWriter(filename, true)) { eventlog.WriteLine(msg); } Console.WriteLine(msg); } public string[] getLog() { lock (logEntries) { List tmpEntries = new List(); foreach (string s in logEntries) { tmpEntries.Add(s); } return tmpEntries.ToArray(); } } public void Dispose() { if (disposed) return; try { if (realLogFile != null) { realLogFile.Close(); realLogFile.Dispose(); } } catch (Exception e) { Console.WriteLine("Error disposing logfile : ", e.Message); } // Free any unmanaged objects here. // disposed = true; } } }