Я пытаюсь реализовать простой вход в приложение. Я использую Serilog, но из-за неконтролируемых обстоятельств я не могу использовать Seq в качестве приемника. Пока что мне сказали просто записывать логи в локальный файл.
Я могу успешно регистрировать основную информацию, но у меня возникают проблемы с получением информации о пользователе в журналах. Serilog.Enrichers.Environments
пакет получает информацию просто отлично, но методы обогащают только журналы, которые не видны в текстовом журнале. Когда я использую Seq в качестве приемника (который я не могу использовать для своей окончательной реализации), я вижу, что обогащения регистрируются просто отлично.
В настоящее время я пытаюсь получить информацию о пользователе от HttpContext
, но она возвращает null
. Вот пример кода, который я пробовал:
public static class HTMLHelperExtensions
{
public static string CurrentUser
{
get
{
HttpContext httpContext = HttpContext.Current;
if (httpContext == null || httpContext.User == null)
return null;
return httpContext.User.Identity.Name;
}
}
}
Вот конфигурация регистрации в моем Global.asax
:
Log.Logger = new LoggerConfiguration()
.Enrich.WithEnvironmentUserName()
.WriteTo.File(
"fileLocation.txt",
restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Information,
rollingInterval: RollingInterval.Infinite,
fileSizeLimitBytes: 10485760, //10MiB
retainedFileCountLimit: 50 )
.WriteTo.Seq("http://localhost:5341")
.CreateLogger();
И откуда я звоню код:
public class HomeController : Controller
{
public ActionResult Index()
{
Log.Information("Application initial load. Included in Audit Log: {auditLog}. User: {User}", true, HTMLHelperExtensions.CurrentUser);
//other code
return View();
}
}
Метод .Enrich.WithEnvironmentUserName()
работает просто отлично, но я не знаю, как перенести эту информацию в фактическое тело журнала вместо обогащения.