【发布时间】:2018-04-11 18:07:50
【问题描述】:
我有一个执行一堆 SQL 命令的业务流程。我想将这些sql命令“堆叠”在一个堆栈中,并在发生异常时将它们写入DB,让我用一些代码解释一下
public void BusinessMethod()
{
Log.Initialize(); // Clear the stack
try
{
Method1ThatExecutesSomeSQLs();
Method2ThatExecutesSomeSQLs();
Method3ThatExecutesSomeSQLs();
}
catch(Expection ex)
{
// if some exception occured in any Method above, them i write the log, otherwise, i dont want to log anything
Log.Write();
}
}
//Example of some Method that executes SQL's
public void Method1ThatExecutesSomeSQLs()
{
string sql = "select * from table";
ExecuteSQL(sql);
Log.StackUp("The following sql command was executed: " + sql); //Just stack up, dont write!
}
有谁知道 Log4Net 或 NLog 是否支持这种情况?如果没有,如何实现?
【问题讨论】:
-
这可能无济于事(因为它不是 Log4Net),但我建议使用具有您描述的功能的 NLog 而不是 Log4Net。
-
@Michael 你能指出描述这个功能的 NLog 页面吗?
-
嗯...我会,但我找不到它:( 不记得细节,很久以前了。但它的工作原理是这样的:你指定一个级别作为过滤条件,可以说错误。如果日志消息低于指定条件,则消息将被排队。如果级别等于或高于指定级别,则排队的消息和触发消息被记录。可能是缓冲和的组合过滤目标,但我找不到示例。我很确定我没有编写自定义代码来执行此操作...也许 SO 上的其他人可以提供示例...?