Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 5
0
        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);
        }