log4net: logging NHibernate and my own domain

I was used to use entlib for logging. But as I’m in favour of open source and because I am using NHibernate and Castle ActiveRecord in my applications, decided to use log4net instead. So found a good article about it, and enabled it for my application. But the problem was a very huge log file was producing because of verbose logs from NHibernate.

I’ve been heard that log4net uses hierarchical loggers but did not have a good understanding of it. I was thinking that using hierarchical loggers I can omit NHibernate’s logs and instead show my application’s logs. My bad assumption about hierarchical loggers was that they should be defined in app.config/web.config as nested. Obviously this assumption was wrong. Hierarchical logger in log4net means that you define a root and define all loggers inside it directly. Hierarchy then is understood of “name” attribute of “logger” node. This just acts a C# namespaces. For example you can have “NHibernate” and “NHibernate.SQL”. The second one is a child of the first.

Following guides in this, this, this, this and this link helped me to build my own config that works greatly in my application:

  













type="log4net.Appender.FileAppender">







value="%d [%t] %-5p %c [%x] - %m%n" />
type="log4net.Appender.FileAppender"/>







value="%d [%t] %-5p %c [%x] - %m%n" />












داستان بی‌سوادی ما

مدت‌ها زور زدیم، صفحات خیلی زیادی را دستکاری کردیم، سعی کردیم همه Exceptionها را handle کنیم، زور زدیم که entlib را به کار بگیریم، کلی پز دادیم، … که چی؟ که برنامه ما یک Error Logging خیلی قوی دارد، که لازم نیست کاربر بیچاره مدام برای ما عکس خطا بفرستد و شرح خطا بدهد و… الحق هم که خیلی خوب توانستیم از مفهوم Error Logging استفاده کنیم و خطاهای به وجود آمده را دقیق بفهمیم. اما بعد از این همه زور زدن تازه فهمیدیم که می‌توانستیم در مورد بیشتر Exceptionها آنها را مدیریت نشده رها کرده و وظیفه logging را به ASP.NET Health Monitoring یا ELMAH بسپریم. واقعا که بی‌سوادی و بی‌اطلاعی از فناوری‌های روز چقدر کار ما (توسعه‌دهندگان، برنامه‌نویسان) را سخت کرده و زمان ساخت نرم‌افزار را افزایش می‌دهد. اصلا بیخود نیست که می‌گویند هزینه تولید در ایران بالاست. یکیش خود ما نرم‌افزاری‌ها!

شما فکر می‌کنید چند جای دیگر را می‌توانیم صرفا با کمی به روز بودن بهبود بخشیم؟