.NET Tips and Tricks

Blog archive

Logging vs. Reporting Exceptions in Visual Studio

In an earlier tip I disagreed with one of Microsoft's recommendations for handling exceptions. I figure I'm on a roll, so here's another objection to some Microsoft advice on handling errors.

In Microsoft's reference documentation for the Exception object's ToString method, Microsoft recommends using Exception object's ToString method to report errors. The Remarks section of the documentation says that the exception's ToString method "returns a representation of the current exception that is intended to be understood by humans."

That's true if, I guess, by "humans," you actually mean "developers."

Let me make my point. Here's what you'll find in the DivideByZeroException object's Message property:

Attempted to divide by zero.

Here's what's returned by the ToString method:

System.DivideByZeroException: Attempted to divide by zero. at CustomerManagement.CreditManagement.CreditManagement_Load(Object sender, EventArgs e) in C:\\Users\\peter\\Source\\Repos\\Customers\\CustomerManagement\\CreditManagement.cs:line 30

Don't get me wrong: I think that the output of the ToString method is a great thing to put into your application's log file. I also think that inflicting that on a defenseless user is just mean. I think what's in the Message property is what you should give to the user.

Having said all that, however, I'm not suggesting you ignore Microsoft's advice on the Exception object's ToString method. The Remarks also say "The default implementation of ToString obtains the name of the class that threw the current exception, the message, the result of calling ToString on the inner exception, and the result of calling Environment.StackTrace." Precisely because it does make a good log file entry, I think you should be making sure that's what the ToString method does when you create your own custom exception object.

Posted by Peter Vogel on 06/03/2019


comments powered by Disqus

Featured

  • Agents Now Conduct 'Deep Research' in Azure AI Foundry Limited Preview

    Microsoft has brought OpenAI's Deep Research model to Azure AI Foundry, giving developers API and SDK access to autonomous research agents that gather, analyze, and report on web-scale data. Now in public preview, the capability powers enterprise workflows with reasoning-grade intelligence and programmable orchestration.

  • Linear Regression Using JavaScript

    Dr. James McCaffrey presents a complete end-to-end demonstration of linear regression using JavaScript. Linear regression is the simplest machine learning technique to predict a single numeric value, and a good way to establish baseline results for comparison with other more sophisticated regression techniques.

  • Creating Simple Chat Bots with Microsoft Fabric Datastores

    At Visual Studio Live! San Diego, Ginger Grant of Desert Isle Group will lead a practical, demo-driven session on how to build simple yet powerful chatbots using Microsoft Fabric lakehouses and warehouses. Attendees will learn how to use AI skills and grounding techniques to enable conversational data access -- quickly and cost-effectively. Ideal for developers ready to extend analytics with conversational interfaces.

  • Prompt Engineering? See VS Code Team's System Prompts for Copilot Chat, Now Open Source

    "Explore the codebase and learn how agent mode is implemented, what context is sent to LLMs, and how we engineer our prompts."

  • VS Code Goes Transparent as Open-Source AI Editor

    Microsoft has open sourced the GitHub Copilot Chat extension, marking a major step in turning VS Code into an open-source AI editor focused on transparency, collaboration, and community-driven development.

Subscribe on YouTube