Где делать регулярные входы в asp.net-mvc? Вы должны использовать ELMAH? - PullRequest
13 голосов
/ 11 июля 2011

Я хочу начать регистрировать, когда элементы удаляются из моего кэша asp.net, и я пытаюсь выяснить, где и как это сделать.

Я вижу, что ELMAH рекомендуетсядля всей системы ведения журналов обработки исключений, но может (и должна) она также использоваться для регулярного инструментария регистрации, как в примере выше?

Ответы [ 2 ]

9 голосов
/ 11 июля 2011

Я думаю, что вы используете как ELMAH, так и Log4Net (или NLog).Использование обоих даст вам максимальную гибкость.Хотелось бы мне сейчас вдаваться в подробности, но я хотел бы, по крайней мере, ответить вам и сообщить, что использование ОБА - лучшее решение из того, что я испытал, и что я прочитал, что сделали другие.Пожалуйста, дайте мне знать, если вам нужны объяснения и т.д ..

5 голосов
/ 11 июля 2011

Мы были чисто магазином 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 может быть недоступен.

...