Exemplo n.º 1
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));
        }