Какое наиболее эффективное и эффективное решение для ведения журнала для ASP.NET? - PullRequest
1 голос
/ 17 марта 2009

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

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

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

Ответы [ 3 ]

4 голосов
/ 17 марта 2009

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

1 голос
/ 17 марта 2009

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

Мы используем 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 буквально сбрасывает наши журналы отладки на пол, если нам это не нужно.

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

0 голосов
/ 17 марта 2009

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

...