public void Log(IDatabaseLog ev, bool traceErrors) { lock (this) { if (_logThread == null) { if (dbLogSwitch.TraceWarning && traceErrors) { Debug.WriteLine("Unable to log to database as system not running", DbTraceListener.catInfo); } throw new Exception("Unable to log to database as system not running"); } lock (_eventQueue) { _eventQueue.Add(new DatabaseLogItem(ev, traceErrors)); _eventQueueItem.Set(); } } }
public MorpherLog(IDatabaseLog database, IMorpherCache morpherCache) { _database = database; _morpherCache = morpherCache; }
public DatabaseLogItem(IDatabaseLog item, bool traceErrors) { _item = item; _traceErrors = traceErrors; }
private void ThreadFunction() { if (dbLogSwitch.TraceVerbose) { Debug.WriteLine("Database logging thread initialized", DbTraceListener.catInfo); } using (OleDbConnection conn = new OleDbConnection(_connectionString)) { _eventThreadReady.Set(); bool exiting = false; do { _eventQueueItem.WaitOne(); // Copy items / state to local queue DatabaseLogItem[] localQueue; lock (_eventQueue) { localQueue = new DatabaseLogItem[_eventQueue.Count]; _eventQueue.CopyTo(localQueue); _eventQueue.Clear(); exiting = _exiting; } bool traceErrors = true; try { if (conn.State != ConnectionState.Open) { conn.Open(); } foreach (DatabaseLogItem i in localQueue) { try { IDatabaseLog r = i._item; if (!i._traceErrors) { traceErrors = false; } // Dynamically create insert command if we've never processed // this type of object before OleDbCommand insCmd; _insertCmdHash.TryGetValue(r.GetType(), out insCmd); if (insCmd == null) { insCmd = r.CreateInsertCommand(); insCmd.Connection = conn; _insertCmdHash[r.GetType()] = insCmd; } r.FillInsertCmd(insCmd); insCmd.ExecuteNonQuery(); } catch (Exception ex) { if (dbLogSwitch.TraceError) { if (i._traceErrors) { Debug.WriteLine("Unable to log to database:" + ex.Message, DbTraceListener.catError); } } continue; } } if (dbLogSwitch.TraceVerbose && traceErrors) { Debug.WriteLine(String.Format("{0} status message(s) logged sucecssfully to database", localQueue.Length), DbTraceListener.catInfo); } conn.Close(); } catch (Exception ex) { if (dbLogSwitch.TraceError && traceErrors) { Debug.WriteLine("Unable to connect to database:" + ex.Message, DbTraceListener.catError); } } } while (!exiting); } }
public void Log(IDatabaseLog ev) { Log(ev, true); }
public void Log(IDatabaseLog ev, bool traceErrors) { lock (this) { if (_logThread == null) { if (dbLogSwitch.TraceWarning && traceErrors) Debug.WriteLine("Unable to log to database as system not running", DbTraceListener.catInfo); throw new Exception("Unable to log to database as system not running"); } lock (_eventQueue) { _eventQueue.Add(new DatabaseLogItem(ev, traceErrors)); _eventQueueItem.Set(); } } }