# NopLogWriter — Logging Bridge > Part of `Mango.Nop.Services`. See `Mango.Nop.Services/README.md` for project overview. > For AyCode base logging types (`AcLogItemWriterBase`, `AcLogItem`, log levels) see `AyCode.Core/AyCode.Core/docs/LOGGING/README.md`. ## Overview Bridges AyCode logging to nopCommerce's `Nop.Core.Domain.Logging.Log` table via direct DB insert. ## NopLogWriter | Feature | Detail | |---|---| | Inherits | `AcLogItemWriterBase` (AyCode.Core) | | Log level mapping | AyCode `Detail/Trace/Debug/Info` -> nopCommerce `Information`; `Suggest/Warning` -> `Warning`; `Error` -> `Error` | | Direct DB insert | Uses `NopLoggerMsSqlNopDataProvider` with `TransactionScope(Suppress)` to avoid transaction conflicts | **Constructor:** `(INopLoggerMsSqlNopDataProvider, CommonSettings, CustomerSettings, IWebHelper, Nop.Services.Logging.ILogger, string? categoryName)` ## NopLoggerMsSqlNopDataProvider Extends `MsSqlNopDataProvider`. Provides isolated DB access for log writes. | Method | Purpose | |---|---| | `InsertLogItem()` | Sync insert with own `TransactionScope(Suppress, ReadUncommitted)` | | `InsertLogItemAsync()` | Async insert with own `TransactionScope(Suppress, ReadUncommitted)` | The `TransactionScope(Suppress)` is critical — without it, log writes would participate in the caller's transaction, causing nesting conflicts and potential deadlocks. ## Integration Point ``` Application code -> Mango.Nop.Core.Loggers.ILogger (extends IAcLoggerBase) -> Logger (extends AcLoggerBase, delegates to IAcLogWriterBase[]) -> NopLogWriter -> Nop Log table (direct SQL insert) -> [Other AyCode log writers: console, file, SignalR, etc.] ``` **Exception:** `MgBackgroundServiceBase` uses `Nop.Services.Logging.ILogger` directly (nopCommerce logger), not the Mango wrapper.