你绝对可以做到这一点。
You need to import package Serilog.Sinks.File
Then you have to configure Serilog.
In program.cs do following thing.
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.File(
@"<<your log file path>>",
fileSizeLimitBytes: 10000000,
rollOnFileSizeLimit: true,
shared: true,
flushToDiskInterval: TimeSpan.FromSeconds(1))
.CreateLogger();
在 buildWebHost 函数中添加 UseSerilog()。
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog() // <-- Add this line
.Build();
更新1
我使用了EventId属性。这只是演示如何根据eventId使用不同的文件,但对于您的需求,您需要自己实现其他内容。
Program.cs
public class Program
{
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.WriteTo.Logger(cc => cc.Filter.ByIncludingOnly(WithProperty("EventId",1001)).WriteTo.File("Test1001.txt",flushToDiskInterval: TimeSpan.FromSeconds(1)))
.WriteTo.Logger(cc => cc.Filter.ByIncludingOnly(WithProperty("EventId", 2001)).WriteTo.File("Test2001.txt", flushToDiskInterval: TimeSpan.FromSeconds(1)))
.CreateLogger();
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args).UseSerilog()
.UseStartup<Startup>();
public static Func<LogEvent, bool> WithProperty(string propertyName, object scalarValue)
{
if (propertyName == null) throw new ArgumentNullException("propertyName");
ScalarValue scalar = new ScalarValue(scalarValue);
return e=>
{
LogEventPropertyValue propertyValue;
if (e.Properties.TryGetValue(propertyName, out propertyValue))
{
var stValue = propertyValue as StructureValue;
if (stValue != null)
{
var value = stValue.Properties.Where(cc => cc.Name == "Id").FirstOrDefault();
bool result = scalar.Equals(value.Value);
return result;
}
}
return false;
};
}
}
我的 HomeController.cs
public class HomeController : Controller
{
ILogger<HomeController> logger;
public HomeController(ILogger<HomeController> logger)
{
this.logger = logger;
}
public IActionResult Index()
{
logger.Log(LogLevel.Information,new EventId(1001), "This is test 1");
logger.Log(LogLevel.Information, new EventId(2001), "This is test 2");
return View();
}
}
注意:最重要的是您必须使用某种类型的过滤器。