I have a service where I'm doing Insert and update in Mutiple table and in case of any exception, I'm logging in DB log table in finally section. I'm getting this exception in Insert or update "String or binary data would be truncated in table 'Addresses', column 'Street'. Truncated value: 'Severe depressive episode without psychotic symptoms, not specified as arising in the postnatal peri' , now when I'm logging the error in DB log table, on insert of log table I'm getting the same exception. My Log method for DB log have attribute- [UnitOfWork(IsDisabled = true)], seems like on log insert it is trying to complete the whole transaction, how to resolve this?
ABP Framework version: v5.3.2
UI Type:React
Database System: EF Core (SQL Server)
Tiered (for MVC) or Auth Server Separated (for Angular): yes
Exception message and full stack trace:NA
Steps to reproduce the issue: Call Insert where some exception is there and in Finally call insert to log the exception in logTable.
8 Answer(s)
-
0
why don't you configure a serilog sink to db? and just call Logger.LogError or something?
-
0
why don't you configure a serilog sink to db? and just call Logger.LogError or something?
We have requirement to keep log in DB. While Inserting in DBlog table I'm getting the same exception which I want to log in DB table.
-
0
i meant something like this here;
https://github.com/serilog-mssql/serilog-sinks-mssqlserver
does that work for you?
-
0
i meant something like this here;
https://github.com/serilog-mssql/serilog-sinks-mssqlserver
does that work for you?
Log event is already there, we have case where our service is called by external user so we are keeping log of that service where we need to keep request message, response message, current status, messageId etc and this table data is accessible to user to know the status of request hence we are keeping in separate table. Please help me with the solution to insert data in my log table without any exception of try block transaction.
-
0
Hi,
you need to roll back the main transaction, and create a new transaction to record the log.
try { await _repositpry.InsertAsync(...xxxx, autoSave: true) } catch(exception e) { await _unitOfWorkManager.Current.RollbackAsync(); } final { using (var uow = UnitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) { ..... await uow.CommitAsync(); } }
-
0
Hi,
you need to roll back the main transaction, and create a new transaction to record the log.
try { await _repositpry.InsertAsync(...xxxx, autoSave: true) } catch(exception e) { await _unitOfWorkManager.Current.RollbackAsync(); } final { using (var uow = UnitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) { ..... await uow.CommitAsync(); } }
Hi, Thank you for the solution but uow.CommitAsync() is having compile time error
Can we use CompleteAsync? What is the difference between commit and complete here in this case ?
-
0
Sorry, should be
CompleteAsync
. (because there is no IDE code prompt here) -
0
Sorry, should be
CompleteAsync
. (because there is no IDE code prompt here)ok, thank you for the solution. It is working.