11

Mam ASP.NET Core web api projektu. Teraz chcę log błędów i zdarzeń. Wcześniej używałem ELMAH w moim projekcie, ale wydaje się, że elmah nie jest dostępny dla ASP.NET Core. Nawiązałem do this Official link konfiguracji domyślnej usługi logowania udostępnianej przez Microsoft. Nie widzę nigdzie, jak mogę zapisać te logi w pliku tekstowym lub w bazie danych.Wykrywanie programu ASP.NET Core 1.0

Jeśli środowisko ASP.NET Core ma już domyślną funkcję rejestrowania, zastanawiam się, dlaczego powinienem używać innych narzędzi, takich jak elmah, log4net. Tak więc ponownie, gdy szukałem artykułu, który implementuje domyślne rejestrowanie, aby zapisać dzienniki w db lub w pliku tekstowym, nie mogłem znaleźć żadnych. Czy istnieje sposób, w jaki możemy zapisać dzienniki w pliku przy użyciu wbudowanego w rdzeń ASP.NET obsługi logowania?

Obecnie używam Serilog, który działa doskonale, a także pobierany seq do wyświetlania logów z wdziękiem w przeglądarce. Nadal jednak zastanawiam się, w jaki sposób mogę osiągnąć to samo, używając wbudowanej funkcji rejestrowania podstawowego asp.net.

pliku dziennika za pomocą Serilog:

Logi wyświetlane przy użyciu SEQ: enter image description here

Odpowiedz

5

Domyślnie ASP.NET Rdzeń rejestrowanie jeśli opiera się na standardowym .NET Rdzenia abstrakcje i implementacje dla wspomnianych abstrakcji. Dostarczone przez Ciebie urządzenie link jest dokładnie tym, czego chcesz przestrzegać podczas korzystania z usług rejestrowania. Będą pisać na standardowe wyjście (okno wyjściowe), na przykład podczas debugowania.

Część, której szukasz, to web.config. Rozważ następujące:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.webServer> 
    <handlers> 
     <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" 
      resourceType="Unspecified" /> 
    </handlers> 
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" 
       forwardWindowsAuthToken="false" stdoutLogEnabled="true" 
       stdoutLogFile="C:\temp\logs\log.log" /> 
    </system.webServer> 
</configuration> 

Szukasz stdoutLogEnabled and stdoutLogFile.

stdoutLogEnabled Jeśli to prawda, stdout i stderr dla procesu określonym w processPath będzie przekierowywane do pliku podanego w stdoutLogFile.

I

stdoutLogFile określa względną lub bezwzględną ścieżkę dla których standardowe wyjście i stderr z procesu określonego w processPath zostanie zarejestrowane. Względne ścieżki są względne względem katalogu głównego witryny . Każda ścieżka rozpoczynająca się od "." Będzie w stosunku do katalogu głównego witryny, a wszystkie inne ścieżki będą traktowane jako ścieżki bezwzględne.

zobaczyć również Publishing to IIS Szczegółowe informacje na temat modułu ASP.NET podstawowej.

+0

Nie zapomnij dodać folderu zawierającego logi do struktury rozwiązania, a także umieść go w pliku publishOpcje project.json https://docs.asp.net/en/latest/hosting/directory- structure.html. Zrobiłem to i działa wspaniale i nadaje pliki z konwencją nazewnictwa opartą na datach (np. Stdout_8440_201691620225.log). Trochę zbyt gadatliwy po wyjęciu z pudełka, ale można go poprawić. –

2

Podsystem logowania programu ASP.NET Core nie zapewnia jeszcze rejestratora plików, ale creating one is being discussed.

W chwili pisania tego artykułu należy w tym celu użyć Serilog lub NLog.

+0

I działa Serilog.Sinks.MSSqlServer z rdzeniem asp.net. zainstalowanie nawet najnowszej wersji beta oczekuje wersji serologicznej <2.0. –

2

Naprawdę nie można porównać wbudowanego rejestrowania w środowisku ASP.NET Core z ELMAH. Rejestrowanie rdzeniowe ASP.NET jest prostą strukturą rejestrowania, w której należy określić, co należy rejestrować i kiedy. ELMAH automatycznie przechwytuje wszystkie nieobsługiwane wyjątki i rejestruje wiele kontekstowych informacji o nieudanym żądaniu. Wtyczka Seq faktycznie zaimplementowała niektóre z tych zachowań, co sprawia, że ​​dodatkowe informacje, takie jak Protocol, RequestId i podobne, są dostępne za pośrednictwem Seq, ale nie jest to coś, co wyjdzie z pudełka z logowaniem ASP.NET.

Rejestrowanie programu ASP.NET jest wciąż zupełnie nowe, dlatego rejestratory innych ramek i miejsc docelowych zaczną się pojawiać. Jestem pewien, że rejestracja oparta na plikach zostanie wkrótce wdrożona, a ELMAH zostanie również przeniesiony na ASP.NET Core. Aby uzyskać więcej informacji, sprawdź mój wpis na blogu: ASP.NET Core Logging Tutorial.

1

Właśnie zrobiłem kilka badań na ten temat na blogu na temat logowania ASP.NET Core. Spojrzałem na wbudowane rejestrowanie, a także NLog, SeriLog i log4net.

Zasadniczo znalazłem wbudowany w ILoggerFactory działa dobrze, ale ma jeden rażący problem: nie będzie zapisywać do pliku. Obsługuje Console, Debug, ETW i kilka innych dostawców, ale nie pliki. Zakładam, że pliki są dość skomplikowane, gdy musisz zacząć martwić się maksymalnymi rozmiarami plików, obrotami i wszystkimi innymi rzeczami, które się z tym wiążą.

Wbudowany rejestrowanie działa doskonale dla internowań .NET, a ponieważ nie trzeba pisać do plików, tak naprawdę nie jest to ograniczenie dla zespołu .NET. Serilog i NLog zapewniają niewiele rozszerzeń, aby umożliwić pisanie plików. Oczywiście te biblioteki zapewniają także znacznie więcej funkcji we wszystkich dziedzinach.

Rozszerzenie Serilog wymaga jednego wiersza kodu i dodaje rejestrację pliku. Można o tym przeczytać tutaj: https://github.com/serilog/serilog-extensions-logging-file

Oto mój blog post o logowaniu ASP.NET podstawowej, czy to pomaga: https://stackify.com/asp-net-core-logging-what-changed/

Powiedziałbym, jeśli masz naprawdę proste rejestrowanie potrzebuje można dokonać wbudowany logowanie działa, z rozszerzeniem pliku. Jak tylko chcesz uzyskać dostęp do zaawansowanych funkcji, takich jak sterowanie formatem wyjściowym, logowanie do usług zewnętrznych, rotacja plików, maksymalny rozmiar pliku itp., Będziesz chciał użyć NLog lub Serilog.