"ஓ, நீ இருக்கிறாய்! இன்று நமக்கு இன்னொரு பாடம் இருக்கிறது என்பதை நினைவில் வைத்திருக்கிறாயா?"

"இல்லை, நான் உன்னைத் தான் தேடினேன். கிட்டத்தட்ட..."

"அருமை, பிறகு ஆரம்பிக்கலாம். இன்று நான் உங்களுக்கு லாக்கிங் பற்றி சொல்ல விரும்புகிறேன்."

"பதிவு என்பது நிகழ்ந்த நிகழ்வுகளின் பட்டியல். ஏறக்குறைய ஒரு கப்பலின் பதிவு அல்லது நாட்குறிப்பு போன்றது. அல்லது ட்விட்டர் - ஒருவேளை நீங்கள் அதை நன்றாக தொடர்புபடுத்தலாம். ஆச்சரியப்படத்தக்க வகையில், லாகர் என்பது நீங்கள் பதிவு செய்வதற்குப் பயன்படுத்தும் ஒரு பொருளாகும்."

"நிரலாக்கத்தில், கிட்டத்தட்ட எல்லாவற்றையும் பதிவு செய்வது வழக்கம். ஜாவாவில், நாங்கள் எல்லாவற்றையும் பதிவு செய்கிறோம், இன்னும் கொஞ்சம் கூட."

"உண்மை என்னவென்றால், ஜாவா நிரல்கள் UI, கன்சோல் போன்றவை இல்லாத பெரிய சர்வர் பயன்பாடுகளாகும். அவை ஒரே நேரத்தில் ஆயிரக்கணக்கான பயனர் கோரிக்கைகளைச் செயல்படுத்துகின்றன, மேலும் பல்வேறு பிழைகள் உள்ளன. குறிப்பாக வெவ்வேறு நூல்கள் ஒன்றுக்கொன்று குறுக்கிடத் தொடங்கும் போது."

"உண்மையில், இந்த சூழ்நிலைகளில் அரிதாக மீண்டும் உருவாக்கக்கூடிய பிழைகள் மற்றும் தோல்விகளைத் தேடுவதற்கான ஒரே வழி ஒவ்வொரு தொடரிலும் நடக்கும் அனைத்தையும் பதிவு செய்வதாகும்."

"பெரும்பாலும், பதிவில் முறை வாதங்கள், ஏதேனும் பிடிபட்ட பிழைகள் மற்றும் பல இடைநிலை தகவல்கள் பற்றிய தகவல்கள் உள்ளன."

"பதிவு எவ்வளவு முழுமையானது, நிகழ்வுகளின் வரிசையை மீண்டும் உருவாக்குவது மற்றும் தோல்விகள் அல்லது பிழைகளுக்கான காரணங்களைக் கண்காணிப்பது எளிது."

"சில நேரங்களில் பதிவுகள் ஒரு நாளைக்கு பல ஜிகாபைட்களை எட்டும். இது சாதாரணமானது."

"சில ஜிகாபைட்களா? ஓ_ஓ"

"ஆம். பெரும்பாலும், பதிவுக் கோப்புகள் தானாகக் காப்பகப்படுத்தப்படும், தொடர்புடைய தேதியைக் குறிக்கும்."

"ஐயோ."

"உஹ்-ஹூ. ஆரம்பத்தில், ஜாவாவிற்கு அதன் சொந்த லாகர் இல்லை. இதன் விளைவாக, பல சுயாதீன லாகர்கள் எழுதப்பட்டன. இவற்றில் மிகவும் பொதுவானது log4j ஆகும்."

"சில ஆண்டுகளுக்குப் பிறகு, ஜாவாவிற்கு சொந்தமாக ஒரு லாகர் கிடைத்தது, ஆனால் அதன் செயல்பாடு மிகவும் குறைவாக இருந்தது மற்றும் அது பரவலாகப் பயன்படுத்தப்படவில்லை."

" ஜாவாவில் அதிகாரப்பூர்வ லாகர் உள்ளது என்பது உண்மைதான் , ஆனால் ஜாவா புரோகிராமர்களின் முழு சமூகமும் மற்ற லாகர்களைப் பயன்படுத்த விரும்புகிறது. "

"பின்னர், log4j அடிப்படையில் மேலும் பல லாகர்கள் எழுதப்பட்டன."

"பின்னர் இப்போது பரவலாகப் பயன்படுத்தப்படும் சிறப்பு உலகளாவிய லாகர் slf4j, அவை அனைத்திற்கும் எழுதப்பட்டது. இது log4j ஐப் போலவே உள்ளது, எனவே பதிவுகளை விளக்கும் போது நான் அதை ஒரு எடுத்துக்காட்டுக்கு பயன்படுத்துகிறேன்."

