CodeGym /جاوا بلاگ /Random-SD /لاگنگ: ڇا، ڪيئن، ڪٿي، ۽ ڇا سان؟
John Squirrels
سطح
San Francisco

لاگنگ: ڇا، ڪيئن، ڪٿي، ۽ ڇا سان؟

گروپ ۾ شايع ٿيل
هيلو هرڪو CodeGym ڪميونٽي ۾! لاگنگ: ڇا، ڪيئن، ڪٿي، ۽ ڇا سان؟  - 1 اڄ اچو ته لاگنگ بابت ڳالهايون:
  1. اهو ڇا آهي، اهو ڇو موجود آهي، جڏهن توهان ان کي استعمال ڪرڻ گهرجي، جڏهن توهان کي ان کان بچڻ گهرجي.
  2. جاوا ۾ ڪهڙا لاگنگ لاڳو ڪرڻ موجود آهن، ۽ توهان کي انهن سڀني لاگنگ اختيارن سان ڇا ڪرڻ گهرجي.
  3. ۽ لاگ سطح. اسان بحث ڪنداسين ته ضميمه ڇا آهي ۽ ان کي صحيح طريقي سان ترتيب ڪيئن ڪجي.
  4. لاگنگ نوڊس ۽ انهن کي صحيح طريقي سان ترتيب ڏيڻ لاءِ ته جيئن هر شي ڪم ڪري جيئن اسان چاهيون ٿا.
هي مواد هڪ وسيع سامعين لاء آهي. اهو هر ڪنهن لاءِ واضح ٿي ويندو ته صرف جاوا کي ڄاڻڻ سان گڏو گڏ اهي ماڻهو جيڪي اڳ ۾ ئي ڪم ڪري رهيا آهن پر صرف دريافت ڪيو آهي logger.info("log something"); اچو ته وڃو!

توهان کي لاگنگ جي ضرورت ڇو آهي؟

اچو ته ڪجهه حقيقي ڪيسن تي نظر رکون جتي لاگنگ هڪ مسئلو حل ڪري سگهي ٿي. هتي منهنجي ڪم مان هڪ مثال آهي. اهڙا نقطا آهن جتي هڪ ايپليڪيشن ٻين خدمتن سان ضم ٿي وڃي ٿي. مان انهن نقطن تي لاگنگ استعمال ڪريان ٿو هڪ قسم جو "alibi" قائم ڪرڻ لاءِ : جيڪڏهن انضمام ڪم نه ڪري رهيو آهي، ته پوءِ اهو سمجهڻ آسان ٿي وڃي ٿو ته ڪهڙي طرف مسئلو آهي. اهو پڻ ضروري آهي ته ڊيٽابيس ۾ محفوظ ڪيل اهم معلومات کي لاگ ان ڪرڻ لاء. مثال طور، هڪ منتظم صارف جي تخليق. اهو خاص طور تي اهڙي قسم جو آهي جيڪو لاگ ان ڪرڻ سٺو هوندو.

جاوا ۾ لاگ ان ٿيڻ جا اوزار

جاوا ۾ مشهور لاگنگ حلن مان، اسان هيٺ ڏنل نمايان ڪري سگھون ٿا:
  • لاگ 4 جي
  • JUL — java.util.logging
  • JCL - Jakarta Commons لاگنگ
  • لاگ بيڪ
  • SLF4J - جاوا لاءِ سادي لاگنگ جو منهن
اسان انهن مان هر هڪ جو جائزو پيش ڪنداسين. ان کان پوء اسان هڪ عملي بحث جي بنياد جي طور تي slf4j - log4j پابند ڪنداسين . اهو هاڻي عجيب لڳي سگهي ٿو، پر پريشان نه ڪريو: مضمون جي آخر تائين، سڀ ڪجهه واضح ٿي ويندو.

System.err.println

شروعات ۾، اتي System.err.println (ڪنسول تي لاگ انٽريز ڏيکاريندي). اڄ به، هي ٽيڪنڪ استعمال ڪيو ويندو آهي جلدي لاگ ان ڪرڻ لاءِ جڏهن ڊيبگنگ. يقينن، هتي بحث ڪرڻ لاء ڪا به سيٽنگون نه آهن، تنهنڪري صرف هن طريقي کي ياد رکو ۽ اسان اڳتي وڌنداسين.

