我在母版页代码隐藏中动态添加自定义控件:
try
{
// Add custom sidenav menu control dynamically
SideNavMenu sidenav = new SideNavMenu();
tempPath = Request.RawUrl.ToLower();
path = tempPath.Contains(@"/sitename") ? tempPath.Substring(7) : tempPath;
sidenav.MenuPath = path;
menuPlaceHolder.Controls.Add(sidenav);
}
catch
{
// Handle this - custom error form and email
// Master page needs access to base page LogError method
}
这是带有ErrorLog()方法的基页,它实际上会生成一封电子邮件:
public partial class BasePage : System.Web.UI.Page
{
public void LogError(Exception error)
{
...
smtpClient.Send(message);
}
}
如何从母版页代码隐藏中调用ErrorLog?或者是否有更好的地方放置“常见”ErrorLog方法?有人可以建议正确的语法或更好的方法吗?
答案 0 :(得分:1)
将LogError
函数放在App_Code文件夹中的类中,并可能使其成为静态函数。如果它可以通过多个项目重用,那么将它放在一个单独的类库中。您的BasePage
课程没有业务实施记录错误和发送电子邮件的详细信息。请记住Separation of Concerns (SoC).
事实上,已经存在一个库来为您执行此操作,称为Elmah。
答案 1 :(得分:0)
我强烈推荐NLog用于您的目的。它允许可配置的日志记录,包括通过SMTP。您的代码如下:
using Nlog;
public partial class BasePage : System.Web.UI.Page
{
private static Logger bpLogger = LogManager.GetCurrentClassLogger();
public void LogError(Exception error)
{
bpLogger.LogException(
LogLevel.Error,
"ruh roh",
error
);
...
//smtpClient.Send(message);
}
}
因为NLog非常有效,所以您可以在登录时每页实例化一个私有静态Logger
对象。此外,记录器将自动记录它来自哪个类,并且各种配置选项允许您更改记录的位置,记录方式以及记录时间而不更改任何其他代码。
以下是通过SMTP发送错误的配置的链接,例如:
https://github.com/nlog/NLog/wiki/Mail-target
这是一个成熟的项目,已经存在了很长时间,并且随着您的日志记录需求的增长,可以与您的项目一起成长。