۱۳۸۹/۱۰/۰۱

NHibernate 3.0 و عدم وابستگي مستقيم به Log4Net


اولين موردي كه پس از دريافت NHibernate 3.0 ممكن است به چشم بخورد، نبود اسمبلي Log4Net است. مطابق درخواست‌هاي كاربران، ارجاع مستقيم به اين كتابخانه حذف شده و با يك اينترفيس عمومي به نام IInternalLogger جايگزين گشته است (قرار گرفته در فضاي نام NHibernate.Logging). به اين صورت مي‌توان از انواع و اقسام كتابخانه‌هاي ثبت وقايع نوشته شده براي دات نت استفاده كرد؛ مانند: log4net، Nlog، EntLib Logging و غيره.
البته لازم به ذكر است كه همان روش قبلي استفاده از Log4Net هنوز هم پشتيباني مي‌شود (بدون نياز به تغيير خاصي در كدهاي خود)، زيرا پياده سازي اينترفيس جديد IInternalLogger براي استفاده از آن به صورت پيش فرض توسط NHibernate انجام شده است.

يك مثال:

كتابخانه‌ي سورس باز Common.Logging واقع شده در سورس فورج، در واقع يك logging abstraction framework است. به اين معنا كه تا به حال كتابخانه‌‌هاي ثبت وقايع مختلف و متعددي براي دات نت فريم ورك نوشته شده است و هر كدام راه و روش و پياده سازي خاص خود را دارند. كتابخانه‌ي Common.Logging لايه‌اي است عمومي بر روي تمام اين كتابخانه‌ها مانند Log4Net، Enterprise Library Logging ، Nlog و غيره كه برنامه‌ي شما را از وابستگي مستقيم به هر كدام از موارد ذكر شده رها مي‌سازد.
اكنون با توجه به وجود اينترفيس IInternalLogger در NHibernate 3.0 ، تنها كافي است اين اينترفيس جهت استفاده از كتابخانه‌ي Common.Logging پياده سازي شود (abstraction اندر abstraction !). البته نيازي نيست اينكار انجام شود، زيرا پيشتر توسط پروژه‌ي NHibernate.Logging در سايت كدپلكس اينكار صورت گرفته است.
بنابراين تنها كاري كه بايد انجام داد اين است كه :
الف) ارجاعاتي را به اسمبلي‌هاي Common.Logging.dll (واقع در سورس فورج) و NHibernate.Logging.CommonLogging.dll (واقع در كدپلكس) به پروژه‌ي خود اضافه كنيد.
ب) ارجاعي را به اسمبلي كتابخانه‌ي ثبت وقايع مورد نظر خود نيز بايد اضافه نمائيد (مثلا NLog).
ج) سپس بايد چند سطر زير را به فايل app.config خود اضافه كنيد:

<appSettings>
<add key="nhibernate-logger"
value="NHibernate.Logging.CommonLogging.CommonLoggingLoggerFactory, Hibernate.Logging.CommonLogging"/>
</appSettings>

NHibernate.Logging.CommonLogging.dll وقايع داخلي NHibernate را با پياده سازي IInternalLogger به Common.Logging.dll منتقل مي‌كند. سپس Common.Logging.dll اين وقايع را به زبان كتابخانه‌ي ثبت وقايع مورد نظر ترجمه خواهد كرد.

اطلاعات بيشتر: (+)