Domanda

Vorrei utilizzare NLog all'uscita il mio LINQ to SQL generato SQL per il file di log

per es.

db.Log = Console.Out

riporta il codice SQL generato alla console, http://www.bryanavery.co.uk/post/2009/03/06/Viewing-the-SQL-that-is-generated-from-LINQ -to-SQL.aspx

Come posso ottenere il registro per accedere al NLog?

È stato utile?

Soluzione

Hai solo bisogno di una classe di agire come un TextWriter che LINQ to SQL ha bisogno di spedire tramite il metodo che si desidera, per esempio.

db.Log = new ActionTextWriter(s => logger.Debug(s));

Ecco un writer di testo po 'ho scritto che prende un delegato e dispacci a quello in modo da utilizzare il codice precedente. Probabilmente si vorrebbe cambiare questa classe così c'è voluto un registratore, ha fatto un po 'di elaborazione / scissione sul testo e poi spedito fuori per 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; }
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top