Я пытаюсь внедрить средство ведения журнала AddJsonConsole в свой API C#. Я заставил его работать, но вместо специальных символов он печатает их значение в Юникоде (например, \u003E вместо >). Есть ли способ настроить его для печати реальных символов?
Я настроил это так в Program.cs:
Я пытаюсь внедрить средство ведения журнала AddJsonConsole в свой API C#. Я заставил его работать, но вместо специальных символов он печатает их значение в Юникоде (например, \u003E вместо >). Есть ли способ настроить его для печати реальных символов? Я настроил это так в Program.cs: [code]builder.Logging.ClearProviders(); builder.Logging.AddJsonConsole(options => { options.IncludeScopes = false; options.TimestampFormat = "HH:mm:ss"; options.JsonWriterOptions = new() { Indented = true, }; }); [/code] Что дает такой результат: [code]{ "Timestamp": "11.26.19", "EventId": 0, "LogLevel": "Error", "Category": "Mixorama.Server.Controllers.CocktailsController", "Message": "Failed to create cocktail", "Exception": "System.InvalidOperationException: The type of navigation \u0027CocktailEntity.Ingredients\u0027 is \u0027SelectListIterator\u003CIngredientEntity, IngredientEntity\u003E\u0027 which does not implement \u0027ICollection\u003CIngredientEntity\u003E\u0027. Collection navigations must implement \u0027ICollection\u003C\u003E\u0027 of the target type.\r\n at Microsoft.EntityFrameworkCore.Metadata.Internal.ClrICollectionAccessor\u00603.GetCollection(Object instance)\r\n at Microsoft.EntityFrameworkCore.Metadata.Internal.ClrICollectionAccessor\u00603.GetOrCreateCollection(Object instance, Boolean forMaterialization)\r\n at Microsoft.EntityFrameworkCore.Metadata.Internal.ClrICollectionAccessor\u00603.Add(Object entity, Object value, Boolean forMaterialization)\r\n at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.AddToCollection(INavigationBase navigationBase, Object value, Boolean forMaterialization)\r\n at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.NavigationFixer.AddToCollection(InternalEntityEntry entry, INavigationBase navigation, InternalEntityEntry value, Boolean fromQuery)\r\n at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.NavigationFixer.SetReferenceOrAddToCollection(InternalEntityEntry entry, INavigationBase navigation, InternalEntityEntry value, Boolean fromQuery)\r\n at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.NavigationFixer.ToDependentFixup(InternalEntityEntry dependentEntry, InternalEntityEntry principalEntry, IForeignKey foreignKey, Boolean fromQuery)\r\n at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.NavigationFixer.InitialFixup(InternalEntityEntry entry, InternalEntityEntry duplicateEntry, Boolean fromQuery)\r\n at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.NavigationFixer.StateChanged(InternalEntityEntry entry, EntityState oldState, Boolean fromQuery)\r\n at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntryNotifier.StateChanged(InternalEntityEntry entry, EntityState oldState, Boolean fromQuery)\r\n at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.FireStateChanged(EntityState oldState)\r\n at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.SetEntityState(EntityState oldState, EntityState newState, Boolean acceptChanges, Boolean modifyProperties)\r\n at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.SetEntityState(EntityState entityState, Boolean acceptChanges, Boolean modifyProperties, Nullable\u00601 forceStateWhenUnknownKey, Nullable\u00601 fallbackState)\r\n at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityGraphAttacher.PaintAction(EntityEntryGraphNode\u00601 node)\r\n at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityEntryGraphIterator.TraverseGraph[TState](EntityEntryGraphNode\u00601 node, Func\u00602 handleNode)\r\n at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityGraphAttacher.AttachGraph(InternalEntityEntry rootEntry, EntityState targetState, EntityState storeGeneratedWithKeySetTargetState, Boolean forceStateWhenUnknownKey)\r\n at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.NavigationFixer.NavigationCollectionChanged(InternalEntityEntry entry, INavigationBase navigationBase, IEnumerable\u00601 added, IEnumerable\u00601 removed)\r\n at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntryNotifier.NavigationCollectionChanged(InternalEntityEntry entry, INavigationBase navigationBase, IEnumerable\u00601 added, IEnumerable\u00601 removed)\r\n at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.ChangeDetector.DetectNavigationChange(InternalEntityEntry entry, INavigationBase navigationBase)\r\n at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.ChangeDetector.LocalDetectChanges(InternalEntityEntry entry)\r\n at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.ChangeDetector.DetectChanges(IStateManager stateManager)\r\n at Microsoft.EntityFrameworkCore.ChangeTracking.ChangeTracker.DetectChanges()\r\n at Microsoft.EntityFrameworkCore.DbContext.TryDetectChanges()\r\n at Microsoft.EntityFrameworkCore.DbContext.SaveChangesAsync(Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken)\r\n at Mixorama.Server.Controllers.CocktailsController.CreateCocktail(CreateCocktailRequest request) in c:\\Users\\busks\\Code\\Mixorama\\Mixorama.Server\\Controllers\\CocktailsController.cs:line 75", "State": { "Message": "Failed to create cocktail", "{OriginalFormat}": "Failed to create cocktail" } } [/code] (обратите внимание, что поле Exception заполнено значениями Юникода)