Starts in:
2 DAYS
4 HRS
9 MIN
47 SEC
Starts in:
2 D
4 H
9 M
47 S
Open Closed

Not able to insert data in log table in Finally block in case of any exception in main transaction even if [UnitOfWork(IsDisabled = true)] for log method #6279


User avatar
0
Priyanka created

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)
  • User Avatar
    0
    jfistelmann created

    why don't you configure a serilog sink to db? and just call Logger.LogError or something?

  • User Avatar
    0
    Priyanka created

    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.

  • User Avatar
    0
    jfistelmann created

    i meant something like this here;

    https://github.com/serilog-mssql/serilog-sinks-mssqlserver

    does that work for you?

  • User Avatar
    0
    Priyanka created

    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.

  • User Avatar
    0
    liangshiwei created
    Support Team Fullstack Developer

    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();
      }
    }
    
  • User Avatar
    0
    Priyanka created

    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 ?

  • User Avatar
    0
    liangshiwei created
    Support Team Fullstack Developer

    Sorry, should be CompleteAsync. (because there is no IDE code prompt here)

  • User Avatar
    0
    Priyanka created

    Sorry, should be CompleteAsync. (because there is no IDE code prompt here)

    ok, thank you for the solution. It is working.

Made with ❤️ on ABP v9.1.0-preview. Updated on November 20, 2024, 13:06