async Task <SessionHeaderItem> GetSessionAsync(ILoggingEnvironment environment) { // check... Monitor.Enter(_headersLock); SessionHeaderItem header = null; try { if (Headers.TryGetValue(environment.SessionId, out header) == false) { var conn = GetConnection(); header = await conn.Table <SessionHeaderItem>().Where(v => v.SessionGuid == environment.SessionId).FirstOrDefaultAsync(); if (header == null) { header = SessionHeaderItem.CreateForEnvironment(environment); await conn.InsertAsync(header); } // set... Headers[environment.SessionId] = header; } } finally { Monitor.Exit(_headersLock); } // return... return(header); }
private async Task <SessionHeaderItem> GetSessionAsync(ILoggingEnvironment environment) { // check... lock (_headersLock) { if (Headers.ContainsKey(environment.SessionId)) { return(Headers[environment.SessionId]); } } var conn = GetConnection(); var header = await conn.Table <SessionHeaderItem>().Where(v => v.SessionGuid == environment.SessionId).FirstOrDefaultAsync(); if (header == null) { header = SessionHeaderItem.CreateForEnvironment(environment); await conn.InsertAsync(header); } // set... lock (_headersLock) { if (!(Headers.ContainsKey(environment.SessionId))) { Headers[environment.SessionId] = header; } } // return... return(header); }
internal static LogEventInfoItem GetForInsert(LogWriteContext context, LogEventInfo info, SessionHeaderItem session) { var item = new LogEventInfoItem() { SessionId = session.SessionId, DateTimeUtc = info.TimeStamp.UtcDateTime, SequenceId = info.SequenceID, Level = info.Level, Logger = info.Logger, Message = info.Message }; // if... if (info.Exception != null) item.SetException(info.Exception); // return... return item; }
public async Task <ReadLogEntriesResult> ReadLogEntriesAsync(LogReadQuery query) { var builder = new StringBuilder(); var args = new List <object>(); builder.Append("select * from logeventinfoitem where level in ("); bool first = true; if (query.IsTraceEnabled) { AppendLevel(builder, args, LogLevel.Trace, ref first); } if (query.IsDebugEnabled) { AppendLevel(builder, args, LogLevel.Debug, ref first); } if (query.IsInfoEnabled) { AppendLevel(builder, args, LogLevel.Info, ref first); } if (query.IsWarnEnabled) { AppendLevel(builder, args, LogLevel.Warn, ref first); } if (query.IsErrorEnabled) { AppendLevel(builder, args, LogLevel.Error, ref first); } if (query.IsFatalEnabled) { AppendLevel(builder, args, LogLevel.Fatal, ref first); } builder.Append(")"); if (query.FromDateTimeUtc != DateTime.MinValue) { builder.Append(" and datetimeutc >= ?"); args.Add(query.FromDateTimeUtc); } builder.Append(" order by itemid desc"); if (query.Top > 0) { builder.Append(" limit "); builder.Append(query.Top); } // create... var conn = this.GetConnection(); var events = (await conn.QueryAsync <LogEventInfoItem>(builder.ToString(), args.ToArray())).ToList(); // get the unique sessions... var sessionIds = new List <int>(); foreach (var theEvent in events) { if (!(sessionIds.Contains(theEvent.SessionId))) { sessionIds.Add(theEvent.SessionId); } } // load... var headers = await SessionHeaderItem.GetByIdsAsync(conn, sessionIds); return(new ReadLogEntriesResult(events, headers)); }
internal static LogEventInfoItem GetForInsert(LogWriteContext context, LogEventInfo info, SessionHeaderItem session) { var item = new LogEventInfoItem() { SessionId = session.SessionId, DateTimeUtc = info.TimeStamp.UtcDateTime, SequenceId = info.SequenceID, Level = info.Level, Logger = info.Logger, Message = info.Message }; // if... if (info.Exception != null) { item.SetException(info.Exception); } // return... return(item); }