لاگ 4 جي

هي هڪ مڪمل حل آهي جنهن کي ڊولپرز ضرورت کان ٻاهر پيدا ڪيو. نتيجو هڪ واقعي دلچسپ اوزار آهي جيڪو توهان استعمال ڪري سگهو ٿا. مختلف حالتن جي ڪري، اهو حل JDK ۾ ختم نه ٿيو، هڪ حقيقت جيڪا سڄي ڪميونٽي کي پريشان ڪري ٿي. Log4j وٽ ٺاھ جوڙ جا اختيار آھن جيڪي توھان کي اجازت ڏين ٿا لاگنگ ان com.example.typeپيڪيج ۾ ۽ ان کي بند ڪريو com.example.type.genericذيلي پيڪيج ۾. اهو ممڪن بڻائي ٿو ته جلدي ڪوڊ خارج ڪرڻ لاء جيڪو لاگ ان ٿيڻ جي ضرورت ناهي. هتي اهو نوٽ ڪرڻ ضروري آهي ته Log4j جا ٻه ورجن آهن: 1.2.x ۽ 2.xx، ۽ اهي هڪ ٻئي سان مطابقت نٿا رکن . Log4j شامل ڪيو ضمير جا تصور (هڪ اوزار لاگ لکڻ لاءِ استعمال ڪيو ويندو) ۽ ترتيب (لاگ فارميٽنگ). اهو توهان کي صرف لاگ ان ڪرڻ جي اجازت ڏئي ٿو جيڪو توهان کي گهربل آهي ۽ انهي کي لاگ ان ڪريو جيئن توهان کي ضرورت آهي. اسان ٿوري دير کان پوء ضمير بابت وڌيڪ ڳالهائينداسين.

JUL — java.util.logging

هن حل جي اهم فائدن مان هڪ اهو آهي ته JUL JDK (جاوا ڊولپمينٽ کٽ) ۾ شامل آهي. بدقسمتي سان، جڏهن اها ترقي ڪئي وئي هئي، ان جي ٺاهيندڙن ان کي مشهور Log4j افاديت تي نه، بلڪه IBM کان هڪ حل ڪيو. ان فيصلي جا نتيجا به نڪتا. حقيقت اها آهي ته ڪو به هاڻي JUL استعمال نٿو ڪري. JUL ۾ لاگ ليول مختلف آھن جيڪي Logback، Log4j ۽ Slf4j وٽ آھن. اهو انهن لاءِ هڪ ٻئي کي سمجهڻ ڏکيو بڻائي ٿو. هڪ logger ٺاهڻ ۾ گهٽ يا گهٽ هڪجهڙائي آهي. هن کي ڪرڻ لاء، توهان کي هڪ درآمد ڪرڻ جي ضرورت آهي:
java.util.logging.Logger log = java.util.logging.Logger.getLogger(LoggingJul.class.getName());
ڪلاس جو نالو پاس ڪيو ويو آهي، تنهنڪري اسان ڄاڻون ٿا ته اسان جي لاگنگ ڪٿان ايندي. جاوا 8 سان شروع ڪندي، توھان پاس ڪري سگھو ٿا Supplier<String>. هي اسان جي مدد ڪري ٿو پڙهڻ ۽ هڪ لڪير ٺاهڻ ۾ صرف جڏهن اسان کي واقعي ان جي ضرورت آهي، بلڪه هر وقت جي ڀيٽ ۾، جيئن اڳ ۾ ڪيس هو. صرف جاوا 8 جي ڇڏڻ سان ڊولپرز آخرڪار اهم مسئلا حل ڪيا ۽ JUL کي واقعي قابل استعمال بڻايو. يعني، هڪ Supplier<String> msgSupplierپيٽرول سان طريقا، جيئن هيٺ ڏيکاريل آهي:
public void info(Supplier<String> msgSupplier) {
   log(Level.INFO, msgSupplier);
}

JCL - Jakarta Commons لاگنگ

