Skip to content

Instantly share code, notes, and snippets.

@oscarryz
Forked from yngwie74/gist:3144879
Created July 19, 2012 21:55
Show Gist options
  • Save oscarryz/3147119 to your computer and use it in GitHub Desktop.
Save oscarryz/3147119 to your computer and use it in GitHub Desktop.
Obtener un log del SQL generado por un DataContext
private TRet WithLogging<T, TRet>(T context, string logmsg, Func<T, TRet> func) where T : DataContext
{
TRet result;
var temporal = new TemporalLogger.Create(logmsg, context.Log, Log);
try
{
context.Log = temporal.Log();
result = func.Invoke(context);
}
finally
{
context.Log = temporal.Original();
}
return result;
}
...
class TemporalLogger
{
public static TemporalLogger Create(string message, TextWriter originalLog , ILog withLogger)
{
return withLogger.IsDebugEnabled
? new TemporalLogger{_msg = message, _builder = new StringBuilder(), _original = originalLog, _log = withLogger }
: new DumbLogger{_original = originalLog};
}
private string _msg;
private TextWriter _original;
private ILog _log;
private StringBuilder _builder;
public virtual TextWriter Log()
{
return new StringWriter(_builder);
}
public virtual TextWriter Original()
{
_log.DebugFormat("{0}:\n{1}", _msg, _builder);
var t = _original;
_original = null;
return t;
}
}
class DumbLogger : TemporalLogger
{
private TextWriter _original;
public override TextWriter Log() { return _original; }
public override TextWriter Original()
{
var t = _original;
this._original = null;
return t;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment