Skip to main content
All docs
V24.1

How to Log SQL Queries

  • 3 minutes to read

External Tools

Native Database Tools

Use the Microsoft SQL Server Profiler, Extended Events or similar tools for your database engine to analyze SQL queries.

XPO Profiler

The XPO ORM library ships with the XPO Profiler. With this tool, you can log SQL queries, track XPO-specific events, and analyze methods that execute specific queries.

Application Code

Trace Listeners (.NET Framework)

Add the corresponding diagnostic switch to the application’s configuration file (App.config or Web.config) to see SQL queries generated by XPO.

<system.diagnostics>  
    <switches>  
        <add name="XPO" value="3" />  
    </switches>  
</system.diagnostics> 

You can find the log in the Visual Studio Output window. Output lines correspond to executed SQL queries, and include query parameters and results.

Write the following code in your application’s configuration file to log XPO SQL commands. XPO creates a text file (trace.log) in the application directory. This file contains all SQL queries.

<?xml version="1.0" encoding="utf-8" ?>  
<configuration>  
    <system.diagnostics>  
        <trace autoflush="true" indentsize="4">  
            <listeners>  
                <add name="LogFileTraceListener" type="System.Diagnostics.TextWriterTraceListener"  
                    initializeData="trace.log" />  
                <remove name="Default" />  
            </listeners>  
        </trace>  
        <switches>  
            <add name="XPO" value="3" />  
        </switches>  
    </system.diagnostics>  
</configuration>

XPO utilizes the standard System.Diagnostics trace logging mechanism. You can also create your own TraceListener class and log queries into a database or text box.

System.Diagnostics.Trace.Listeners.Add(new MyTraceListner(textBox1));  

class MyTraceListner : System.Diagnostics.TraceListener {  
    TextBox outputWindow;  
    public MyTraceListner(TextBox outputWindow) {  
        this.outputWindow = outputWindow;  
    }  
    public override void Write(string message) {  
        outputWindow.AppendText(message);  
    }  
    public override void WriteLine(string message) {  
        outputWindow.AppendText(message + "\r\n");  
    }  
} 

XPO Logger (.NET 6)

Implement a custom ILogger class. Use the static DevExpress.Xpo.Logger.LogManager.SetTransport method to register the custom logger class.

using DevExpress.Xpo.Logger;
using System;

namespace ConsoleApp1 {
    class Program {
        static void Main(string[] args) {
            // Registers your custom logger.
            DevExpress.Xpo.Logger.LogManager.SetTransport(new XpoConsoleLogger());
        }
    }
    class XpoConsoleLogger : DevExpress.Xpo.Logger.ILogger {
        public int Count => 0;
        public int LostMessageCount => 0;
        public bool IsServerActive => true;
        public bool Enabled { get; set; } = true;
        public int Capacity => 0;
        public void ClearLog() { }

        public void Log(LogMessage message) {
            // Implement your custom logic (for instance, to output messages in Console)
            if(Enabled) {
                Console.WriteLine(message.ToString());
            }
        }

        public void Log(LogMessage[] messages) {
            foreach(var msg in messages) {
                Log(msg);
            }
        }
    }
}
See Also