"முழு பதிவு செயல்முறை மூன்று பகுதிகளைக் கொண்டுள்ளது."

" முதலில் , தகவலைச் சேகரிக்கவும்."

" இரண்டாவது , சேகரிக்கப்பட்ட தகவலை வடிகட்டவும்."

" மூன்றாவதாக , தேர்ந்தெடுக்கப்பட்ட தகவலை பதிவு செய்யவும்."

"சேகரிப்புடன் தொடங்குவோம். பதிவுசெய்யும் வகுப்பின் பொதுவான உதாரணம் இங்கே:"

லாக்கிங் கொண்ட வகுப்பு
class Manager
{
 private static final Logger logger = LoggerFactory.getLogger(Manager.class);

 public boolean processTask(Task task)
 {
  logger.debug("processTask id = " + task.getId());
  try
  {
   task.start();
   task.progress();
   task.compleate();
   return true;
  }
  catch(Exception e)
  {
   logger.error("Unknown error", e);
   return false;
  }
 }
}

"சிவப்பு நிறத்தில் முன்னிலைப்படுத்தப்பட்ட வார்த்தைகளுக்கு கவனம் செலுத்துங்கள்."

" வரி 3 - லாகர் பொருளை  உருவாக்கவும் . அத்தகைய நிலையான பொருள் கிட்டத்தட்ட ஒவ்வொரு வகுப்பிலும் உருவாக்கப்படுகிறது! சரி, தரவைச் சேமிப்பதைத் தவிர வேறு எதையும் செய்யாத வகுப்புகளைத் தவிர."

" லாகர்ஃபேக்டரி என்பது லாகர்களை உருவாக்குவதற்கான ஒரு சிறப்பு வகுப்பாகும், மேலும் getLogger என்பது அதன் நிலையான முறைகளில் ஒன்றாகும். தற்போதைய பொருள் பொதுவாக அனுப்பப்படுகிறது, ஆனால் பல்வேறு விருப்பங்கள் சாத்தியமாகும்."

" வரி 7 - முறை அழைப்பைப் பற்றிய தகவல் லாகருக்கு எழுதப்பட்டது. இது முறையின் முதல் வரி என்பதை நினைவில் கொள்ளவும். முறை அழைக்கப்பட்டவுடன், உடனடியாக பதிவில் தகவலை எழுதுகிறோம்."

"நாங்கள் பிழைத்திருத்த முறையை அழைக்கிறோம், அதாவது தகவலின் முக்கியத்துவம் DEBUG நிலை. இது வடிகட்டுவதற்குப் பயன்படுத்தப்படுகிறது. அதைப் பற்றி ஓரிரு நிமிடங்களில் நான் உங்களுக்குச் சொல்கிறேன்."

" வரி 17 - நாங்கள் ஒரு விதிவிலக்கைப் பிடிக்கிறோம் மற்றும்... உடனடியாக அதை பதிவில் எழுதுங்கள்! இதுதான் சரியாகச் செய்ய வேண்டும்."

"இந்த முறை பிழை முறை என்று அழைக்கிறோம், இது தகவல் பிழை நிலை என்பதை உடனடியாகக் குறிக்கிறது"

லாகர் - 1

"இப்போதைக்கு எல்லாம் தெளிவாகத் தெரிகிறது. சரி, எங்கள் உரையாடலின் நடுவில் அது தெளிவாகத் தெரியும்."

"நல்லது, பிறகு செய்தி வடிகட்டலுக்குச் செல்லலாம்."

"வழக்கமாக, ஒவ்வொரு பதிவுச் செய்திக்கும் அதன் சொந்த முக்கியத்துவ நிலை இருக்கும், அதை நீங்கள் சில செய்திகளை நிராகரிக்க பயன்படுத்தலாம். நான் குறிப்பிட்ட முக்கிய நிலைகள் இங்கே:"

முக்கியத்துவ நிலை விளக்கம்
அனைத்து அனைத்து செய்திகளும்
ட்ரேஸ் நேர்த்தியான பிழைத்திருத்த செய்திகள்
பிழைத்திருத்தம் முக்கியமான பிழைத்திருத்த செய்திகள்
தகவல் தகவல் செய்திகள்
எச்சரிக்கை எச்சரிக்கைகள்
பிழை பிழைகள்
அபாயகரமான அபாயகரமான பிழைகள்
முடக்கப்பட்டுள்ளது செய்திகள் இல்லை

செய்திகளை வடிகட்டும்போதும் இந்த நிலைகள் பயன்படுத்தப்படுகின்றன.

