Elmah 应用名称配置
Elmah Application Name Configuration
我想使用 Elmah 将来自多个客户的 ASP.net Web 表单应用程序的错误记录到中央错误数据库,每个错误都使用唯一的应用程序名称记录。
我知道这可以在 web.config 的 elmah.errorLog.applicationName
属性中轻松设置,但我们所有的客户都有标准的 web.config 文件,每个系统在 [=] 中都有独特的设置web.config.
中的 configSource
或 file
属性引用的 35=] 和 connectionStrings.config 文件
由于web.config中的elmah
sectionGroup
不允许使用file
或configSource
,我如何设置applicationName
Elmah 对每个系统都是唯一的?
我不想以编程方式设置 web.config 中的属性,因为将来 web.config 被覆盖时它可能会丢失。
我试过在Global.asax.Application_Start()
中设置ErrorLog.ApplicationName 属性,像这样,但是我设置的值被忽略了。
Dim logger As Elmah.ErrorLog = Elmah.ErrorLog.GetDefault(Nothing)
logger.ApplicationName = "Testing 123"
任何建议将不胜感激,因为 Elmah 满足我们的所有需求,我们只需要能够唯一地识别它在中央错误数据库中记录的错误。
如果您的部署系统允许为每个客户设置单独的应用程序,您可以在 ELMAH 中使用错误过滤功能,使用应用程序设置中的应用程序名称丰富所有错误。查看此博客 post 了解详细信息:Enrich ELMAH errors using error filtering hook。
简而言之,您消除了所有错误并记录了一个新错误,包括配置中的应用程序名称:
void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs args)
{
var httpContext = args.Context as HttpContext;
if (httpContext != null)
{
var error = new Error(args.Exception, httpContext);
error.ApplicationName = ConfigurationManager.AppSettings["AppName"];
ErrorLog.GetDefault(httpContext).Log(error);
args.Dismiss();
}
}
在发现 this SO post 之后,我现在已经成功地为 Elmah 设置了外部配置文件。
web.config
的 elmah
部分如下所示:
<elmah>
<errorLog configSource="Config\Elmah\elmahErrorLog.config" />
<errorMail configSource="Config\Elmah\elmahErrorMail.config" />
<errorFilter configSource="Config\Elmah\elmahErrorFilter.config" />
<security allowRemoteAccess="false" />
</elmah>
其中内容如下; elmahErrorLog.config:
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ErrorLog" applicationName="My Unique Application Name" />
elmahErrorFilter.config
(此配置阻止本地主机请求的电子邮件通知):
<errorFilter>
<test>
<and>
<equal binding="Context.Request.IsLocal" value="True" type="Boolean" />
<regex binding="FilterSourceType.Name" pattern="mail" />
</and>
</test>
</errorFilter>
elmahErrorMail.config
:
<errorMail from="foo"
to="foo"
subject="My Exception - {0}"
async="false"
smtpServer="foo"
userName="foo"
password="foo">
</errorMail>
我想使用 Elmah 将来自多个客户的 ASP.net Web 表单应用程序的错误记录到中央错误数据库,每个错误都使用唯一的应用程序名称记录。
我知道这可以在 web.config 的 elmah.errorLog.applicationName
属性中轻松设置,但我们所有的客户都有标准的 web.config 文件,每个系统在 [=] 中都有独特的设置web.config.
configSource
或 file
属性引用的 35=] 和 connectionStrings.config 文件
由于web.config中的elmah
sectionGroup
不允许使用file
或configSource
,我如何设置applicationName
Elmah 对每个系统都是唯一的?
我不想以编程方式设置 web.config 中的属性,因为将来 web.config 被覆盖时它可能会丢失。
我试过在Global.asax.Application_Start()
中设置ErrorLog.ApplicationName 属性,像这样,但是我设置的值被忽略了。
Dim logger As Elmah.ErrorLog = Elmah.ErrorLog.GetDefault(Nothing)
logger.ApplicationName = "Testing 123"
任何建议将不胜感激,因为 Elmah 满足我们的所有需求,我们只需要能够唯一地识别它在中央错误数据库中记录的错误。
如果您的部署系统允许为每个客户设置单独的应用程序,您可以在 ELMAH 中使用错误过滤功能,使用应用程序设置中的应用程序名称丰富所有错误。查看此博客 post 了解详细信息:Enrich ELMAH errors using error filtering hook。
简而言之,您消除了所有错误并记录了一个新错误,包括配置中的应用程序名称:
void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs args)
{
var httpContext = args.Context as HttpContext;
if (httpContext != null)
{
var error = new Error(args.Exception, httpContext);
error.ApplicationName = ConfigurationManager.AppSettings["AppName"];
ErrorLog.GetDefault(httpContext).Log(error);
args.Dismiss();
}
}
在发现 this SO post 之后,我现在已经成功地为 Elmah 设置了外部配置文件。
web.config
的 elmah
部分如下所示:
<elmah>
<errorLog configSource="Config\Elmah\elmahErrorLog.config" />
<errorMail configSource="Config\Elmah\elmahErrorMail.config" />
<errorFilter configSource="Config\Elmah\elmahErrorFilter.config" />
<security allowRemoteAccess="false" />
</elmah>
其中内容如下; elmahErrorLog.config:
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ErrorLog" applicationName="My Unique Application Name" />
elmahErrorFilter.config
(此配置阻止本地主机请求的电子邮件通知):
<errorFilter>
<test>
<and>
<equal binding="Context.Request.IsLocal" value="True" type="Boolean" />
<regex binding="FilterSourceType.Name" pattern="mail" />
</and>
</test>
</errorFilter>
elmahErrorMail.config
:
<errorMail from="foo"
to="foo"
subject="My Exception - {0}"
async="false"
smtpServer="foo"
userName="foo"
password="foo">
</errorMail>