【发布时间】:2017-10-25 00:11:55
【问题描述】:
我需要通过用户点击中的代码所采用的路径来编写日志消息。我举个例子:
想象一下经典示例:用户单击视图中的按钮,从业务层调用代码,从数据访问层调用代码,将数据返回给业务,返回视图。 我想通过这些层编写我的日志消息。启动整个过程的调用方方法(在视图中)将收到完整的消息。这里有一些代码示例只是为了帮助我解释我想要实现的目标。
public void ViewMethod()
{
try
{
BussinessMethod();
}
catch (Exception ex)
{
Logger.Enqueue("exception occured");
Logger.Print();
}
}
public void BussinessMethod()
{
try
{
DataAcessMethod();
}
catch (Exception ex)
{
Logger.Enqueue("exception occured in the bussiness method")
}
}
public void DataAcessMethod()
{
try
{
// some code that executes an SQL command
// Log the SQL Command 1
// Log the SQL Command 2 and do on...
}
catch (Exception ex)
{
Logger.Enqueue("Error occurred, sqls executed are ...", sqlExecuted);
}
}
EDIT: 我需要它的原因是我需要记录整个过程中执行的所有 SQL。如果整个过程中的任何一点发生错误,都不会警告用户,我需要尽可能多地存储信息,因为支持技术人员稍后会需要它。
我的问题是,是否有任何设计模式来开发它或跨“层”传递 Logger 引用是否可以接受?
【问题讨论】:
-
您可以创建一个上下文类并在线程上设置它。或者,一些可以是线程静态的属性。但实际上,为什么不直接在
ViewMethod中捕获异常?可以说,DataAcessMethod失败了。在BussinessMethod中继续执行甚至没有意义。在BussinessMethod中尝试捕获与其代码相关的异常。并且对从数据层传播的异常不做任何事情 -
恕我直言,
Logger(无论您使用哪个)不只是用于例外 - 它们具有“级别”,其中之一是Info(信息日志记录)。 -
您关心堆栈跟踪还是只想记录消息?
-
@T.S.我这样提出问题的原因是我想记录整个过程中执行的sql。
-
@JohanP 堆栈跟踪对我非常有用。
标签: c# .net exception exception-handling