ڇاڪاڻ ته هڪ ڊگهي عرصي تائين لاگنگ جي حوالي سان ڪو به انڊسٽري معيار نه هو ۽ ڪيترن ئي ماڻهن پنهنجا پنهنجا ڪسٽم لاگرز ٺاهيا، JCL کي ڇڏڻ جو فيصلو ڪيو ويو، هڪ عام لفافي جيڪو ٻين جي مٿان استعمال ڪري سگهجي ٿو. ڇو؟ ڪڏهن ڪڏهن پروجيڪٽ ۾ شامل ٿيل انحصار پروجيڪٽ ۾ هڪ کان مختلف لاگر استعمال ڪيو. انهي جي ڪري، انهن کي پروجيڪٽ ۾ شامل ڪيو ويو منتقلي انحصار جي طور تي، ۽ اهو حقيقي مسئلا پيدا ڪيو جڏهن ان کي گڏ ڪرڻ جي ڪوشش ڪئي وئي. بدقسمتي سان، لفافي بلڪل فنڪشنل نه هو ۽ ڪجهه به شامل نه ڪيو. اهو شايد آسان هوندو جيڪڏهن هرڪو استعمال ڪري JCL. پر اهو نه ٿيو آهي، تنهنڪري JCL استعمال ڪرڻ هن وقت بهترين خيال ناهي.

لاگ بيڪ

اوپن سورس رستو ٿلهو آهي... ساڳي ڊولپر جنهن لکيو Log4j پڻ Logback کي جانشين لاگنگ فريم ورڪ طور لکيو. اهو ساڳيو خيال تي ٻڌل هو Log4j. لاگ بيڪ ۾ فرق آهن:
  • بهتر ڪارڪردگي
  • شامل ڪيو اصلي سپورٽ Slf4j لاءِ
  • وڌايل فلٽرنگ جا اختيار
ڊفالٽ طور، لاگ بيڪ ڪنهن به ترتيب جي ضرورت ناهي، ۽ سڀني واقعن کي DEBUG سطح ۽ اعلي تي رڪارڊ ڪري ٿو. جيڪڏهن توهان کي ڪجهه ڪسٽمائيزيشن جي ضرورت آهي، توهان حاصل ڪري سگهو ٿا حاصل ڪري سگهو ٿا هڪ XML ترتيب ذريعي:
<configuration>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>app.log</file>
        <encoder>
            <pattern>%d{HH:mm:ss,SSS} %-5p [%c] - %m%n</pattern>
        </encoder>
    </appender>
    <logger name="org.hibernate.SQL" level="DEBUG" />
    <logger name="org.hibernate.type.descriptor.sql" level="TRACE" />
    <root level="info">
        <appender-ref ref="FILE" />
    </root>
</configuration>

SLF4J - جاوا لاءِ سادي لاگنگ جو منهن

