Skip to main content
Open

Debugging the bugs life made easier - more information from the indicium log

Related products:Indicium Service Tier

Ricky
Superhero

Tracing back issues can be a pain in certain places. We all know that, especially when it is not code you’ve written yourselves and it was executed on machines you have to get approval of to get access for more information about whatever you need to examine this further.

Indicium is mostly the middle man that may just about to knowing every single thing in the constellation of the application.

Currently the errors in the indicium log barely give information about the context, where it was triggered, what has caused it to happen etc. For example which http request was it that triggered the error and which function/stored procedure/trigger/systemflow/what the actualy faulty SQL statement was etc… 

Sure you can gather every single logfile from alle the included servers in the whole process, including client action and try to match them all together, but a single indicium log entry that provides such crucial backtrace information is sooo much more convenient - I’m pretty sure you are not only making the debuggers and coders happy, but the whole nine yards from customer to servicedesk to systemengineers and sales and everyone in between.

Did this topic help you find an answer to your question?

4 replies

Mark Jongeling
Administrator
Forum|alt.badge.img+23
Updated idea status NewOpen

Mark Jongeling
Administrator
Forum|alt.badge.img+23

Hi Ricky,

The Indicium log and other logging screens have certainly improved over time. In the current state, do you still miss certain information? 


Robert Jan de Nie
Thinkwise blogger
Forum|alt.badge.img+5

Hi @Mark Jongeling, what would be great is if you get an error that shows on the screen (even unknown error) the user gets returned an identifier that is also stored in the log. Based on that information the user provides you can then find the exact corresponding log message instead of digging around in it.


Ricky
Superhero
Forum|alt.badge.img+8
  • Author
  • Superhero
  • 96 replies
  • August 6, 2024

Hi Mark,

Life sure is getting better for the folks that are having the privilege to be using Indicium and not the Basic version we still have to use for a great part of our applications. But even with the current version of the platform using Indicium there are still plenty challenges left for me, so for example, I have this error in the indicium log:

2024-08-06T12:04:07.0519888+02:00 800012bc-0001-ea00-b63f-84710c7967bb [ERR] An unhandled exception occurred while processing the request. (ffba027a)

Indicium.Shared.TSF.FatalDbException (0x80004005): The following query failed with an exception: '--'

 ---> Indicium.Data.Shared.CustomDbException (0x00000AFC): Could not find stored procedure '--'.

The infamous “by The Request”. Now which (http?)request was that, coming out of which action, by whom, was that a trigger, part of a template call from something?

 

Here is another one:

2024-08-06T12:50:17.7673259+02:00 800000ea-0002-d700-b63f-84710c7967bb [ERR] An unhandled exception occurred while processing the request. (ffba027a)

Indicium.Shared.TSF.FatalDbException (0x80004005): The following query failed with an exception: 'UPDATE  t1

