Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A Microsoft.Extensions.Logging egy bővíthető naplózási mechanizmus, amely számos gyakori naplózási rendszer beépülő szolgáltatóival rendelkezik. Mind a Microsoft által biztosított beépülő modulok (pl . Microsoft.Extensions.Logging.Console) és külső beépülő modulok (pl. Serilog.Extensions.Logging) NuGet-csomagokként érhetők el.
Az Entity Framework Core (EF Core) teljes mértékben integrálható a Microsoft.Extensions.Logging. Fontolja meg azonban az egyszerű naplózás használatát az egyszerűbb naplózáshoz, különösen olyan alkalmazások esetében, amelyek nem használnak függőséginjektálást.
ASP.NET Core-alkalmazások
Microsoft.Extensions.Logging
alapértelmezés szerint ASP.NET Core-alkalmazásokban használatos. EF Core hívása a AddDbContext vagy AddDbContextPool automatikusan a naplózási beállítást használja, amely a szokásos ASP.NET mechanizmuson keresztül van konfigurálva.
Egyéb alkalmazástípusok
Más alkalmazástípusok a GenericHost használatával ugyanazokat a függőségi injektálási mintákat kapják, mint a ASP.NET Core-ban. AddDbContext vagy AddDbContextPool ugyanúgy használható, mint ASP.NET Core-alkalmazásokban.
Microsoft.Extensions.Logging függőséginjektálást nem használó alkalmazásokhoz is használható, bár az egyszerű naplózás egyszerűbben beállítható.
Microsoft.Extensions.Logging létrehozásához létre kell hozatni egy LoggerFactory. Ezt a gyárat statikus/globális példányként kell tárolni valahol, és minden alkalommal használni kell, amikor létrejön egy DbContext. Gyakori például, hogy a naplózó-előállító statikus tulajdonságként van tárolva a DbContextben.
public static readonly ILoggerFactory MyLoggerFactory
= LoggerFactory.Create(builder => { builder.AddConsole(); });
Ezt az egytonos/globális példányt ezután regisztrálni kell az EF Core-on a DbContextOptionsBuilder. Például:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.UseLoggerFactory(MyLoggerFactory)
.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFLogging;Trusted_Connection=True;ConnectRetryCount=0");
Részletes üzenetek lekérése
Jótanács
Az OnConfiguring akkor is meghívható, ha AddDbContext van használatban, vagy egy DbContextOptions-példányt ad át a DbContext konstruktornak. Így ideális hely a környezetkonfigurációk alkalmazására a DbContext felépítésétől függetlenül.
Bizalmas adatok
Alapértelmezés szerint az EF Core nem fogja tartalmazni az adatok értékeit a kivételüzenetekben. Ennek az az oka, hogy ezek az adatok bizalmasak lehetnek, és az éles használatban is feltárhatók, ha nem kezelik a kivételt.
Az adatértékek ismerete, különösen a kulcsok esetében azonban nagyon hasznos lehet a hibakeresés során. Ez az EF Core-ban a hívással EnableSensitiveDataLogging()engedélyezhető. Például:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.EnableSensitiveDataLogging();
Részletes lekérdezési kivételek
Teljesítmény okokból az EF Core nem csomagolja be egy try-catch blokkba az egyes hívásokat az adatbázis-szolgáltatótól származó értékek beolvasására. Ez azonban néha nehezen diagnosztizálható kivételeket eredményez, különösen akkor, ha az adatbázis null értéket ad vissza, ha a modell nem engedélyezi.
Ha EnableDetailedErrors be van kapcsolva, az EF bevezeti ezeket a try-catch blokkokat, és részletesebb hibainformációkat biztosít. Például:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.EnableDetailedErrors();
Adott üzenetek konfigurálása
Az EF Core ConfigureWarnings API lehetővé teszi az alkalmazások számára, hogy megváltoztatják, mi történik egy adott esemény bekövetkezésekor. Ez a következő célra használható:
- Az esemény naplózási szintjének módosítása
- Az esemény teljes naplózásának kihagyása
- Kivétel küldése az esemény bekövetkezésekor
Esemény naplószintjének módosítása
Néha hasznos lehet egy esemény előre definiált naplószintjének módosítása. Például, ez felhasználható két további esemény LogLevel.DebugLogLevel.Information népszerűsítésére:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.ConfigureWarnings(
b => b.Log(
(RelationalEventId.ConnectionOpened, LogLevel.Information),
(RelationalEventId.ConnectionClosed, LogLevel.Information)));
Esemény naplózásának letiltása
Hasonló módon az egyes eseményeket el lehet tiltani a naplózásból. Ez különösen akkor hasznos, ha figyelmen kívül hagy egy áttekintett és megértett figyelmeztetést. Például:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.ConfigureWarnings(b => b.Ignore(CoreEventId.DetachedLazyLoadingWarning));
Eseményre való dobás
Végül az EF Core konfigurálható úgy, hogy egy adott eseményhez dobjon. Ez különösen hasznos, ha egy figyelmeztetést hibává változtatunk. (Valójában ez volt a módszer eredeti célja ConfigureWarnings , ezért a név.) Például:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.ConfigureWarnings(b => b.Throw(RelationalEventId.QueryPossibleUnintendedUseOfEqualsWarning));
Szűrés és egyéb konfiguráció
A naplószűréssel és más konfigurációval kapcsolatos útmutatásért tekintse meg a naplózást a .NET-ben .
Az EF Core-naplózási események az alábbiak egyikében vannak definiálva:
- CoreEventId az összes EF Core-adatbázis-szolgáltató számára gyakori események esetén
- RelationalEventId az összes relációsadatbázis-szolgáltató számára gyakori események esetén
- Hasonló osztály az aktuális adatbázis-szolgáltatóhoz tartozó eseményekhez. Például SqlServerEventId az SQL Server-szolgáltató esetében.
Ezek a definíciók tartalmazzák az eseményazonosítókat, a naplószintet és a kategóriát az egyes eseményekhez, ahogyan azt a Microsoft.Extensions.Logging használja.