Using context.Database.Log in MVC web app

12,934

Solution 1

Using a delegate allows you to do write any function taking a string. As a very simple logging to a file, you could do the following:

context.Database.Log = message => File.AppendText("C:\\mylog.txt").WriteLine(message);

In a web environment, you may wish to use Trace to log this information:

context.Database.Log = message => Trace.WriteLine(message);

You can see more examples of using delegates on the MSDN page on Anonymous Functions.

Solution 2

To write your logs to a file, try this:

using (var context = new MyDbContext())
{
    var logFile = new StreamWriter("C:\\temp\\log.txt");
    context.Database.Log = logFile.Write;

    // Execute your queries here
    // ....

    logFile.Close();
}

Solution 3

You can print it in Debug window:

dbContext.Database.Log = message => Debug.Write(message);
Share:
12,934
markpsmith
Author by

markpsmith

I will never play the Dane.

Updated on July 27, 2022

Comments

  • markpsmith
    markpsmith almost 2 years

    Using the guide here, I'm trying to log the SQL generated by my MVC web application.

    The guide uses the line:

    context.Database.Log = Console.Write;
    

    Which obviously doesn't work with a web application. The guide described the Log property:

    The DbContext.Database.Log property can be set to a delegate for any method that takes a string.

    And it's this I don't understand, delegates just confuse me. How can I use this EF6 feature?