将LINQ-to-SQL生成的SQL记录到NLog

Cop*_*ill 12 nlog linq-to-sql

我想使用NLog将我的LINQ to SQL生成的SQL输出到日志文件中

例如

db.Log = Console.Out

将生成的SQL报告给控制台,http://www.bryanavery.co.uk/post/2009/03/06/Viewing-the-SQL-that-is-generated-from-LINQ-to-SQL.aspx

如何让日志登录NLog?

Dam*_*enG 18

您只需要一个类作为TextWriter,LINQ to SQL需要通过您想要的方法调度它,例如

db.Log = new ActionTextWriter(s => logger.Debug(s));
Run Code Online (Sandbox Code Playgroud)

这是我编写的一个小文本编写器,它接受委托和调度,因此您使用上面的代码.您可能希望更改此类,以便它使用记录器,对文本执行一些处理/拆分,然后将其分派给NLog.

class ActionTextWriter : TextWriter {
  private Action<string> action;

  public ActionTextWriter(Action<string> action) {
    this.action = action;
  }

  public override void Write(char[] buffer, int index, int count) {
    Write(new string(buffer, index, count));
  }

  public override void Write(string value) {
    action.Invoke(value);
  }

  public override Encoding Encoding {
    get { return System.Text.Encoding.Default; }
  }
}
Run Code Online (Sandbox Code Playgroud)