Мы были чисто магазином Log4Net, пока Log4net не прекратил регистрировать нас в производстве во многих случаях.Чтобы избежать этого, мы решили внедрить ELMAH для всего нашего приложения (даже для базовой регистрации).Мы не могли бы быть более довольны результатами, поскольку все наши операторы журнала появляются в одном месте, и больше нет текстовых файлов для обхода (если мы не хотели проходить XML-файлы).Мы сохранили в Log4Net еще одну итерацию, но в конце концов обнаружили, что она бесполезна, и полностью удалили ее из нашего приложения.
Я понимаю, почему вы можете захотеть использовать две разные каркасы ведения журналов для сайта,тем более, что ELMAH требует HttpContext, чтобы работать в полную силу.Однако мы нашли способ передать исключение в ELMAH без HttpContext:
/// <summary>
/// Main logger method that will log an exception and/or a message
/// </summary>
/// <param name="exception">Exception to log</param>
/// <param name="message">Message to log</param>
private static void Log(Exception exception, string message)
{
Error elmahError = exception != null ? new Error(exception) : new Error();
if (!string.IsNullOrWhiteSpace(message))
{
elmahError.Message = message;
}
Elmah.ErrorLog.GetDefault(null).Log(elmahError);
}
Тогда в вашем файле web.config вам просто нужно указать applicationName
:
<elmah>
<security allowRemoteAccess="1" />
<errorLog name="ELMAHLogger" applicationName="xxx" type="Elmah.XmlFileErrorLog, Elmah" logPath="~/ELMAH_Production_Logs" />
</elmah>
Опять же, я думаю, что Log4Net - это отличная система ведения журналов, и она работала у нас в течение ряда лет.Я считаю, что ELMAH проще использовать при поиске исключения, и приведенный выше код позволил нам использовать его в любом месте нашего приложения, где HttpContext может быть недоступен.