ڪجهه وقت ۾ 2006 ۾، Log4j جي هڪ باني پيءُ پراجيڪٽ کي ڇڏي ڏنو ۽ Slf4j (Simple Logging Facade for Java)، Log4j، JUL، Common-logging، ۽ Logback لاءِ هڪ ريپر ٺاهي. جئين توهان ڏسي سگهو ٿا، اسان هڪ ريپر مٿان هڪ لفافي ٺاهڻ جي نقطي تي ترقي ڪئي آهي... هن صورت ۾، اهو ٻن حصن ۾ ورهايل آهي: هڪ API جيڪو ايپليڪيشن ۾ استعمال ڪيو ويندو آهي، ۽ هڪ عمل درآمد جيڪو الڳ سان شامل ڪيو ويندو آهي. هر قسم جي لاگنگ لاء انحصار. مثال طور، slf4j-log4j12.jar۽ slf4j-jdk14.jar. توهان کي درست عمل درآمد ڪرڻ جي ضرورت آهي ۽ اهو ئي آهي: توهان جو سڄو منصوبو ان کي استعمال ڪندو. Slf4j سڀني جديد خصوصيتن کي سپورٽ ڪري ٿو، جهڙوڪ لاگنگ لاءِ فارميٽ اسٽرنگ. اڳي، اهڙو مسئلو هو. اچو ته چوندا آهيون ته اسان هن طرح هڪ لاگ انٽري ٺاهي:
log.debug("User " + user + " connected from " + request.getRemoteAddr());
ڪنٽينشن آپريٽر جي ڪري، userاعتراض خاموشيءَ سان اسٽرنگ بڻجي وڃي ٿو user.toString(). اهو وقت وٺندو آهي ۽ سسٽم کي سست ڪري ٿو. ۽ اهو ٺيڪ ٿي سگهي ٿو جيڪڏهن اسان ايپليڪيشن کي ڊيبگ ڪري رهيا آهيون. اسان مسئلن کي منهن ڏيڻ شروع ڪندا آهيون جيڪڏهن هن طبقي لاءِ لاگ ليول INFO يا وڌيڪ آهي. ٻين لفظن ۾، اسان کي هن لاگ انٽري (INFO يا اعليٰ لاءِ) نه لکڻ گهرجي، ۽ اسان کي اسٽرنگ ڪنٽينشن استعمال نه ڪرڻ گهرجي. نظريي ۾، لاگنگ لائبريري پاڻ کي پتو ڏيڻ گهرجي. جيئن ته اهو ٿئي ٿو، اهو نڪتو Log4j جي پهرين ورزن ۾ سڀ کان وڏو مسئلو. اهو هڪ مهذب حل نه پهچايو، پر ان جي بدران هن وانگر ڪجهه ڪرڻ جي صلاح ڏني:
if (log.isDebugEnabled()) {
    log.debug("User " + user + " connected from " + request.getRemoteAddr());
}
اھو آھي، لاگنگ لاء ڪوڊ جي ھڪڙي لائن جي بدران، انھن 3 لکڻ جي صلاح ڏني! لاگنگ کي ڪوڊ تبديلين کي گھٽائڻ گھرجي، ۽ ٽي لائينون واضح طور تي ان عام طريقي جي ڀڃڪڙي ڪن ٿيون. Slf4j JDK ۽ API سان مطابقت وارو مسئلو نه هو، تنهنڪري هڪ سٺو حل فوري طور تي ظاهر ٿيو:
log.debug("User {} connected from {}", user, request.getRemoteAddr());
جتي {}دليلن لاءِ جڳھ رکندڙن کي بيان ڪري ٿو طريقي سان منظور ٿيل. اھو آھي، پھريون {}سان ملندڙ جلندڙ آھي user، ۽ ٻيو {}سان ملندو آھي request.getRemoteAddr(). ائين ڪرڻ سان، اسان صرف اسٽرنگ ڪنٽينشن انجام ڏينداسين جڏهن لاگ ليول اسان کي لاگ انٽري لکڻ جي ضرورت آهي. ان کان پوء، Sjf4j تيزيء سان مقبوليت ۾ وڌڻ لڳو. في الحال، اهو بهترين حل آهي. انهي جي مطابق، اچو ته slf4j-log4j12بائنڊنگ استعمال ڪندي لاگنگ تي هڪ نظر رکون.

ڇا لاگ ان ٿيڻ جي ضرورت آهي

يقينا، توهان کي هر شي کي لاگ ان نه ڪرڻ گهرجي. اهو اڪثر ضروري ناهي ۽ ڪڏهن ڪڏهن خطرناڪ به. مثال طور، جيڪڏهن توهان ڪنهن جي ذاتي ڊيٽا کي لاگ ان ڪريو ٿا ۽ اهو ڪنهن به طرح لڪي وڃي ٿو، اتي حقيقي مسئلا هوندا، خاص طور تي مغربي مارڪيٽن تي مرکوز منصوبن ۾. پر اتي پڻ شيون آھن جيڪي توھان کي ضرور لاگ ان ٿيڻ گھرجي :
  1. ايپليڪيشن جي شروعات / پڇاڙي. اسان کي ڄاڻڻ جي ضرورت آهي ته ڇا ايپليڪيشن واقعي شروع ٿي ۽ ختم ٿي وئي جيئن توقع ڪئي وئي.
  2. سيڪيورٽي مسئلا. هتي اهو سٺو ٿيندو ته لاگ ان ڪوششون ڪنهن جي پاسورڊ جو اندازو لڳائڻ، مثالن ۾ جڏهن منتظم سائن ان ڪن، وغيره.
  3. ڪجهه ايپليڪيشن رياستون . مثال طور، ڪاروباري عمل ۾ هڪ رياست کان ٻئي ڏانهن منتقلي.
  4. لاڳاپيل لاگ سطح سان گڏ ڪجهه ڊيبگ معلومات .
  5. ڪجهه SQL اسڪرپٽ. حقيقي دنيا جا ڪيس آهن جڏهن اهو ضروري آهي. پر ٻيهر، مهارت سان لاگ سطح کي ترتيب ڏيڻ سان، توهان شاندار نتيجا حاصل ڪري سگهو ٿا.
  6. هلندڙ سلسلا لاگ ان ٿي سگهن ٿا جڏهن تصديق ڪن ته شيون صحيح ڪم ڪري رهيون آهن.

