JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ لاگ ان: ڇا، ڪيئن، ڪٿي ۽ ڇا سان؟

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

گروپ ۾ شايع ٿيل
هيلو هرڪو، JavaRush ڪميونٽي! اڄ اسان جاوا لاگنگ بابت ڳالهائينداسين:
  1. هي ڇا آهي، ڇو آهي. ڪهڙن حالتن ۾ اهو استعمال ڪرڻ بهتر آهي، ڪهڙين حالتن ۾ اهو نه آهي؟
  2. جاوا ۾ ڪهڙي قسم جا لاگنگ لاڳو ٿين ٿا ۽ اسان کي هن تنوع سان ڇا ڪرڻ گهرجي؟
  3. لاگنگ جي سطح. اچو ته بحث ڪريون ته ضميمه ڇا آهي ۽ ان کي صحيح طريقي سان ڪيئن ترتيب ڏيو.
  4. لاگنگ نوڊس ۽ انهن کي صحيح طريقي سان ترتيب ڏيڻ لاءِ ته جيئن هر شي ڪم ڪري جيئن اسان چاهيون ٿا.
هي مواد هڪ وسيع سامعين لاء آهي. اهو انهن ٻنهي لاءِ واضح ٿي ويندو جيڪي صرف جاوا سان واقف ٿي رهيا آهن، ۽ انهن لاءِ جيڪي اڳ ۾ ئي ڪم ڪري رهيا آهن، پر صرف ان کي ٻاهر ڪڍيو ته logger.info(“log something”); Let's Go!

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

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

جاوا لاگنگ جا اوزار

لاگنگ: ڇا، ڪيئن، ڪٿي ۽ ڇا سان؟  - 2جاوا ۾ لاگ ان ٿيڻ لاء معروف حل شامل آهن:
  • log4j
  • JUL - java.util.logging
  • JCL - jakarta commons loging
  • لاگ بيڪ
  • SLF4J - جاوا لاءِ سادو لاگنگ جو منهن
اچو ته انهن مان هر هڪ تي هڪ تڪڙو نظر وجهون، ۽ مواد جي عملي حصي ۾ اسان ڪنيڪشن وٺنداسين Slf4j - log4j هڪ بنياد طور . اهو هاڻي عجيب لڳي سگهي ٿو، پر پريشان نه ڪريو: مضمون جي آخر تائين سڀ ڪجهه واضح ٿي ويندو.

System.err.println

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

لاگ 4 جي

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

JUL - java.util.logging

اهم فائدن مان ھڪڙو حل آھي - JUL JDK (جاوا ڊولپمينٽ کٽ) ۾ شامل آھي. بدقسمتي سان، ان جي ترقي دوران، اهو مشهور log4j نه هو جنهن کي بنياد طور ورتو ويو، پر IBM کان هڪ حل، جنهن ان جي ترقي کي متاثر ڪيو. حقيقت ۾، هن وقت JUL آهي، پر ڪو به ان کي استعمال نٿو ڪري. "so-so" مان: 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 loging

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

لاگ بيڪ

اوپن سورس جو رستو ڪيترو نه ٿلهو آهي... لاگ بيڪ ان ئي ڊولپر طرفان log4j لکيو ويو آهي ته جيئن ان جو جانشين ٺاهيو وڃي. خيال ساڳيو هو log4j. فرق هي هئا ته لاگ بيڪ ۾:
  • بهتر ڪارڪردگي؛
  • slf4j لاءِ اصلي سپورٽ شامل ڪئي وئي؛
  • فلٽرنگ آپشن کي وڌايو ويو آھي.
