You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iot/projects/Platform/Controllers/LogController.cs

115 lines
3.9 KiB

using Infrastructure.Application;
using Infrastructure.Extensions;
using Infrastructure.Web;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Serilog.Events;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace Platform.Controllers
{
public class LogController : BaseController
{
public IActionResult Index(PagedListModel<Logs> model)
{
using var db = new LogDbContext();
var query = db.Set<Logs>().AsNoTracking()
.WhereIf(!string.IsNullOrEmpty(model.Query.Level), o => o.Level == model.Query.Level)
.WhereIf(!string.IsNullOrEmpty(model.Query.RenderedMessage), o => o.RenderedMessage.Contains(model.Query.RenderedMessage.Trim()))
.WhereIf(!string.IsNullOrEmpty(model.Query.Exception), o => o.Exception.Contains(model.Query.Exception.Trim()))
.WhereIf(!string.IsNullOrEmpty(model.Query.Properties), o => o.Properties.Contains(model.Query.Properties.Trim()));
model.TotalCount = query.Count();
var list = query
.OrderByDescending(o=>o.Timestamp)
.Skip((model.PageIndex - 1) * model.PageSize)
.Take(model.PageSize)
.ToList();
model.List.AddRange(list);
var levels = new List<string> {
nameof(LogEventLevel.Verbose),
nameof(LogEventLevel.Debug),
nameof(LogEventLevel.Information),
nameof(LogEventLevel.Warning),
nameof(LogEventLevel.Error),
nameof(LogEventLevel.Fatal)
};
ViewData.SelectList(o => model.Query.Level, () => new SelectList(levels, model.Query.Level));
return View(model);
}
[HttpPost]
public virtual IActionResult Delete(List<int> list)
{
if (list == null)
{
throw new ArgumentNullException(nameof(list));
}
try
{
using var db = new LogDbContext();
var query = db.Set<Logs>();
foreach (var id in list)
{
var entity = query.FirstOrDefault(o => o.Id == id);
query.Remove(entity);
}
db.SaveChanges();
return RedirectTo();
}
catch (Exception ex)
{
ex.PrintStack();
return RedirectTo(rawMesage:ex.Message);
}
}
}
public class Logs
{
[Display(Name = "主键")]
public int Id { get; set; }
[Display(Name ="时间")]
[DataType(DataType.DateTime)]
public DateTime? Timestamp { get; set; }
[Display(Name = "等级")]
[SelectList]
public string Level { get; set; }
[Display(Name = "异常")]
public string Exception { get; set; }
[Display(Name = "消息")]
public string RenderedMessage { get; set; }
[Display(Name = "属性")]
public string Properties { get; set; }
}
internal class LogDbContext : DbContext
{
public static readonly ILoggerFactory MyLoggerFactory = LoggerFactory.Create(builder =>
{
builder.AddDebug();
builder.AddConsole();
});
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=log.db");
optionsBuilder?.UseLoggerFactory(MyLoggerFactory);
optionsBuilder?.EnableSensitiveDataLogging();
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Logs>().HasKey(o => o.Id);
}
}
}