লগিং এপিআই - জাভা লগিং এপিআই শেষ ব্যবহারকারী, সিস্টেম অ্যাডমিনিস্ট্রেটর, ফিল্ড সার্ভিস ইঞ্জিনিয়ার এবং সফ্টওয়্যার ডেভলপমেন্ট টিমের বিশ্লেষণের জন্য উপযুক্ত লগ রিপোর্ট তৈরি করে গ্রাহক সাইটগুলিতে সফ্টওয়্যার সার্ভিসিং এবং রক্ষণাবেক্ষণের সুবিধা দেয়। সুরক্ষা ব্যর্থতা, কনফিগারেশন ত্রুটি, কর্মক্ষমতা বাধা এবং / অথবা অ্যাপ্লিকেশন বা প্ল্যাটফর্মের বাগগুলি সম্পর্কিত লগিং এপিআইগুলি তথ্য ক্যাপচার করে। মূল প্যাকেজটিতে মেমরি, আউটপুট স্ট্রিম, কনসোল, ফাইল এবং সকেটে সরল পাঠ্য বা এক্সএমএল ফর্ম্যাটযুক্ত লগ রেকর্ডার সরবরাহের জন্য সমর্থন অন্তর্ভুক্ত। তদ্ব্যতীত, লগিং এপিআইগুলি হোস্ট অপারেটিং সিস্টেমটিতে ইতিমধ্যে বিদ্যমান লগিং পরিষেবাগুলির সাথে ইন্টারঅ্যাক্ট করতে সক্ষম।
প্যাকেজ java.util.logging the জাভা প্ল্যাটফর্মের মূল লগিং সুবিধার ক্লাস এবং ইন্টারফেস সরবরাহ করে।
লগ 4 জে 1.x «লগ 4j একটি জনপ্রিয় জাভা ভিত্তিক লগিং ইউটিলিটি। অনেক লেখকের কাজের ভিত্তিতে লগ 4 জ একটি ওপেন সোর্স প্রকল্প project এটি অ্যাপেন্ডার্স [কনসোল, ফাইল, ডিবি এবং ইমেল] ব্যবহার করে কোন লগ স্টেটমেন্টগুলি বিভিন্ন স্থানে আউটপুট হয় তা বিকাশকারীকে নিয়ন্ত্রণ করতে দেয়। বাহ্যিক কনফিগারেশন ফাইল ব্যবহার করে রানটাইম এ এটি সম্পূর্ণরূপে কনফিগার করা যায়।
Log4j এর তিনটি প্রধান উপাদান রয়েছে:
- লগার্স - [অফ, ফাইনাল, এয়ারআরও, সতর্কতা, তথ্য, ডিইবিইউজি, ট্র্যাক]
Appenders
- লেআউটগুলি - [প্যাটার্নলআউট, বর্ধিত প্যাটার্ন লেআউট]
কনফিগারেশন ফাইলগুলি XML বা জাভা বৈশিষ্ট্যগুলিতে (কী = মান) ফর্ম্যাটে লেখা যেতে পারে।
- log4j_Extern.properties «জাভা বৈশিষ্ট্য (কী = মান) ফর্ম্যাট
একটি খোলার " $ { " এবং " } " বন্ধ করার মধ্যবর্তী স্ট্রিংটিকে কী হিসাবে ব্যাখ্যা করা হয়। বিকল্প ভেরিয়েবলের মান সিস্টেম বৈশিষ্ট্য হিসাবে বা কনফিগারেশন ফাইল হিসাবে সংজ্ঞায়িত করা যেতে পারে। অ্যাপেন্ডার নির্দিষ্ট বিকল্প সেট করুন। 4 log4j.appender.appenderName.option = মান, প্রতিটি নামযুক্ত অ্যাপেন্ডারের জন্য আপনি এর লেআউট কনফিগার করতে পারেন।
log4j.rootLogger=INFO, FILE, FILE_PER_SIZE, FILE_PER_DAY, CONSOLE, MySql
#log.path=./
log.path=E:/Logs
# https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html
# {%-5p - [WARN ,INFO ,ERROR], %5p 0- [ WARN, INFO,ERROR]}
log.patternLayout=org.apache.log4j.PatternLayout
log.pattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n
# System.out | System.err
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.err
log4j.appender.CONSOLE.layout=${log.patternLayout}
log4j.appender.CONSOLE.layout.ConversionPattern=${log.pattern}
# File Appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log.path}/logFile.log
#log4j:ERROR setFile(null,false) call failed. - Defaults setFile(null,true)
#log4j.appender.FILE.Append = false
log4j.appender.FILE.layout=${log.patternLayout}
log4j.appender.FILE.layout.ConversionPattern=${log.pattern}
# BackUP files for every Day.
log4j.appender.FILE_PER_DAY=org.apache.log4j.DailyRollingFileAppender
# [[ Current File ] - logRollingDayFile.log ], { [BackUPs] logRollingDayFile.log_2017-12-10, ... }
log4j.appender.FILE_PER_DAY.File=${log.path}/logRollingDayFile.log
log4j.appender.FILE_PER_DAY.DatePattern='_'yyyy-MM-dd
log4j.appender.FILE_PER_DAY.layout=${log.patternLayout}
log4j.appender.FILE_PER_DAY.layout.ConversionPattern=${log.pattern}
# BackUP files for size rotation with log cleanup.
log4j.appender.FILE_PER_SIZE=org.apache.log4j.RollingFileAppender
# [[ Current File ] - logRollingFile.log ], { [BackUPs] logRollingFile.log.1, logRollingFile.log.2}
log4j.appender.FILE_PER_SIZE.File=${log.path}/logRollingFile.log
log4j.appender.FILE_PER_SIZE.MaxFileSize=100KB
log4j.appender.FILE_PER_SIZE.MaxBackupIndex=2
log4j.appender.FILE_PER_SIZE.layout=${log.patternLayout}
log4j.appender.FILE_PER_SIZE.layout.ConversionPattern=${log.pattern}
# MySql Database - JDBCAppender
log4j.appender.MySql=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.MySql.driver=com.mysql.jdbc.Driver
log4j.appender.MySql.URL=jdbc:mysql://localhost:3306/automationlab
log4j.appender.MySql.user=root
log4j.appender.MySql.password=
log4j.appender.MySql.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.MySql.layout.ConversionPattern=INSERT INTO `logdata` VALUES ('%p', '%d{yyyy-MM-dd HH:mm:ss}', '%C', '%M', '%L', '%m');
#log4j.appender.MySql.sql=INSERT INTO `logdata` VALUES ('%p', '%d{yyyy-MM-dd HH:mm:ss}', '%C', '%M', '%L', '%m');
# Direct log events[Messages] to MongoDB Collection - MongoDbAppender
log.mongoDB.hostname=loalhost
log.mongoDB.userName=Yash777
log.mongoDB.password=Yash@123
log.mongoDB.DB=MyLogDB
log.mongoDB.Collection=Logs
log4j.appender.MongoDB=org.log4mongo.MongoDbAppender
log4j.appender.MongoDB.hostname=${log.mongoDB.hostname}
log4j.appender.MongoDB.userName=${log.mongoDB.userName}
log4j.appender.MongoDB.password=${log.mongoDB.password}
log4j.appender.MongoDB.port=27017
log4j.appender.MongoDB.databaseName=${log.mongoDB.DB}
log4j.appender.MongoDB.collectionName=${log.mongoDB.Collection}
log4j.appender.MongoDB.writeConcern=FSYNCED
টেবিলের জন্য মাইএসকিউএল সারণি কাঠামো logdata
CREATE TABLE IF NOT EXISTS `logdata` (
`Logger_Level` varchar(5) COLLATE utf8_unicode_ci NOT NULL,
`DataTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`ClassName` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`MethodName` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`LineNumber` int(10) NOT NULL,
`Message` text COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
- log4j_External.xML «XML লগ 4j: পাবলিক ডিটিডি ফাইলের সাথে কনফিগারেশন
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE log4j:configuration PUBLIC
"-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration debug="false">
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<param name="target" value="System.out" />
<param name="threshold" value="debug" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
</layout>
</appender>
<appender name="FILE" class="org.apache.log4j.FileAppender">
<param name="file" value="E:/Logs/logFile.log" />
<param name="append" value="false" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
</layout>
</appender>
<appender name="FILE_PER_SIZE" class="org.apache.log4j.RollingFileAppender">
<param name="file" value="E:/Logs/logRollingFile.log" />
<param name="immediateFlush" value="true"/>
<param name="maxFileSize" value="100KB" />
<param name="maxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
</layout>
</appender>
<appender name="FILE_PER_DAY" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="E:/Logs/logRollingDayFile.log" />
<param name="datePattern" value="'_'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n"/>
</layout>
</appender>
<root>
<priority value="info" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
<appender-ref ref="FILE_PER_SIZE" />
<appender-ref ref="FILE_PER_DAY" />
</root>
</log4j:configuration>
- জাভা প্রোগ্রামের URL থেকে লগ 4 জে কনফিগারেশন:
একটি বাহ্যিক ফাইলের সাথে একটি কাস্টম কনফিগারেশন নির্দিষ্ট করতে, ব্যবহৃত শ্রেণিকে কনফিগার ইন্টারফেস প্রয়োগ করতে হবে ।
যখন ডিফল্ট কনফিগারেশন ফাইলগুলি "log4j.properties", "log4j.xML" উপলব্ধ থাকে না
- "Log4j.properties" এর জন্য আপনি সম্পত্তি Configurator .configure (java.net.URL) পদ্ধতিতে খাওয়ানো যেতে পারেন ।
- "Log4j.xML" এর জন্য DOMConfigurator ব্যবহার করা হবে।
public class LogFiles {
// Define a static logger variable so that it references the Logger instance named "LogFiles".
static final Logger log = Logger.getLogger( LogFiles.class );
@SuppressWarnings("deprecation")
public static void main(String[] args) {
System.out.println("CONFIGURATION_FILE « "+LogManager.DEFAULT_CONFIGURATION_FILE);
System.out.println("DEFAULT_XML_CONFIGURATION_FILE = 'log4j.xml' « Default access modifier");
String fileName = //"";
//"log4j_External.xml";
"log4j_External.properties";
String configurationFile = System.getProperty("user.dir")+"/src/" + fileName;
if( fileName.contains(".xml") ) {
DOMConfigurator.configure( configurationFile );
log.info("Extension *.xml");
} else if ( fileName.contains(".properties") ) {
PropertyConfigurator.configure( configurationFile );
log.info("Extension *.properties");
} else {
DailyRollingFileAppender dailyRollingAppender = new DailyRollingFileAppender();
dailyRollingAppender.setFile("E:/Logs/logRollingDayFile.log");
dailyRollingAppender.setDatePattern("'_'yyyy-MM-dd");
PatternLayout layout = new PatternLayout();
layout.setConversionPattern( "%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" );
dailyRollingAppender.setLayout(layout);
dailyRollingAppender.activateOptions();
Logger rootLogger = Logger.getRootLogger();
rootLogger.setLevel(Level.DEBUG);
rootLogger.addAppender(dailyRollingAppender);
log.info("Configuring from Java Class.");
}
log.info("Console.Message.");
method2();
methodException(0);
}
static void method2() {
log.info("method2 - Console.Message.");
}
static void methodException(int b) {
try {
int a = 10/b;
System.out.println("Result : "+ a);
log.info("Result : "+ a);
} catch (Exception ex) { // ArithmeticException: / by zero
log.error(String.format("\n\tException occurred: %s", stackTraceToString(ex)));
}
}
public static String stackTraceToString(Exception ex) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
ex.printStackTrace(pw);
return sw.toString();
}
}