Использование Serilog в проекте ASP.NET MVC

Сегодня на работе меня попросили добавить некоторые базовые функции ведения журналов в мой существующий проект ASP.NET MVC (не Core). Мне сказали использовать Serilog для этого.

Однако мне не удалось найти какой-либо разумный пример использования Serilog в MVC, все ссылки просто ссылаются на Core. Я пытался сделать все сам. После установки всех необходимых пакетов (Serilog, Serilog.Sinks.File) я создал папку "Журналы" и попробовал это:

var log = new LoggerConfiguration()
  .WriteTo.File("~/Logs/log.txt")
  .CreateLogger();

log.Information("Hello from Serilog!");

Я ожидал увидеть новый файл в папке, но там не было ни одного. Я также попытался использовать более простой путь "log.txt" и предварительно создать файл в этой папке, но это не помогло.

Возможно ли, что Serilog вообще не поддерживается для MVC? Если это так, что является простым способом записать что-то в текстовый файл?

0
источник поделиться
2 ответа

Я сомневаюсь, что Serilog понимает синтаксис ~/ в вашем пути к файлу журнала. ~/ относится к виртуальному корню вашего сайта, но Serilog ничего не знает о виртуальных корнях или сайтах. Это просто логическая структура и ожидает нормальный путь. Поэтому, если вы хотите войти в файл с именем log.txt в каталоге Logs вашего сайта, вам необходимо преобразовать его в правильный путь, понятный Serilog.

Метод System.Web.Hosting.HostingEnvironment.MapPath может преобразовывать относительные пути виртуального корня. Так что ~/Logs/log.txt может стать чем-то вроде C:\path-to-your-site\Logs\log.txt.

Изменить на это:

var log = new LoggerConfiguration()
    .WriteTo.File(System.Web.Hosting.HostingEnvironment.MapPath("~/Logs/log.txt"))
    .CreateLogger();

log.Information("Hello from Serilog!");    

//note that importing the namespace will make it so you don't have to fully qualify the name.

Затем Serilog должен войти в то место, которое вы ожидаете, если каталог существует и у него есть права на запись в него.

Регистрация файлов из веб-приложения будет очень грязной. Если ваш сайт практически не используется, журналы станут неуправляемыми и бесполезными. Я предлагаю вам взглянуть на другие приемники Serilog и найти тот, который регистрируется в службе регистрации, такой как Seq (от создателей Serilog) или Stackify Retrace.

0
источник

Из того, что вы показываете, вы не переопределяете журнал должным образом.

При запуске используйте: private IConfiguration Configuration {get; set;} private IConfiguration Configuration {get; set;}

затем в классе Startup перейдите в конфигурацию:

Log.Logger = new LoggerConfiguration().WriteTo.File("~/Logs/log.txt").CreateLogger(); Log.Information("Hello from Serilog!");

Затем вы должны получить ответ, в моем примере используется MVC, хотя основное внимание уделяется ядру: Serilog: Как мне дополнительно улучшить выражение фильтра в appsettings.json?

-1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос