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.
115 lines
3.9 KiB
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);
|
|
}
|
|
}
|
|
} |