நீங்கள் பதிவு செய்யும் நிலையை எச்சரிப்பதாக அமைத்திருப்பதாக வைத்துக்கொள்வோம். பின்னர் WARN ஐ விட முக்கியமான அனைத்து செய்திகளும் நிராகரிக்கப்படும்: TRACE, DEBUG, INFO.

வடிகட்டுதல் அளவை FATAL என அமைத்தால், பிழை செய்திகள் கூட நிராகரிக்கப்படும்.

"வடிகட்டும் போது இன்னும் இரண்டு முக்கிய நிலைகள் பயன்படுத்தப்படுகின்றன: OFF, இது அனைத்து செய்திகளையும் நிராகரிக்கிறது; மற்றும் ALL, எல்லா செய்திகளையும் காட்டும் (எதுவும் நிராகரிக்கப்படவில்லை)."

"எப்படி, எங்கு வடிகட்டலை அமைப்பது?"

"மேலும் பேசாமல் சொல்கிறேன்."

"வழக்கமாக, log4j லாகர் அமைப்புகள் log4j.properties கோப்பில் குறிப்பிடப்படும்."

இந்தக் கோப்பில் பல appender ஆப்ஜெக்ட்களை நீங்கள் குறிப்பிடலாம். இந்த பொருட்களுக்கு தரவு எழுதப்படுகிறது. தரவு மூலங்கள் உள்ளன, மற்றும் பிற்சேர்க்கைகள் உள்ளன - எதிர் நோக்கங்களைக் கொண்ட பொருள்கள். நீர் போல தரவு பாயும் பொருள்கள்.

"இங்கே சில உதாரணங்கள்:"

கன்சோலில் உள்நுழைகிறது
# Root logger option
log4j.rootLogger = INFO, stdout

# Direct log messages to stdout
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}

வரிகள் 1 மற்றும் 4 - இவை கருத்துக்கள்

வரி 2 - நாம் விரும்பும் லாக்கிங் அளவைக் குறிப்பிடுகிறோம். முக்கியமான அனைத்து நிலைகளும் (DEBUG, TRACE) நிராகரிக்கப்படும்.

அதே இடத்தில், நாங்கள் ஒரு கமாவைச் சேர்த்து, பின்னர் பதிவு எழுதப்படும் பொருளின் பெயரை (நாம் கொண்டு வருகிறோம்) குறிப்பிடுகிறோம். வரி 5-9 அதன் அமைப்புகளைக் கொண்டுள்ளது.

வரி 5 - நாம் appender வகையை குறிப்பிடுகிறோம் ( ConsoleAppender ).

வரி 6 - நாம் எங்கு எழுதுகிறோம் என்பதைக் குறிப்பிடுகிறோம் ( System.out. ).

வரி 7 - மாற்று முறைகளை (பேட்டர்ன்லேஅவுட்) நிர்வகிக்கும் வகுப்பை நாங்கள் அமைத்துள்ளோம்.

வரி 8 - எழுதுவதற்குப் பயன்படுத்தப்படும் மாற்று வடிவத்தை நாங்கள் அமைத்துள்ளோம். மேலே உள்ள எடுத்துக்காட்டில், இது தேதி மற்றும் நேரம்.

"கோப்பில் எழுதுவது எப்படி இருக்கும் என்பது இங்கே:"

ஒரு கோப்பில் உள்நுழைகிறது
# Root logger option
log4j.rootLogger = INFO, file

# Direct log messages to a log file
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = C:\\loging.log
log4j.appender.file.MaxFileSize = 1MB
log4j.appender.file.MaxBackupIndex = 1
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %-5p %c{1}:%L - %m%n

"வரி 2 செய்தி வடிகட்டுதல் நிலை மற்றும் அப்பெண்டர் பொருளின் (மடு) பெயரை அமைக்கிறது."

"வரி 5 - நாங்கள் கோப்பு இணைப்பியின் வகையைக் குறிப்பிடுகிறோம் ( RollingFileAppender )."

"வரி 6 - பதிவு எழுதப்படும் கோப்பின் பெயரை நாங்கள் குறிப்பிடுகிறோம்."

"வரி 7 - அதிகபட்ச பதிவு அளவை நாங்கள் குறிப்பிடுகிறோம். இந்த அளவு வரம்பை மீறும் போது, ​​ஒரு புதிய கோப்பு உருவாக்கப்படும்."

"வரி 8 - சேமிக்கப்பட வேண்டிய பழைய பதிவு கோப்புகளின் எண்ணிக்கையை நாங்கள் குறிப்பிடுகிறோம்."

"வரிகள் 9-10 - மாற்று வடிவத்தை அமைக்கவும்."

"இங்கே என்ன நடக்கிறது என்று எனக்குத் தெரியவில்லை, ஆனால் என்னால் யூகிக்க முடிகிறது. அது ஊக்கமளிக்கிறது."