ڊفالٽ طور، logback ڪنهن به سيٽنگ جي ضرورت نه رکندو آھي ۽ 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 ٺاھيو - جاوا لاءِ سادو لاگنگ فيڪڊ - ھڪڙو لفافو log4j، JUL، عام-لاگ انز ۽ لاگ بيڪ جي چوڌاري. جئين توهان ڏسي سگهو ٿا، ترقي ان نقطي تي پهچي چڪي آهي ته انهن ريپر جي چوٽي تي هڪ لفافي ٺاهي ڇڏيو آهي ... ان کان علاوه، اهو ٻن حصن ۾ ورهايل آهي: API، جيڪو ايپليڪيشن ۾ استعمال ڪيو ويندو آهي، ۽ عمل درآمد، جيڪو شامل ڪيو ويو آهي. هر قسم جي لاگنگ لاءِ الڳ انحصار. مثال طور، slf4j-log4j12.jar، slf4j-jdk14.jar. اهو صحيح عمل سان ڳنڍڻ لاء ڪافي آهي ۽ اهو ئي آهي: سڄو منصوبو ان سان گڏ ڪم ڪندو. Slf4j سڀني نئين خاصيتن کي سپورٽ ڪري ٿو جهڙوڪ لاگنگ لاء اسٽرنگ فارميٽ. اڳي به اهڙو مسئلو هو. اچو ته چوندا آهن هڪ لاگ انٽري آهي:
log.debug("User " + user + " connected from " + request.getRemoteAddr());
اسٽرنگ ڪنٽينشن جي ڪري اعتراض ۾ userهڪ غير معمولي تبديلي آهي user.toString()، ۽ اهو وقت وٺندو آهي، جيڪو سسٽم کي سست ڪري ٿو. ۽ سڀ ڪجھ ٺيڪ آھي جيڪڏھن اسان ايپليڪيشن کي ڊيبگ ڪريون. مسئلا شروع ٿين ٿا جيڪڏھن ھن طبقي لاءِ لاگنگ ليول 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. Executed threads (Thread) لاگ ان ڪري سگھجن ٿا ڪيسن ۾ جتي صحيح آپريشن چيڪ ڪيو وڃي.

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

اتي ڪيترائي 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 انٽرفيس، ۽ log4j کان عمل درآمد. هڪ لاگر ٺاهڻ تمام سادو آهي: توهان کي هيٺ ڏنل لکڻ جي ضرورت آهي ڪلاس جي نالي سان 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 log4j.properties. Please, provide them");
logger.error("Connection refused to host = {}", host);
جيتوڻيڪ اسان ڪلاس پاس ڪري رهيا آهيون، آخر ۾ اهو آهي ته ڪلاس جو پورو نالو پيڪيجز سان گڏ لکيو ويو آهي. اهو ڪيو ويو آهي انهي ڪري ته توهان پوءِ لاگنگ کي نوڊس ۾ ورهائي سگهو ٿا، ۽ هر نوڊ لاءِ لاگنگ ليول ۽ هڪ اپنڊر ترتيب ڏئي سگهو ٿا. مثال طور، ڪلاس جو نالو: com.github.romankh3.logginglecture.MainDemo- ان ۾ هڪ لاگر ٺاهيو ويو. ۽ اهو آهي ته اهو ڪيئن ورهائي سگهجي ٿو لاگنگ نوڊس ۾. مکيه نوڊ null RootLogger آهي . هي اهو نوڊ آهي جيڪو حاصل ڪري ٿو سڄي ايپليڪيشن جا سڀئي لاگ. باقي هيٺ ڏنل ڏيکاريل طور تي ظاهر ڪري سگهجي ٿو: لاگنگ: ڇا، ڪيئن، ڪٿي ۽ ڇا سان؟  - 4ضمير انهن جي ڪم کي خاص طور تي لاگنگ نوڊس تي ترتيب ڏيو. هاڻي، مثال طور 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 customisation
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
هتي اسان ڏسون ٿا ته اسان سطح سيٽ ڪري سگهون ٿا جتان اپنڊر پروسيس ڪندو. حقيقي صورتحال: معلومات جي سطح سان گڏ هڪ پيغام لاگنگ نوڊ طرفان موصول ٿيو ۽ ان کي مقرر ڪيل اپنڊر ڏانهن منتقل ڪيو ويو، پر اپنڊر، ڊيڄاريندڙ سطح ۽ اعلي سان، هن لاگ کي قبول ڪيو، پر ان سان ڪجھ به نه ڪيو. اڳيون، توهان کي فيصلو ڪرڻو پوندو ته پيغام ۾ ڪهڙي ٽيمپليٽ هوندي. مان مثال ۾ PatternLayout استعمال ڪري رهيو آهيان، پر اتي ڪيترائي حل آهن. اهي هن مضمون ۾ ظاهر نه ڪيو ويندو. FILE ضمير قائم ڪرڻ جو هڪ مثال:
# File appender customisation
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. JavaRush: لاگنگ. اسٽيڪٽريس جو هڪ بال کوليو
  2. JavaRush: Logger ليڪچر
  3. حبر: جاوا لاگنگ. هيلو دنيا
  4. حبر: جاوا لاگنگ: هڪ خواب جي ڪهاڻي
  5. يوٽيوب: گولوچ ڪورسز. لاگنگ. حصو 1 ، حصو 2 ، حصو 3 ، حصو 4
  6. Log4j: ضمير
  7. Log4j: ترتيب
منهنجا ٻيا مضمون پڻ ڏسو:
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION