/// /// В конструкторе главный параметр уровень важности /// При помощи него можно задать какие сообщения будут сохраняться /// в журнале, а какие - нет. /// Если явно не задается имя журнала, то оно будет совпадать с именем приложения, /// за исключением расширения, оно будет не _exe_, а _log_. public Loger( IMPORTANCELEVEL ImportanceLevel ///< минимальный уровень важности сохраняемых сообщений; , bool lDbg ///< отладка библиотеки журналирования, если установлен в `true`, то файл журнала закрывается после каждого вывода. Приводит к существенному замедлению работы журналирования; , string flNm) ///< имя файла журнала. : base(ImportanceLevel, lDbg, flNm) { }
public void setCnslLvl(string lvl) { IMPORTANCELEVEL ImportanceLevel = IMPORTANCELEVEL.Error; Enum.TryParse(lvl, out ImportanceLevel); cnslLvl = ImportanceLevel; }
void mkLog(IMPORTANCELEVEL ImportanceLevel, bool lDbg, string fn) // public LOGGER(IMPORTANCELEVEL ImportanceLevel, List<string> items, string fn) { if (fn == null) { // string MyName = Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) // +"/"+Path.GetFileNameWithoutExtension(System.Windows.Forms.Application.ExecutablePath) // +".log"; //System.IO.Path.GetDirectoryName( // System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase ); string MyName = Path.GetDirectoryName(new Uri(Assembly.GetEntryAssembly().CodeBase).LocalPath) + "/" + Path.GetFileNameWithoutExtension(new Uri(Assembly.GetEntryAssembly().CodeBase).LocalPath) + ".log"; fn = MyName.ToLower(); } this.dbg = lDbg; this.filename = fn; // this.Items = items; this.ImportanceLevel = ImportanceLevel; this.Working = true; // Создание и старт потока логера Log = new Thread(new System.Threading.ThreadStart(LogMessage)); Log.Priority = ThreadPriority.Lowest; this.sw = new StreamWriter(filename, true); Log.Start(); WriteLine(IMPORTANCELEVEL.Warning , "Logger was started in {0}, console/window {1}/{2} application" , Path.GetFileName(new Uri(Assembly.GetEntryAssembly().CodeBase).LocalPath) , PeReaderExtensions.IsConsoleApp() , PeReaderExtensions.IsGuiApp()); }
// List<string> Items; /// \brief Констурктор, создаст и запустит логер public LOGGER(string impLevel, bool lDbg, string fn) { IMPORTANCELEVEL ImportanceLevel = IMPORTANCELEVEL.Error; Enum.TryParse(impLevel, out ImportanceLevel); mkLog(ImportanceLevel, lDbg, fn); }
// Констурктор, создаст и запустит логер public LOGGER(IMPORTANCELEVEL ImportanceLevel) { this.ImportanceLevel = ImportanceLevel; this.Working = true; // Создание и старт потока логера Log = new Thread(new System.Threading.ThreadStart(LogMessage)); Log.Start(); WriteLine(IMPORTANCELEVEL.Info, "Logger started!"); }
public static void Main(string[] args) { IMPORTANCELEVEL x = IMPORTANCELEVEL.Error; for (int i = 0; i < args.Length; i++) { if (hlpF.check(ref i, args)) { usage(); } else if (dbgF.check(ref i, args)) { ; } else if (vF.check(ref i, args)) { ; } else if (logLvl.check(ref i, args)) { ; } else if (logNm.check(ref i, args)) { x = Loger.strtoLvl(logNm); } else if (sleep.check(ref i, args)) { ; } else if (max.check(ref i, args)) { ; } } DateTime st = DateTime.Now; using (Loger l = new Loger(logNm, dbgF)){ if (vF) { l.cnslLvl = IMPORTANCELEVEL.Stats; } primer a = new primer("first", l, ThreadPriority.Normal); primer b = new primer("second", l); // a.t.Priority = ThreadPriority.Lowest; a.t.Join(); l.WriteLine(IMPORTANCELEVEL.Stats, "thread '{0}' finished with {1}/{2} numbers/primers" , "first", a.numbers, a.primers); b.t.Join(); l.WriteLine(IMPORTANCELEVEL.Stats, "thread '{0}' finished with {1}/{2} numbers/primers" , "second", b.numbers, b.primers); DateTime fn = DateTime.Now; l.WriteLine(IMPORTANCELEVEL.Stats, "time of work is {0} secs" , (fn - st).TotalSeconds); } }
public void WriteLine(IMPORTANCELEVEL Importance, String Format, params object[] Segments) { if (working && Importance >= this.importanceLevel) { String Message = String.Format("[{0}]\t", Importance) + "\t" + string.Format(Format, Segments); lock (this) { stringQueue.Enqueue(Message); } } }
public static IMPORTANCELEVEL strtoLvl(string code) { IMPORTANCELEVEL x = IMPORTANCELEVEL.Error; try { x = (IMPORTANCELEVEL)Enum.Parse(typeof(IMPORTANCELEVEL), code); } catch { x = IMPORTANCELEVEL.Error; } return(x); }
/// \brief Метод-аналог `Console.WriteLine()` с пользовательскими параметрами /// /// Метод блокирует доступ к журналу оператором `lock (this) {}`, /// поэтому чтение из очереди сообщений (LogMessage()) и поставка в очередь /// выполняются по очереди public void WriteLine(IMPORTANCELEVEL Importance ///< важность данного сообщения , String Format ///< строка с форматом сообщения , params object[] Segments ///< параметры сообщения ) { // Проверка уровня важности сообщения if (Working && Importance >= this.ImportanceLevel) { // Форматирование даты // Форматирование сообщения String Message = mkNow() + String.Format("[{0}]\t", Importance) + "\t" + string.Format(Format, Segments); // Добавление сообщения в очередь lock (this) { StringQueue.Enqueue(new pair(Importance, Message)); } } }
// Метод-аналог Console.WriteLine() с пользовательскими аргументами: // IMPORTANCELEVEL Importance - важность данного сообщения // String Format - форматирование строки // params object[] Segments - сегменты (аргументы) строки // (аналогично записи - Console.WriteLine("Format", Segments);) public void WriteLine(IMPORTANCELEVEL Importance, String Format, params object[] Segments) { // Проверка уровня важности сообщения if (Working && Importance >= this.ImportanceLevel) { lock (this) { // Форматирование даты String Date = String.Format( "[" + //DateTime.Now.DayOfWeek + DateTime.Now.Day + "." + DateTime.Now.Month + "." + DateTime.Now.Year + " " + DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second + "] "); // Форматирование сообщения String Message = Date + String.Format("[{0}]\t", Importance) + "\t" + string.Format(Format, Segments); // Добавление сообщения в очередь StringQueue.Enqueue(Message); } } }
public static IMPORTANCELEVEL uitoLvl(uint code) { IMPORTANCELEVEL rc = IMPORTANCELEVEL.Spam; switch (code) { case 0: rc = IMPORTANCELEVEL.Ignore; break; case 1: rc = IMPORTANCELEVEL.Info; break; case 2: rc = IMPORTANCELEVEL.FatalError; break; case 3: rc = IMPORTANCELEVEL.Error; break; case 4: rc = IMPORTANCELEVEL.Stats; break; case 5: rc = IMPORTANCELEVEL.Warning; break; case 6: rc = IMPORTANCELEVEL.Debug; break; case 7: rc = IMPORTANCELEVEL.Spam; break; } return(rc); }
public pair(IMPORTANCELEVEL l, string m) { lvl = l; msg = m; }
public LOGGER(IMPORTANCELEVEL ImportanceLevel, bool lDbg, string fn) { mkLog(ImportanceLevel, lDbg, fn); }
static void Main(string[] args) { if (args.Length > 1) { if (args[0] == "-?") { Console.WriteLine("to test logger \nusage:\n app.exe [-?] [-d] \n"); Environment.Exit(1); } else if (args[0] == "-d") { dFlag = true; } } System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly(); System.Version ver = asm.GetName().Version; string MyName = asm.GetName().Name; MyName //= Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) += ".Logger.test.log"; Thread.Sleep(2000); Logger = new LOGGER(IMPORTANCELEVEL.Warning, dFlag, MyName); for (int i = 0; i < 10; i++) { Logger.WriteLine(IMPORTANCELEVEL.Info, "this is {0} iteration", i); Console.Write("\rthis is {0:00} iteration", i); Thread.Sleep(500); } Thread.Sleep(100); Logger.Stop(); Thread.Sleep(100); IMPORTANCELEVEL iL = IMPORTANCELEVEL.Spam; Console.Write("\nsecond logger in debug mode for {0} level\n\n", iL); // Logger = new LOGGER(iL, true); Logger = new LOGGER(iL); Logger.WriteLine(IMPORTANCELEVEL.Warning, " to use debug mode of logger"); Logger.cnslLvl = IMPORTANCELEVEL.Spam; Logger.cnslLvl = IMPORTANCELEVEL.Ignore; Logger.cnslLvl = IMPORTANCELEVEL.Error; Logger.cnslLvl = IMPORTANCELEVEL.Info; Logger.cnslLvl = IMPORTANCELEVEL.FatalError; Logger.cnslLvl = IMPORTANCELEVEL.Debug; Logger.cnslLvl = IMPORTANCELEVEL.Warning; Logger.cnslLvl = IMPORTANCELEVEL.Stats; for (uint i = 0; i < 9; i++) { Logger.WriteLine(LOGGER.uitoLvl(i), "this is {0} iteration {1}>={2} =={3} ", i, LOGGER.uitoLvl(i), Logger.cnslLvl, LOGGER.uitoLvl(i) >= Logger.cnslLvl); Thread.Sleep(500); } // Logger.cnslLvl = IMPORTANCELEVEL.Info; for (uint i = 0; i < 0; i++) { Logger.WriteLine(LOGGER.uitoLvl(i), "this is {0} iteration {1}", i, LOGGER.uitoLvl(i)); } Logger.WriteLine(IMPORTANCELEVEL.Spam, " no any message"); Logger.WriteLine(IMPORTANCELEVEL.Warning, " to finish of usage debug mode of logger"); Logger.Dispose(); Logger.WriteLine(IMPORTANCELEVEL.Warning, " to debug"); }
public LOGGER(IMPORTANCELEVEL ImportanceLevel) : this(ImportanceLevel, false, null) { }
public LOGGER(IMPORTANCELEVEL ImportanceLevel, string flNm) : this(ImportanceLevel, false, flNm) { }
public LOGGER(IMPORTANCELEVEL ImportanceLevel, bool lDbg) : this(ImportanceLevel, lDbg, null) { }