Какое самое эффективное и эффективное решение для ведения журнала для ASP.NET?

Я хочу добавить ведение журнала на веб-сайт ASP.NET 2.0, который я унаследовал от предыдущего разработчика. Приложение просто выдает исключения, когда они возникают, и нет записей о финансовых транзакциях, которые выполнялись.

Я смотрел на Log4net, который я использовал в прошлом, а также на NLog и BitFactory. Что мне действительно нужно знать, так это как лучше всего реализовать каркас ведения журналов в моем приложении, которое работает внутри SharePoint. Мне нужно что-то, что не застревает в приложении.

Существует ли общепринятый шаблон ведения журнала для ASP.NET? Как вы реализовали регистрацию на своем веб-сайте?

3 ответа

Решение

Системой, которую я использую во многих моих приложениях ASP.NET, является ELMAH (модули регистрации ошибок и обработчики). Не знаю, будет ли он предлагать все функции, которые вы хотите, но что мне действительно нравится в нем, так это получение желтого экрана смерти и отслеживание стека по электронной почте при возникновении необработанного исключения.

Любое ведение журнала будет медленнее, чем отсутствие входа. Ведение журнала - это не производительность, а надежность и восстановление. Лучшая структура ведения журнала - это та, которую вы используете религиозно, а худшая - та, которую вы не используете.

Мы используем log4net в наших приложениях, никаких нареканий и никогда не оглядывались назад. Есть вещи, которые я бы хотел настроить? Конечно. Но мы не занимаемся ведением журналов, мы пишем приложения для клиентов, поэтому нам нужна надежная * система ведения журналов, и log4net подходит.

Сказав это, мы обертываем наши журналы отладки в проверку для ведения журнала отладки. И в основных местах только мы вышли за рамки типичного if (log.isDebugEnabled) проверьте и добавьте в нашу собственную статическую переменную проверку каждого оператора if. В верхней части модулей, где мы действительно заботимся о производительности (в основном это части нашего ORM или других элементов инфраструктуры), мы имеем

#region Log4Net
const string c_EnableDebugLogging = "com.techsoftinc.BusinessObjectsCore.EnableDebugLogging";
static readonly bool _EnableDebugLogging = Convert.ToBoolean(ConfigurationManager.AppSettings[c_EnableDebugLogging] ?? "false");

static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

//Do we support ultrafast logging? See What is REALLY the FASTEST way of (not) logging? in http://logging.apache.org/log4net/release/faq.html
static bool debugLogging
{
   get { return _EnableDebugLogging && log.IsDebugEnabled; }
}
#endregion

а затем, когда мы хотим отладить, мы имеем (например)

if (debugLogging)
   log.DebugFormat("Executing sql: {0}", sql);

Если _EnableDebugLogging имеет значение false, JIT свернет функцию debugLogging до false а затем удалить весь if (debugLogging) утверждение, так как оно никогда не может быть правдой. JIT буквально сбрасывает наши журналы отладки на пол, если нам это не нужно.

* надежный == хорошо работает во всех ситуациях, с которыми мы столкнулись. Надежный не означает истинно надежный в компьютерном понимании этого термина.

Лучшее, что я нашел, - это log4.net. Мы используем его для регистрации необработанных ошибок и для отладки ASP.NET. Он маленький и не вылетает. Мы используем его на довольно большом сайте, и я бы использовал его снова.

Другие вопросы по тегам