/[projects]/dao/DaoMqPump2/DaoCommon/Logfile.cs
ViewVC logotype

Contents of /dao/DaoMqPump2/DaoCommon/Logfile.cs

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2177 - (show annotations) (download)
Mon May 19 19:51:47 2014 UTC (10 years ago) by torben
File size: 4189 byte(s)
Improved Logging
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 using System.Globalization;
5 using System.IO;
6
7 namespace DaoCommon
8 {
9 public enum LogfileType
10 {
11 LogTransactions,
12 LogEvents,
13 LogDiscarded
14 }
15
16
17
18 public class Logfile : IDisposable
19 {
20 // Flag: Has Dispose already been called?
21 bool disposed = false; //IDisposable
22
23 private LogfileType type;
24 private string name;
25 private String logDirectory;
26 private LinkedList<string> logEntries = new LinkedList<string>();
27
28 StreamWriter realLogFile = null;
29
30 public Logfile(LogfileType type, string logname, string logDirectory)
31 {
32 this.type = type;
33 this.logDirectory = logDirectory;
34 this.name = logname;
35 }
36
37 public static string getNowString()
38 {
39 DateTime now = DateTime.Now;
40
41 return now.ToString("s");
42 }
43
44
45 public string getLogFilename()
46 {
47 return getLogFilename(type, logDirectory, name);
48 }
49
50 public static string getLogFilename(LogfileType type, string logDirectory, string name)
51 {
52
53 DateTime now = DateTime.Now;
54 string filename = logDirectory + "\\";
55
56 //Find uge nr
57 DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;
58 Calendar myCal = CultureInfo.InvariantCulture.Calendar;//System.Globalization
59 int week = myCal.GetWeekOfYear(now, dfi.CalendarWeekRule, dfi.FirstDayOfWeek);
60
61 switch (type)
62 {
63 case LogfileType.LogEvents:
64 filename += "eventlog_";
65 break;
66
67 case LogfileType.LogTransactions:
68 filename += "transactionlog_";
69 break;
70
71 case LogfileType.LogDiscarded:
72 filename += "discardedlog_";
73 break;
74 }
75
76
77 filename += name + "_" + now.Year.ToString("D4") + "_W" + week.ToString("D2") + ".log";
78
79 return filename;
80 }
81
82 private void checkAndOpenfile()
83 {
84 if (realLogFile != null)
85 return;
86
87 string filename = getLogFilename();
88
89 realLogFile = new StreamWriter(filename, true);
90 }
91
92 public void writeLogEntry(string msg)
93 {
94 checkAndOpenfile();
95
96 realLogFile.WriteLine(getNowString() + " " + msg);
97 realLogFile.Flush();
98 }
99
100
101 public void addSingleLogEntry(string msg)
102 {
103 msg = Logfile.getNowString() + " " + msg;
104 lock (logEntries)
105 {
106 logEntries.AddFirst(msg);
107
108 if (logEntries.Count > 20)
109 {
110 logEntries.RemoveLast();
111 }
112 }
113
114 string filename = getLogFilename();
115 using (StreamWriter eventlog = new StreamWriter(filename, true))
116 {
117 eventlog.WriteLine(msg);
118 }
119
120 Console.WriteLine(msg);
121 }
122
123 public string[] getLog()
124 {
125 lock (logEntries)
126 {
127 List<string> tmpEntries = new List<string>();
128 foreach (string s in logEntries)
129 {
130 tmpEntries.Add(s);
131 }
132 return tmpEntries.ToArray();
133 }
134 }
135
136 public void Dispose()
137 {
138 if (disposed)
139 return;
140
141 try
142 {
143 if (realLogFile != null)
144 {
145 realLogFile.Close();
146 realLogFile.Dispose();
147 }
148 }
149 catch (Exception e)
150 {
151 Console.WriteLine("Error disposing logfile : ", e.Message);
152 }
153
154
155 // Free any unmanaged objects here.
156 //
157 disposed = true;
158 }
159
160
161
162 }
163 }

  ViewVC Help
Powered by ViewVC 1.1.20