Как использовать отдельный файл журнала для каждой службы в ядре .NET
Я пытаюсь регистрировать ошибки и информацию для каждой службы, используя ядро .net. Как использовать отдельные файлы для ведения журнала.
В настоящее время я использую один файл для регистрации всех ошибок и информации.
Вот мои Program.cs и Startup.cs
// Program.cs
public static void Main(string[] args)
{
CreateWebHostBuilder(args)
.ConfigureLogging((hostingContext, logging) =>
{
// Requires `using Microsoft.Extensions.Logging;`
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
logging.AddDebug();
logging.AddEventSourceLogger();
})
.Build()
.Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
});
// Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddFile("Logs/SmsDomeLogs-{Date}.txt");
//.........
}
1 ответ
Идея в качестве обходного пути может заключаться в создании настраиваемого регистратора, который записывает данные в файл, и вы можете создать имя файла, которое будет содержать какую-то настраиваемую строку из ваших служб. Я тоже этим способом пользуюсь. Например:
private static string logFilePath;
private static readonly object _lock = new object();
public static void log(string serviceId, string className, string error, Exception exception) {
string toLog = $"{className}: {error}";
lock (_lock) {
if (string.IsNullOrEmpty(logFilePath)) {
string fileName = $"log-{DateTime.Now.Month}-{DateTime.Now.Day}-{serviceId}.log"; // you can also date if you want
logFilePath = Path.Combine(<path to save>, fileName);
if (!File.Exists(logFilePath)) {
// create the file
}
}
if (exception != null) { // you can log exceptions and debug messages too
toLog += Environment.NewLine + exception.ToString();
}
toLog = $"{<you can add here date if you want>} - {toLog}";
using (StreamWriter writer = File.AppendText(logFilePath)) {
writer.WriteLine(toLog);
}
}
}
И, конечно же, вы можете улучшить, как хотите, добавить уровни журнала и т. Д.