Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Microsoft.Extensions.Logging är en utökningsbar loggningsmekanism med plugin-leverantörer för många vanliga loggningssystem. Både plugin-program från Microsoft (t.ex . Microsoft.Extensions.Logging.Console) och plugin-program från tredje part (t.ex. Serilog.Extensions.Logging) är tillgängliga som NuGet-paket.
Entity Framework Core (EF Core) integreras fullständigt med Microsoft.Extensions.Logging. Överväg dock att använda enkel loggning för ett enklare sätt att logga, särskilt för program som inte använder beroendeinmatning.
ASP.NET Core-applikationer
Microsoft.Extensions.Logging
används som standard i ASP.NET Core-program. Anropar AddDbContext eller AddDbContextPool gör att EF Core automatiskt använder loggningskonfigurationen som konfigurerats via den vanliga ASP.NET mekanismen.
Andra programtyper
Andra programtyper kan använda GenericHost för att få samma beroendeinmatningsmönster som används i ASP.NET Core. AddDbContext eller AddDbContextPool kan sedan användas precis som i ASP.NET Core-program.
Microsoft.Extensions.Logging kan också användas för program som inte använder beroendeinmatning, även om enkel loggning kan vara enklare att konfigurera.
Microsoft.Extensions.Logging kräver skapelse av en LoggerFactory. Den här fabriken bör lagras som en statisk/global instans någonstans och användas varje gång en DbContext skapas. Det är till exempel vanligt att lagra loggerfabriken som en statisk egenskap i DbContext.
public static readonly ILoggerFactory MyLoggerFactory
= LoggerFactory.Create(builder => { builder.AddConsole(); });
Den här singleton/globala instansen bör sedan registreras med EF Core på DbContextOptionsBuilder. Till exempel:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.UseLoggerFactory(MyLoggerFactory)
.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFLogging;Trusted_Connection=True;ConnectRetryCount=0");
Få detaljerade meddelanden
Tips/Råd
OnConfiguring anropas fortfarande när AddDbContext används eller en DbContextOptions-instans skickas till DbContext-konstruktorn. Detta gör det till den perfekta platsen för att tillämpa kontextkonfiguration oavsett hur DbContext konstrueras.
Känsliga data
Som standard innehåller EF Core inte värdena för några data i undantagsmeddelanden. Detta beror på att sådana data kan vara konfidentiella och kan avslöjas i produktionsanvändning om ett undantag inte hanteras.
Men att känna till datavärden, särskilt för nycklar, kan vara till stor hjälp vid felsökning. Detta kan aktiveras i EF Core genom att anropa EnableSensitiveDataLogging(). Till exempel:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.EnableSensitiveDataLogging();
Detaljerade frågeundantag
Av prestandaskäl omsluter EF Core inte varje anrop för att läsa ett värde från databasprovidern i ett try-catch-block. Detta resulterar dock ibland i undantag som är svåra att diagnostisera, särskilt när databasen returnerar en NULL när den inte tillåts av modellen.
Genom att aktivera EnableDetailedErrors introducerar EF dessa try-catch-block och ger därmed mer detaljerade felmeddelanden. Till exempel:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.EnableDetailedErrors();
Konfiguration för specifika meddelanden
MED EF Core ConfigureWarnings API kan program ändra vad som händer när en specifik händelse påträffas. Detta kan användas för att:
- Ändra loggnivån där händelsen loggas
- Hoppa över att logga händelsen helt och hållet
- Utlöser ett undantag när händelsen inträffar
Ändra loggnivån för en händelse
Ibland kan det vara användbart att ändra den fördefinierade loggnivån för en händelse. Detta kan till exempel användas för att höja upp ytterligare två händelser från LogLevel.Debug till LogLevel.Information:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.ConfigureWarnings(
b => b.Log(
(RelationalEventId.ConnectionOpened, LogLevel.Information),
(RelationalEventId.ConnectionClosed, LogLevel.Information)));
Förhindra loggning av en händelse
På liknande sätt kan en enskild händelse förhindras från loggning. Detta är särskilt användbart för att ignorera en varning som har granskats och förståtts. Till exempel:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.ConfigureWarnings(b => b.Ignore(CoreEventId.DetachedLazyLoadingWarning));
Utlösa en händelse
Slutligen kan EF Core konfigureras för att generera för en viss händelse. Detta är särskilt användbart för att ändra en varning till ett fel. (Detta var faktiskt det ursprungliga syftet med ConfigureWarnings metoden, därav namnet.) Till exempel:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.ConfigureWarnings(b => b.Throw(RelationalEventId.QueryPossibleUnintendedUseOfEqualsWarning));
Filtrering och annan konfiguration
Mer information om loggfiltrering och annan konfiguration finns i Loggning i .NET .
EF Core-loggningshändelser definieras i något av följande:
- CoreEventId för händelser som är gemensamma för alla EF Core-databasprovidrar
- RelationalEventId för händelser som är gemensamma för alla relationsdatabasprovidrar
- En liknande klass för händelser som är specifika för den aktuella databasprovidern. Till exempel SqlServerEventId för SQL Server-providern.
Dessa definitioner innehåller händelse-ID:t, loggnivån och kategorin för varje händelse, som används av Microsoft.Extensions.Logging.