"அது அருமை. ஒரு கோப்பு மற்றும் கன்சோலில் ஒரு பதிவை எவ்வாறு எழுதுவது என்பதற்கான எடுத்துக்காட்டு இங்கே:"

கன்சோல் மற்றும் கோப்பில் உள்நுழைகிறது
# Root logger option
log4j.rootLogger = INFO, file, stdout

# Direct log messages to a log file
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = C:\\loging.log
log4j.appender.file.MaxFileSize = 1MB
log4j.appender.file.MaxBackupIndex = 1
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %-5p %c{1}:%L - %m%n

# Direct log messages to stdout
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}

"ஆஹா, அப்படிச் செய்ய முடியுமா? அருமை!"

"ஆமாம். நீங்கள் விரும்பும் பல பிற்சேர்க்கைகளை அறிவித்து ஒவ்வொன்றையும் தனிப்பயனாக்கலாம்."

மேலும், ஒவ்வொரு இணைப்பாளரும் செய்தியை வடிகட்டுவதற்கு மிகவும் நெகிழ்வான அமைப்புகளைக் கொண்டிருக்கலாம். ஒவ்வொரு இணைப்பிற்கும் தனித்தனி செய்தி வடிகட்டுதல் அளவை ஒதுக்குவது மட்டுமல்லாமல், தொகுப்பின் மூலம் செய்திகளை வடிகட்டவும் முடியும்! அதனால்தான் லாகரை உருவாக்கும் போது ஒரு வகுப்பைக் குறிப்பிட வேண்டும் (நான் LoggerFactory.getLogger பற்றி பேசுகிறேன் ).

"உதாரணத்திற்கு:"

கன்சோல் மற்றும் கோப்பில் உள்நுழைகிறது
# Root logger option
log4j.rootLogger = INFO, file, stdout

# Direct log messages to a log file
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.threshold = DEBUG
log4j.appender.file.File = C:\\loging.log
log4j.appender.file.MaxFileSize = 1MB
log4j.appender.file.MaxBackupIndex = 1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %-5p %c{1}:%L - %m%n

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.threshold = ERROR
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}

log4j.logger.org.springframework = ERROR
log4j.logger.org.hibernate = ERROR
log4j.logger.com.codegym = DEBUG
log4j.logger.org.apache.cxf = ERROR

"வரிகள் 6 மற்றும் 15 - ஒவ்வொரு இணைப்பிற்கும் எங்கள் சொந்த வடிகட்டுதல் அளவை அமைத்துள்ளோம்."

"வரிகள் 20-23 – தொகுப்பின் பெயர் மற்றும் அதன் செய்திகளுக்கான வடிகட்டுதல் நிலை ஆகியவற்றை நாங்கள் குறிப்பிடுகிறோம். Log4j.logger ஒரு முன்னொட்டு: தொகுப்பின் பெயர் ஆரஞ்சு நிறத்தில் சிறப்பிக்கப்பட்டுள்ளது."

"அப்படியா? உங்களால் கூட முடியும். சரி, கூல்!"

"உண்மையில், JDK இல் log4j அல்லது slf4j சேர்க்கப்படவில்லை. அவற்றை நீங்கள் தனித்தனியாக பதிவிறக்கம் செய்ய வேண்டும். அதை நீங்கள் இங்கே செய்யலாம் . ஆனால் வேறு வழி உள்ளது:"

" படி 1 .வகுப்பில் இறக்குமதிகளைச் சேர்:"

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

" படி 2. இந்த வரிகளில் கர்சரை வைத்து IntelliJ IDEA இல் Alt+Enter ஐ அழுத்தவும்"

" படி 3 . 'இணையத்தில் கோப்பு ஜாடி» மெனு உருப்படியைத் தேர்ந்தெடுக்கவும்.

" படி 4 . 'slf4j-log4j13.jar' என்பதைத் தேர்ந்தெடுக்கவும்"

" படி 5. நூலகத்தை (ஜாடி) எங்கு பதிவிறக்குவது என்பதைக் குறிப்பிடவும்"

" படி 6. உங்களுக்குத் தேவையான வகுப்புகளைப் பயன்படுத்தவும்."

"ஐயோ! என்ன ஒரு நாள் இது. இவ்வளவு புதுமையும், குளிர்ச்சியும்!"

"உள்நுழைவு பற்றிய மற்றொரு நல்ல கட்டுரை இங்கே: https://docs.oracle.com/javase/10/core/java-logging-overview.htm#JSCOR-GUID-48004124-2C00-49F7-A640-0C0DDA271DBC "

"சரி, அது போதும். ரிலாக்ஸ் போ, புரோகிராமர்."