SET t1.[system_company_id] = @p0, t1.[calculation_id] = @p1, t1.[calculation_structure_id] = @p2, t1.[system_administration_id] = @p3, t1.[calculation_specification_line_order_no] = @p4, t1.[resource_work_id] = @p5, t1.[resource_type_code] = @p6, t1.[resource_id] = @p7, t1.[calculation_specification_line_description] = @p8, t1.[quantity_internal] = @p9, t1.[quantity_external] = @p10, t1.[unit_id] = @p11, t1.[gross_price_per_unit] = @p12, t1.[discount_percentage_internal] = @p13, t1.[discount_percentage_external] = @p14, t1.[allowance_percentage_internal] = @p15, t1.[allowance_percentage_external] = @p16, t1.[net_price_per_unit_internal] = @p17, t1.[net_price_per_unit_external] = @p18, t1.[net_price_per_unit_external_inc_general_cost] = @p19, t1.[net_price_total_external_inc_general_cost] = @p20, t1.[net_price_total_external_inc_multiplier_and_general_cost] = @p21, t1.[resource_base_time_operation_id] = @p22, t1.[base_time_operation_id] = @p23, t1.[base_time_internal] = @p24, t1.[base_time_external] = @p25, t1.[correction_factor_internal] = @p26, t1.[correction_factor_external] = @p27, t1.[base_time_correction_internal] = @p28, t1.[base_time_correction_external] = @p29, t1.[hour_rate_internal] = @p30, t1.[hour_rate_external] = @p31, t1.[work_internal] = @p32, t1.[work_external] = @p33, t1.[hour_rate_external_inc_general_cost] = @p34, t1.[mamok_code_general] = @p35, t1.[mamok_code_work] = @p36, t1.[subtotal_material_internal] = @p37, t1.[subtotal_material_external] = @p38, t1.[subtotal_work_internal] = @p39, t1.[subtotal_work_external] = @p40, t1.[subtotal_equipment_internal] = @p41, t1.[subtotal_equipment_external] = @p42, t1.[subtotal_service_internal] = @p43, t1.[subtotal_service_external] = @p44, t1.[subtotal_cost_internal] = @p45, t1.[subtotal_cost_external] = @p46, t1.[work_total_external_inc_general_cost] = @p47, t1.[work_total_external_inc_multiplier_and_general_cost] = @p48, t1.[total_external_inc_general_cost] = @p49, t1.[total_internal_including_multiplier] = @p50, t1.[total_external_including_multiplier] = @p51, t1.[total_external_including_multiplier_and_general_cost] = @p52, t1.[margin_total] = @p53, t1.[estimated_budget_type] = @p54, t1.[calculation_specification_line_memo_internal] = @p55, t1.[calculation_specification_line_memo_external] = @p56, t1.[relation_id] = @p57, t1.[external_structure_reference_id] = @p58, t1.[recipe_has_fixed_price] = @p59, t1.[vat_rate_id] = @p60, t1.[resource_work_vat_rate_id] = @p61, t1.[work_process_id] = @p62, t1.[calculation_specification_line_skip_update] = @p63, t1.[resource_class_id] = @p64, t1.[gln_number] = @p65, t1.[ignore_trigger] = @p66, t1.[trade_item_code] = @p67, t1.[existing_inhabited_2ba] = @p68, t1.[existing_empty_2ba] = @p69, t1.[new_single_2ba] = @p70, t1.[new_repeating_2ba] = @p71, t1.[is_composed_allowance] = @p72, t1.[resource_from_online] = @p73, t1.[connection_supplier_id] = @p74, t1.[instruction_pre_calculation_specification_id] = @p75, t1.[new_selectonline_line] = @p76, t1.[resource_gln_number] = @p77, t1.[resource_code] = @p78, t1.[cost_type_id] = @p79, t1.[cost_type_work_id] = @p80, t1.[resource_discount_net_price] = @p81, t1.[price_list_discount] = @p82, t1.[vat_amount_total] = @p83, t1.[vat_amount_per_unit] = @p84, t1.[calculation_specification_line_discount_percentage] = @p85, t1.[has_document] = @p86, t1.[apply_calculation_rules] = @p87, t1.[source_calculation_id] = @p88, t1.[source_calculation_specification_line_id] = @p89, t1.[price_indication] = @p90, t1.[insert_user] = @p91, t1.[insert_date_time] = @p92, t1.[update_user] = @p93, t1.[update_date_time] = @p94

FROM [calculation_specification_line] t1

WHERE t1.[system_company_id] = @p95 AND t1.[calculation_id] = @p96 AND t1.[calculation_specification_line_id] = @p97'

 ---> Microsoft.Data.SqlClient.SqlException (0x80131904): Arithmetic overflow error converting numeric to data type numeric.

The statement has been terminated.

Now somewhere between @p1..@pNN should be an overflow of something…

Funny thing in the above one, is that it is a 500 Server error that it corresponds to, while in my humble opinion it should register as an application error. (Despite the probable fact that this was bad error handling in the first place)

Surely I can relate to that I also do not want to explicitly monitor users, but it still would be very convenient to see the journey someone made through my application(s). Still, many errors are due to data related items, which are, as expected, build up through said journey.

Currently I am still collecting the IIS logfiles and (try to) match the related indicium errors. This brings a lot of false positives if your’re not familiar with the code that is behind all of these requests...


Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings