লগিং জন্য নিয়ম এবং পরামর্শ?


13

আমার সংস্থায় আমরা লগিং সম্পর্কে কিছু বিধি / গিল্ডলাইন একসাথে রেখেছি যা আপনি জানতে বা মন্তব্য করতে পারেন কিনা তা জানতে চাই।

আমরা জাভা ব্যবহার করি তবে আপনি লগিন - নিয়ম এবং পরামর্শ সম্পর্কে সাধারণভাবে মন্তব্য করতে পারেন

  1. সঠিক লগিং স্তরটি ব্যবহার করুন

    • ত্রুটি: কিছু খুব ভুল হয়ে গেছে এবং অবিলম্বে ঠিক করা দরকার fix
    • সতর্কতা: প্রক্রিয়াটি ঠিক না করেই চলতে পারে। অ্যাপ্লিকেশনটির এই স্তরটি সহ্য করা উচিত তবে সতর্কতাটি সর্বদা তদন্ত করা উচিত।
    • তথ্য: একটি গুরুত্বপূর্ণ প্রক্রিয়া শেষ হয়েছে এমন তথ্য
    • ডিবাগ। শুধুমাত্র উন্নয়নের সময় ব্যবহৃত হয়
  2. আপনি কী লগ করছেন তা নিশ্চিত হয়ে নিন।

  3. লগিং অ্যাপ্লিকেশনটির আচরণকে প্রভাবিত করে তা এড়িয়ে চলুন

লগিংয়ের কাজটি লগে বার্তা লিখতে হবে।

  1. লগ বার্তা বর্ণনামূলক, পরিষ্কার, সংক্ষিপ্ত এবং সংক্ষিপ্ত হতে হবে।

সমস্যা সমাধানের সময় কোনও বাজে বার্তাটির খুব বেশি ব্যবহার হয় না।

  1. Log4j এ সঠিক বৈশিষ্ট্য রাখুন

এতে রাখুন যে সঠিক পদ্ধতি এবং ক্লাসটি স্বয়ংক্রিয়ভাবে লিখিত হয়।

উদাহরণ:

তারিখ-ফাইল

log4j.rootLogger=ERROR, DATEDFILE
log4j.logger.org.springframework=INFO
log4j.logger.waffle=ERROR
log4j.logger.se.prv=INFO
log4j.logger.se.prv.common.mvc=INFO
log4j.logger.se.prv.omklassning=DEBUG

log4j.appender.DATEDFILE=biz.minaret.log4j.DatedFileAppender
log4j.appender.DATEDFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATEDFILE.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%C{1}.%M] - %m%n

log4j.appender.DATEDFILE.Prefix=omklassning.
log4j.appender.DATEDFILE.Suffix=.log
log4j.appender.DATEDFILE.Directory=//localhost/WebSphereLog/omklassning/
  1. লগ মান।

অ্যাপ্লিকেশন থেকে মান লগ করুন।

  1. লগ উপসর্গ।

অ্যাপ্লিকেশনটির কোন অংশটি হ'ল লগিংটি এই প্রকল্পের সম্মত উপসর্গের জন্য যেমন কিছু দিয়ে লেখা হয়েছে তা উল্লেখ করুন PANDORA_DB

  1. পাঠ্যের পরিমাণ।

খুব বেশি লগিংয়ের পাঠ্য যাতে না হয় সে সম্পর্কে সাবধান হন। এটি অ্যাপ্লিকেশনটির কার্য সম্পাদনকে প্রভাবিত করতে পারে।

  1. লগিং ফর্ম্যাট:

- লগ 4 জে ব্যবহার করার জন্য বিভিন্ন রূপ এবং পদ্ধতি রয়েছে তবে ব্যতিক্রমগুলি লগ করলে আমরা নিম্নলিখিত ফর্ম্যাটটির অভিন্ন ব্যবহার চাই:

logger.error("PANDORA_DB2: Fel vid hämtning av frist i TP210_RAPPORTFRIST", e);

উপরের উদাহরণে এটি ধরে নেওয়া হয় যে আমরা log4j বৈশিষ্ট্যগুলি সেট করে রেখেছি যাতে এটি স্বয়ংক্রিয়ভাবে ক্লাস এবং পদ্ধতিটি লিখতে পারে।

সর্বদা লগার ব্যবহার করুন এবং নিম্নলিখিতগুলি না:

System.out.println(), System.err.println(), e.printStackTrace()