لاگنگ ۾ مشهور غلطيون

هتي ڪيتريون ئي nuances آهن، پر اسان چند عام غلطين جو خاص ذڪر ڪنداسين:
  1. زيادتي لاگنگ. توهان کي هر قدم کي لاگ ان نه ڪرڻ گهرجي جيڪا نظرياتي طور تي اهم ٿي سگهي ٿي. هتي انگن جو هڪ سٺو اصول آهي: لاگ ان لوڊ جي 10٪ کان وڌيڪ نه هجڻ گهرجي. ٻي صورت ۾، ڪارڪردگي جا مسئلا هوندا.
  2. سڀني ڊيٽا کي ھڪڙي فائل ۾ لاگ ان ڪريو. ڪجهه نقطي تي، اهو لاگ پڙهڻ/لکڻ تمام ڏکيو ٿيندو، حقيقت جو ذڪر نه ڪرڻ ته ڪجهه سسٽم فائل جي سائيز تي حدون آهن.
  3. غلط لاگ سطح استعمال ڪندي. هر لاگ سطح تي واضح حدون آهن، ۽ انهن جو احترام ڪيو وڃي. جيڪڏهن هڪ حد واضح ناهي، توهان هڪ معاهدو ڪري سگهو ٿا ته ڪهڙي سطح کي استعمال ڪجي.

لاگ سطح

x: ڏسڻ ۾ اچي ٿو
فاٽا ERROR خبردار ڄاڻ ڊيبگ TRACE سڀ
بند
فاٽا x
ERROR x x
خبردار x x x
ڄاڻ x x x x
ڊيبگ x x x x x
TRACE x x x x x x
سڀ x x x x x x x
لاگ سطح ڇا آهن؟ ڪنهن به طرح لاگ انٽريز جو هڪ درجو ترتيب ڏيڻ لاءِ، ڪجهه ڪنوينشن ۽ حد بنديون ضروري آهن. اهو ڇو ته لاگ سطح متعارف ڪرايو ويو. سطح اپليڪيشن ۾ مقرر ڪئي وئي آهي. جيڪڏهن هڪ داخلا هڪ مخصوص سطح کان هيٺ آهي، پوء اهو لاگ ان نه آهي. مثال طور، اسان وٽ لاگس آھن جيڪي اسين استعمال ڪندا آھيون جڏھن ايپليڪيشن کي ڊيبگ ڪندي. عام آپريشن دوران (جڏهن اپليڪيشن ان جي گهربل مقصد لاء استعمال ڪيو ويندو آهي)، اهڙن لاگن جي ضرورت ناهي. تنهن ڪري، لاگ سطح ڊيبگنگ جي ڀيٽ ۾ وڌيڪ آهي. اچو ته ڏسو لاگ سطح تي Log4j استعمال ڪندي. JUL کان علاوه، ٻيا حل ساڳيا لاگ سطح استعمال ڪن ٿا. هتي اهي گهٽجڻ واري ترتيب ۾ آهن:
  • بند: ڪا به لاگ انٽريون رڪارڊ ٿيل نه آهن؛ هر شيء کي نظرانداز ڪيو ويو آهي.
  • FATAL: هڪ غلطي جيڪا ايپليڪيشن کي هلائڻ کان روڪي ٿي. مثال طور، "JVM ميموري جي غلطي کان ٻاهر".
  • ERROR: هن سطح تي غلطيون ظاهر ڪن ٿيون مسئلن کي حل ڪرڻ جي ضرورت آهي. غلطي مڪمل طور تي ايپليڪيشن کي روڪي نه ٿو. ٻيون درخواستون صحيح ڪم ڪري سگھن ٿيون.
  • خبردار: لاگ انٽرنس جيڪي ڊيڄاريندڙ جي نمائندگي ڪن ٿا. ڪجهه اڻڄاتل ٿيو، پر سسٽم کي منهن ڏيڻ جي قابل هئي ۽ درخواست کي پورو ڪيو
  • INFO: لاگ انٽريز جيڪي ظاهر ڪن ٿيون ايپليڪيشن ۾ اهم ڪارناما. اهي غلطيون يا ڊيڄاريندڙ نه آهن. اهي متوقع سسٽم واقعا آهن.
  • DEBUG: لاگ انٽرن کي ايپليڪيشن کي ڊيبگ ڪرڻ جي ضرورت آهي. انهي ڳالهه کي يقيني بڻائڻ لاءِ ته ايپليڪيشن بلڪل ائين ئي ڪري ٿي جيڪا توقع ڪئي وئي آهي، يا ايپليڪيشن پاران ڪيل عملن کي بيان ڪرڻ لاءِ، يعني "داخل ٿيل طريقو1".
  • TRACE: ڊيبگنگ لاءِ هيٺين ترجيح لاگ انٽريون. گھٽ ۾ گھٽ لاگ ان سطح.
  • ALL: ايپليڪيشن جي سڀني لاگ انٽرين کي لکڻ لاءِ لاگ ليول.
INFO لاگ ليول ۾ ائپليڪيشن ۾ ڪٿي چالو ڪيو ويو آهي، پوءِ INFO کان FATAL تائين هر ليول لاءِ داخلائون لاگ ان ٿينديون. جيڪڏهن FATAL لاگ ليول مقرر ڪيو ويو آهي، صرف ان ليول سان لاگ انٽريون لکيون وينديون.

لاگنگ ۽ لاگ موڪلڻ: ضمير

اچو ته غور ڪريون ته هي سڀ ڪيئن ڪم ڪري ٿو جڏهن اسان Log4j استعمال ڪريون ٿا، جيڪو لاگس لکڻ/ موڪلڻ جا ڪافي موقعا فراهم ڪري ٿو:
  • فائل ۾ لکڻ لاء -DailyRollingFileAppender
  • ڪنسول تي معلومات لکڻ لاءِ-ConsoleAppender
  • ڊيٽابيس ۾ لاگ لکڻ لاءِ -JDBCAppender
  • TCP/IP تي لاگ موڪلڻ جو انتظام ڪرڻ -TelnetAppender
  • انهي کي يقيني بڻائڻ لاءِ ته لاگنگ ڪارڪردگي تي منفي اثر نه وجهي.AsyncAppender
هتي ڪجھ وڌيڪ عمل آهن: هڪ مڪمل فهرست هتي موجود آهي . رستي جي ذريعي، جيڪڏهن توهان کي گهربل اپنڊر موجود ناهي، اهو ڪو مسئلو ناهي. توهان Appender انٽرفيس کي لاڳو ڪندي پنهنجو اپنڊر لکي سگهو ٿا ، جيڪو Log4j سپورٽ ڪري ٿو.

لاگنگ نوڊس