যদি ওয়েব অ্যাপ্লিকেশনটি আমাদের কাঠামোটি ব্যবহার করে আপনি হ্যান্ডলারের মধ্যে ট্র্যাচ-ক্যাচ ব্যবহার করে এবং উপরের মডেল অনুসারে লগিং করে ইজেবি থেকে খুব বিশদ ত্রুটির তথ্য পেতে পারেন:

আমাদের প্রকল্পে আমরা এই রূপান্তর প্যাটার্নটি ব্যবহার করি যা কোন পদ্ধতি এবং শ্রেণীর নামগুলি স্বয়ংক্রিয়ভাবে লিখিত হয়। এখানে আমরা কনসোলের জন্য এবং ডেটেডফিলাপেন্ডেন্ডারের জন্য দুটি পৃথক প্যাটেন্ট ব্যবহার করি:

log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.appender.DATEDFILE.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

উপরোক্ত দুটি পদ্ধতিতে পদ্ধতি এবং ক্লাস উইওল লিখিত হবে। কনসোলে সারি নম্বরটিও আমাদের লেখা থাকবে।

  1. toString()

toString()প্রতিটি বস্তুর জন্য দয়া করে একটি রাখুন । গো EX:

@Override
public String toString() {
  StringBuilder sb = new StringBuilder();
  sb.append(" DwfInformation [ ");
  sb.append("cc: ").append(cc);
  sb.append("pn: ").append(pn);
  sb.append("kc: ").append(kc);
  sb.append("numberOfPages: ").append(numberOfPages);
  sb.append("publicationDate: ").append(publicationDate);
  sb.append("version: ").append(version);
  sb.append(" ]");
  return sb.toString();
}

পরিবর্তে বিশেষ পদ্ধতি যা এই আউটপুটগুলি তৈরি করে

public void printAll()
{
    logger.info("inbet: " + getInbetInput());
    logger.info("betdat: " + betdat);
    logger.info("betid: " + betid);
    logger.info("send: " + send);
    logger.info("appr: " + appr);
    logger.info("rereg: " + rereg);   
    logger.info("NY: " + ny);   
    logger.info("CNT: " + cnt);   
}

সুতরাং লগিং ব্যবহারের এই উপায়গুলির সাথে আপনি যুক্ত করতে, মন্তব্য করতে বা সন্দেহজনক কিছু খুঁজে পেতে পারেন? জবা, জাভা এবং লগ 4 জে সম্পর্কিত না হলেও উত্তর দিতে বা মন্তব্য করতে নির্দ্বিধায় এটি কীভাবে যুক্তিযুক্ত তা কেবল একটি বাস্তবায়ন।



1
@ জাগান - আমি মনে করি আপনি ঠিক বলেছেন, দুটি প্রশ্নের মধ্যে অনেকগুলি ওভারল্যাপ রয়েছে। যদিও এটিকে সদৃশ বলার জন্য আমি লড়াই করছি।

উত্তর:


4

অ্যাপ্লিকেশনটিতে লগ স্টেটমেন্টটি এসেছে যেখানে আপনার লগিংয়ের নিয়মের এক্সটেনশন হিসাবে আপনি মডিউল স্তরের লগিং পতাকাগুলি প্রতি যোগ করতে চাইতে পারেন। সর্বদা সব সময় লগ করার পরিবর্তে এটি আপনাকে তার পরিবর্তে আপনার অ্যাপ্লিকেশনটির অংশগুলি বেছে বেছে লক্ষ্যবস্তু করতে দেয়। এটিতে ওভারহেড রয়েছে এবং আপনাকে এমন একটি সুবিধা তৈরি করতে হবে যা আপনাকে সেই লগিং সক্ষম / অক্ষম করতে দেয়। আদর্শভাবে, আপনি অ্যাপ্লিকেশনটি চলমান থাকায় অন-ফ্লাই সক্ষম / অক্ষম করতে সক্ষম হবেন।

আমি ডিবাগের নীচে একটি স্তর দেখতে অভ্যস্ত যা আমি "ট্রেস" শব্দটি ব্যবহার করি তবে এটি অগত্যা একটি সর্বজনীন শব্দ নয় term "ট্রেস" স্তরের লগিং ট্র্যাকগুলি যতটা সম্ভব আপনি দাঁড়াতে পারবেন, মডিউল প্রবেশ / প্রস্থান, প্রবেশ / প্রস্থান সহ টাইমস্ট্যাম্প এবং উত্তীর্ণ মানগুলি ক্যাপচারের জন্য বোনাস পয়েন্ট সহ। স্পষ্টতই, এটি প্রচুর ডেটা উত্পন্ন করে এবং আপনি উইলি-নিলি চালু করেন এমন কিছু নয়। আপনি যখন প্রক্রিয়াটির সাথে সংযুক্ত করতে পারবেন না বা ভুল অ্যাপ্লিকেশনটির কোনও মূল ডাম্প নেই তখন ডিবাগিংয়ের ক্ষেত্রে এর সুবিধাগুলি রয়েছে।

আমি আমার লগ সম্পর্কিত তথ্য সহ ফাইল / মডিউল রেফারেন্স এবং টাইমস্ট্যাম্প দেখতে চাই। থ্রেডগুলির মধ্যে বর্ণের অবস্থার খোঁজ করার পাশাপাশি অ্যাপ্লিকেশনটির একাধিক ক্ষেত্রের ক্রিয়াকলাপকে সমন্বয় করার সময় এটি কার্যকর হতে পারে। সত্যি কথা বলতে, আমি এমন কিছু লোকের সাথে জানি যারা এই বিশদটি লগ ফাইলটিকে বিশৃঙ্খলা করে বলে মনে করে। টাইমস্ট্যাম্পে যুক্ত করা টিমের সাথে আলোচনার বিষয়। (লগ 4 জে ইতিমধ্যে যদি তা করে থাকে তবে ক্ষমা প্রার্থনা করুন))

যদি লগিং এর নিজস্ব থ্রেড / প্রক্রিয়া দ্বারা যত্ন নেওয়া না হয় তবে এটিও বিবেচনার জন্য। অ্যাপ্লিকেশন থ্রেডটি লগিংয়ের প্রক্রিয়াটির জন্য অপেক্ষা করার পরিবর্তে লগ বার্তা লগ হ্যান্ডলারের কাছে পৌঁছে যায় এবং অ্যাপ্লিকেশন থ্রেডটি তার আনন্দময় পথে চলে যায়। বিকল্পভাবে, লগ বার্তাগুলি পরিচালনা করতে কিছু ধরণের বাফার প্রক্রিয়া তৈরি করা অ্যাপ্লিকেশন প্রতিক্রিয়াশীলতার গতি বাড়ানোর অন্য উপায়।

লগ ফাইলগুলির আকার এবং ইতিহাসের উপর নিয়ন্ত্রণ রাখা বিবেচনা করার মতো আরও একটি বৈশিষ্ট্য। আপনি অ্যাপ্লিকেশনটি হোস্ট সিস্টেমে সমস্ত ডিস্কের স্থান ফুটিয়ে তুলতে চান না, বা আপনি প্রয়োজনীয় সমস্ত লগ ফাইলগুলি অনন্তকাল ধরে রাখতে চান না।


2

লগিংয়ের জন্য কোনও ধরণের স্ট্রিং অপারেশন করার আগে লগিংয়ের স্তরটি যাচাই করে রাখার একটি বিষয় মনে রাখবেন। এটি হ'ল ডেট ফর্ম্যাটর স্থাপনের বা লগ মেসেজটি তৈরি করতে যদি আপনি আসলে লগ না করে থাকেন তবে একগুচ্ছ স্ট্রিং যুক্ত করে তোলার সমস্ত কাজে যাবেন না। এটি কেবলমাত্র অপচয় করা কাজ যা আপনার অ্যাপ্লিকেশনটি কমিয়ে দেয়।

এফওয়াইআই, অ্যাপাচি কমন্স প্রকল্পের একটি ToStringBuilder শ্রেণি রয়েছে যা আপনার toString()পদ্ধতিগুলি তৈরি করা সহজ করে।


1

আপনি এখানে নিক যোগ করেছেন তাতে আমি সন্দেহজনক কিছু পাই না find কিছুদিন ধরে এভাবেই করছি doing আপনি যে পোস্টটি সরবরাহ করেছেন তা খুব বিস্তারিত এবং সম্ভবত লগিংয়ের জন্য এক ধরণের টিউটোরিয়াল হিসাবে ব্যবহৃত হতে পারে। তবে আমি এখানে একটি জিনিস যুক্ত করতে চাই, যা হ'ল: অনেক জায়গায় আমি শর্তসাপেক্ষ লগিং ব্যবহার করে চ্যাপগুলি দেখছি, উদাহরণস্বরূপ:

     if(env_local)
     {
     write_to_local();
     }    
     else if(env_IT)
     {
     write_to_IT();
     } 
     else if(env_PROD)
     {
     write_to_prod();
     } 
     else
     dosomething();

আমি মনে করি এই ধরণের শর্তসাপেক্ষ ট্রেসিং বা ডিবাগিং সবচেয়ে ভাল উপায় নয়।


1

ক্লাস / পদ্ধতিতে ত্রুটি উত্থাপিত লগ করার পাশাপাশি, সেই পদ্ধতিতে পাস হওয়া প্যারামিটারগুলি লগ করাও কার্যকর হবে। কোথায় ত্রুটি উত্থাপিত হয়েছিল তা জানা খুব কার্যকর নয় যদি এটি 1000 এর মধ্যে 1 বার ঘটে তবেই; কী ডেটা ত্রুটি ঘটেছে তা আপনারও জানতে হবে।

আমি একটি ভেরিয়েবল থাকাও দরকারী বলে মনে করেছি যা একটি অ্যাপ্লিকেশনটির জন্য লগিংয়ের ডিফল্ট স্তরকে সংজ্ঞায়িত করে। সতর্কতার সাথে ERROR কোডের পাশাপাশি আপনার DEBUG এবং INFO কোড থাকতে পারে। প্রোডাকশন মোডে চলাকালীন আপনি এটিকে ডিফল্ট করে দেবে না DEBUG তথ্য, কিন্তু কোনও বাগ প্রদর্শিত হলে আপনি একটি পতাকা আপডেট করতে পারেন এবং লগটিতেও DEBUG বার্তা লিখতে শুরু করতে পারেন।


1

লগিং বেশিরভাগ সময় ক্রস কাটার উদ্বেগ। আপনার প্রকৃত ব্যবসায়ের লজিকগুলি থেকে আপনাকে লগিং পৃথক করতে সক্ষম করতে একা জাভা যথেষ্ট পরিমাণে মত প্রকাশ করতে পারে না। এর অর্থ আপনি উদাহরণস্বরূপ কেবল একটি পদ্ধতি গ্রহণ এবং এটি অন্য প্রকল্পে রাখতে পারবেন না তবে আপনাকে আপনার সমস্ত লগিং অপসারণ করার আগে এবং আপনাকে সামঞ্জস্য করতে হবে do আর তা হ'ল আইসবার্গের ডগা।

লগিং এবং "বাস্তব" ব্যবসায়িক লজিকগুলিকে মিশ্রিত করার সময় যে দিকটি এবং অন্যান্য সমস্যাগুলি রোধ করার জন্য আপনাকে দিক ভিত্তিক প্রোগ্রামিং ব্যবহার করা উচিত। জাভা জন্য সর্বাধিক ব্যবহৃত কাঠামো AspectJ হবে। গুগল প্রযুক্তি বিষয়ক আলাপচারিতার এই ইউটিউব ভিডিও রয়েছে যা অ্যাসপেক্টজে এবং লগিংয়ের বাইরেও এর ব্যবহারগুলি বেশ ভালভাবে ব্যাখ্যা করে। স্ট্যাকেক্সচেঞ্জে খুব অবশ্যই এখানে নিজেকে লগ করার জন্য অনেকগুলি উদাহরণ পাবেন ।


0

একটি জিনিস আমি সুপারিশ করব যে আপনার কোনও নির্দিষ্ট লগ ফাইলের সাথে একাধিক লগিং প্রসঙ্গ যুক্ত করার একটি মাধ্যম রয়েছে এবং এমন ব্যবস্থা করুন যাতে কোনও লগিং প্রসঙ্গে লিখিত কিছু লগ হয়ে যায় যদি না কোড স্পষ্টতই লগিং প্রসঙ্গে তার বিষয়বস্তুগুলি ফেলে দেওয়ার অনুরোধ করে। এই জাতীয় নকশা একজনকে অপারেশন চলাকালীন বিশদ লগগুলি ক্যাপচার করতে এবং অপারেশন সফল হলে তাদের তা বাতিল করতে দেয়, তবে অপারেশন ব্যর্থ হলে সেগুলি পাওয়া যায়। এ জাতীয় লগিং বৈশিষ্ট্য অনুপস্থিত, যখন কোনও কিছু ব্যর্থ হয় তখন ভাল লগ পাওয়া গেলে প্রয়োজন হতে পারে যে কোনও অ্যাপ্লিকেশন যখন সবকিছু কাজ করে তখন 99.99% বারে অযথা ডেটা লগ ইন করতে প্রচুর সময় অপচয় করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.