مظاهري جي مقصدن لاءِ، اسان استعمال ڪنداسين Slf4j انٽرفيس، لاگ 4j جي عمل سان. لاگر ٺاهڻ تمام سادو آهي: نالي ڪلاس ۾ MainDemo، جيڪو ڪجھ لاگنگ ڪندو، اسان کي ھيٺين کي شامل ڪرڻ جي ضرورت آھي:
org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(MainDemo.class);
اهو اسان لاءِ هڪ لاگر ٺاهيندو. لاگ انٽري ڪرڻ لاءِ، اتي ڪيترائي دستياب طريقا آھن جن جا نالا ظاهر ڪن ٿا ته ڪھڙي لاگ سطح استعمال ڪئي ويندي. مثال طور:
logger.trace("Method 1 started with argument={}", argument);
logger.debug("Database updated with script = {}", script);
logger.info("Application has started on port = {}", port);
logger.warn("Log4j didn't find the log4j.properties file. Please fix this.");
logger.error("Connection refused to host = {}", host);
جيتوڻيڪ اسان ڪلاس پاس ڪري رهيا آهيون، فائنل نالو ڪلاس جو پورو نالو آهي، بشمول پيڪيجز. اهو ڪيو ويو آهي انهي ڪري ته بعد ۾ توهان لاگنگ کي نوڊس ۾ ورهائي سگهو ٿا ۽ هر نوڊ لاءِ لاگنگ ليول ۽ اپنڊر ترتيب ڏئي سگهو ٿا. مثال طور، ڪلاس ۾ لاگر ٺاهي وئي com.github.romankh3.logginglecture.MainDemo. نالو لاگنگ نوڊس جي ھڪڙي ترتيب ڏيڻ لاء بنياد مهيا ڪري ٿو. مکيه نوڊ اعلي سطحي RootLogger آهي . هي اهو نوڊ آهي جيڪو پوري اپليڪيشن لاءِ سڀ لاگ انٽريون وصول ڪري ٿو. باقي نوڊس نمايان ڪري سگھجن ٿا جيئن ھيٺ ڏيکاريل آھي: لاگنگ: ڇا، ڪيئن، ڪٿي، ۽ ڇا سان؟  - 3ضمير مخصوص لاگنگ نوڊس لاءِ ترتيب ڏنل آھن. ھاڻي اسين log4j.properties فائل کي ڏسڻ وارا آھيون ھڪڙو مثال ڏسڻ لاءِ انھن کي ڪيئن ترتيب ڏيو.

log4j.properties فائل لاءِ قدم قدم گائيڊ

اسان هر شي کي هڪ وقت ۾ هڪ قدم سيٽ ڪنداسين ۽ ڏسو ته ڇا ممڪن آهي:
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
هي لڪير چوي ٿو ته اسان رجسٽر ڪري رهيا آهيون CONSOLE ضميمه، جيڪو استعمال ڪري ٿو org.apache.log4j.ConsoleAppender عمل درآمد. هي ضميمه ڪنسول ڏانهن معلومات لکي ٿو. اڳيون، اسان هڪ ٻيو ضمير رجسٽر ڪندا آهيون. هي هڪ فائل ڏانهن لکندو:
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
اهو نوٽ ڪرڻ ضروري آهي ته ضمير پاڻ کي اڃا به ترتيب ڏيڻ جي ضرورت آهي. هڪ دفعو اسان پنهنجي ضميمن کي رجسٽر ڪيو آهي، اسان اهو طئي ڪري سگهون ٿا ته ڪهڙن لاگ ليولز ۽ ڪهڙن ضميمن کي نوڊس تي استعمال ڪيو ويندو.

log4j.rootLogger=ڊيبگ، ڪنسول، فائل

  • log4j.rootLogger جو مطلب آھي اسان روٽ نوڊ کي ترتيب ڏئي رھيا آھيون، جنھن ۾ سڀ لاگ انٽري شامل آھن
  • برابر جي نشاني کان پوءِ پهريون لفظ لکڻ لاءِ گهٽ ۾ گهٽ لاگ ليول ڏانهن اشارو ڪري ٿو (اسان جي صورت ۾، اهو DEBUG آهي)
  • ڪاما جي پٺيان، اسان سڀني ضميرن کي استعمال ڪيو وڃي ٿو.
وڌيڪ مخصوص لاگنگ نوڊ کي ترتيب ڏيڻ لاء، توھان ھن طرح ھڪڙي داخلا استعمال ڪندا:
log4j.logger.com.github.romankh3.logginglecture=TRACE, OWN, CONSOLE
جتي log4j.logger.هڪ مخصوص نوڊ جي حوالي ڪرڻ لاء استعمال ڪيو ويندو آهي. اسان جي صورت ۾، com.github.romankh3.logginglecture. ھاڻي اچو ته ڪنسول اپنڊر کي ترتيب ڏيڻ بابت ڳالهايون:
# CONSOLE appender customization
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.threshold=DEBUG
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] : %c:%L : %m%n
هتي اسان ڏسون ٿا ته اهو ممڪن آهي ته مخصوص سطح کي مقرر ڪيو وڃي جنهن تي اپنڊر ڪم ڪرڻ شروع ڪندو. ھتي ھڪڙو مثال آھي جيڪو اصل ۾ ٿئي ٿو: فرض ڪريو INFO سطح سان ھڪڙو پيغام لاگنگ نوڊ پاران مليل آھي ۽ ان کي مقرر ڪيل اپنڊر ڏانھن منتقل ڪيو ويو آھي. جيڪڏهن اپنڊر جي حد WARN تي مقرر ڪئي وئي آهي، پوء اهو لاگ انٽري حاصل ڪري ٿو پر ان سان ڪجھ به نه ڪندو آهي. اڳيون، اسان کي فيصلو ڪرڻو پوندو ته ڪهڙي ترتيب پيغام استعمال ڪندي. مان مثال ۾ PatternLayout استعمال ڪريان ٿو، پر ٻيا به ڪيترائي آپشن آھن. اسان ان کي هن مضمون ۾ نه ڍڪينداسين. فائل اپنڊر کي ترتيب ڏيڻ جو مثال:
# File appender customization
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=./target/logging/logging.log
log4j.appender.FILE.MaxFileSize=1MB
log4j.appender.FILE.threshold=DEBUG
log4j.appender.FILE.MaxBackupIndex=2
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[ %-5p] - %c:%L - %m%n
توھان مخصوص فائل کي ترتيب ڏئي سگھو ٿا جنھن ۾ لاگ انٽريز لکيا ويندا، جيئن ھن لائن مان ڏسي سگھجي ٿو:
log4j.appender.FILE.File=./target/logging/logging.log
داخلا logging.logفائل ۾ لکيل آهي. فائل جي سائيز سان مسئلن کان بچڻ لاء، توهان وڌ ۾ وڌ ترتيب ڏئي سگهو ٿا، جيڪا هن صورت ۾ 1MB آهي. MaxBackupIndexظاهر ڪري ٿو ته ڪيتريون اهڙيون لاگ فائلون هونديون. جيڪڏهن اسان کي هن کان وڌيڪ فائلون ٺاهڻ گهرجن، ته پهرين فائل کي ختم ڪيو ويندو. ڏسڻ لاءِ هڪ حقيقي مثال جتي لاگنگ ترتيب ڏنل آهي، توهان وڃي سگهو ٿا عوامي مخزن تي GitHub.

جيڪو اسان بحث ڪيو آهي ان کي مضبوط ڪريو

ڪوشش ڪريو پاڻ تي سڀ ڪجھ ڪرڻ لاءِ جيڪو اسان بيان ڪيو آھي:
  • اسان جي مٿين مثال وانگر پنهنجو منصوبو ٺاهيو.
  • جيڪڏھن توھان ڄاڻو ٿا ته Maven ڪيئن استعمال ڪجي، ان کي استعمال ڪريو. جيڪڏهن نه، پوء هي سبق پڙهو، جيڪو بيان ڪري ٿو ته لائبريري کي ڪيئن ڳنڍجي.

تت ۾

  1. اسان جاوا ۾ موجود لاگنگ حلن بابت ڳالهايو.
  2. لڳ ڀڳ سڀئي مشهور لاگنگ لائبريريون هڪ شخص طرفان لکيل هيون: ڊي
  3. اسان سکيو ته ڇا لاگ ان ٿيڻ گهرجي ۽ ڇا نه هجڻ گهرجي.
  4. اسان لاگ ليول جو اندازو لڳايو.
  5. اسان لاگنگ نوڊس کي متعارف ڪرايو ويو.
  6. اسان ڏٺو ته ضمير ڇا آهي ۽ اهو ڇا لاءِ آهي.
  7. اسان ٺاھيو آھي log4j.proterties فائل قدم بہ قدم.

اضافي مواد

  1. ڪوڊ گيم: لاگر سبق
  2. هفتيوار Geekly: جاوا لاگنگ. هيلو دنيا
  3. ڪوڊنگ ڊارر: لاگنگ سان مسئلو
  4. يوٽيوب: سمجھڻ جاوا لاگنگ دوزخ - بنيادي. جاوا لاگنگ دوزخ ۽ ان مان ڪيئن رهجي
  5. Log4j: ضمير
  6. Log4j: ترتيب
منهنجو ٻيو مضمون پڻ ڏسو:
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION