SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Java. Logging.
Log4j, SLF4j, etc
IT Academy
19/01/2015
Agenda
▪Loggin Oveview
▪Log4j Introduction
–Configuration Files
–Loggin Levels
–Appenders
–Layouts
▪Logging Tools in Java
▪Case studies
Loggin Oveview
Loggin Oveview
▪ Logging is the process of writing log messages during the
execution of a program to a central place.
▪ This logging allows you to report and persist error and
warning messages as well as info messages (e.g., runtime
statistics) so that the messages can later be retrieved and
analyzed.
▪ The object which performs the logging in applications is
typically just called Logger.
Loggin Oveview
▪ To create a logger in your Java code, you can use the following
snippet.
import java.util.logging.Logger;
… … …
// Assumes the current class is called logger
private final static Logger LOGGER =
Logger.getLogger(MyClass.class.getName());
▪ The Logger you create is actually a hierarchy of Loggers, and
a . (dot) in the hierarchy indicates a level in the hierarchy.
Log4j Introduction
Log4j Introduction
▪ Log4j initially developed in the framework of "Apache Jakarta
Project".
▪ Separated into a journaling project.
▪ Has been the de facto standard.
▪ Apache log4j is a Java-based logging utility.
▪ The log4j team has created a successor to log4j with version
number 2.0.
▪ log4j 2.0 was developed with a focus on the problems of log4j
1.2, 1.3.
▪ You can define three main components:
– Loggers, Appenders and Layouts.
Simplest Example
package com.softserve.edu;
import org.apache.log4j.Logger;
public class App {
public static final Logger LOG =
Logger.getLogger(App.class);
public static void main(String[] args) {
System.out.println("The Start");
LOG.info("Hello World!");
}
}
Loggin Oveview
▪ If the program is run
log4j:WARN No appenders could be found for
logger (com.softserve.edu.App).
log4j:WARN Please initialize the log4j system
properly.
▪ There are three ways to configure log4j: with a properties file,
with an XML file and through Java code
▪ For example, configure log4j to output to the screen.
▪ Will be used configuration files of two types:
– log4j.properties and
– log4j.xml
Loggin Levels
Loggin Levels
▪ The following list defines the log levels and messages in log4j,
in decreasing order of severity
▪ OFF: The highest possible rank and is intended to turn off
logging.
▪ FATAL: Severe errors that cause premature termination. Expect
these to be immediately visible on a status console.
▪ ERROR: Other runtime errors or unexpected conditions.
Expect these to be immediately visible on a status console.
Loggin Levels
▪ WARN: Use of deprecated APIs, poor use of API, 'almost'
errors, other runtime situations that are undesirable or
unexpected, but not necessarily "wrong". Expect these to be
immediately visible on a status console.
▪ INFO: Interesting runtime events (startup/shutdown). Expect
these to be immediately visible on a console, so be
conservative and keep to a minimum.
▪ DEBUG: Detailed information on the flow through the system.
Expect these to be written to logs only.
▪ TRACE: Most detailed information. Expect these to be written
to logs only.
Loggin Levels
Logger log = Logger.getRootLogger();
log.debug("message text");
log.debug("message text", ex);
log.info("message text");
log.info("message text", ex);
log.warn("message text");
log.warn("message text", ex);
log.error("message text");
log.error("message text", ex);
log.fatal("message text");
log.fatal("message text", ex);
Disadvantages Log4J
private static final Logger log = Logger.getLogger(App.class);
log.debug("Start processing");
// Code
if (log.isDebugEnabled()) {
log.debug("Result: "+result); }
// Code
try {
// Code
} catch (Exception e) {
log.error("Something failed", e);
}
// Code
log.debug("done");
Log4j Appenders
http://logging.apache.org/log4j/2.x/manual/appenders.html
Appenders
▪ The actual outputs are done by Appenders.
▪ There are numerous Appenders available, with descriptive
names, such as
– FileAppender, ConsoleAppender, SocketAppender,
SyslogAppender, NTEventLogAppender and even
SMTPAppender.
▪ Multiple Appenders can be attached to any Logger, so it's
possible to log the same information to multiple outputs; for
example to a file locally and to a socket listener on another
computer.
Appenders
▪ org.apache.log4j.ConsoleAppender
– the most frequently used.
▪ org.apache.log4j.FileAppender
– writes messages to the file.
▪ org.apache.log4j.DailyRollingFileAppender
– creates a new file, add the year, month and day to the
name.
▪ org.apache.log4j.RollingFileAppender
– creates a new file when the specified size, adds to the file
name index, 1, 2, 3.
▪ org.apache.log4j.net.SMTPAppender
– sending e-mails.
Log4j Layouts
http://logging.apache.org/log4j/2.x/manual/layouts.html
Layouts
▪ An Appender uses a Layout to format a LogEvent into a form
that meets the needs of whatever will be consuming the log
event.
▪ In Log4j 1.x and Logback Layouts were expected to
transform an event into a String.
▪ In Log4j 2 Layouts return a byte array.
▪ This allows the result of the Layout to be useful in many more
types of Appenders.
PatternLayout
▪ %d{ABSOLUTE}
– Displays time; ABSOLUTE – in format HH:mm:ss,SSS
▪ %5p
– Displays the log level (ERROR, DEBUG, INFO, etc.); use 5
characters, the rest padded with spaces;
▪ %t
– Displays the name of the thread;
▪ %c{1}
– class name with the package (indicates how many levels to
display);
PatternLayout
▪ %M
– The method name;
▪ %L
– Line number;
▪ %m
– Message that is sent to the log;
▪ %n
– Newline.
▪ %highlight{pattern}{style}
– Adds ANSI colors to the result of the enclosed pattern
based on the current event's logging level.
– %highlight{%d [%t]}
Output Settings
Output Settings
▪ Appenders can be easily changed.
log4j.appender.<APPENDER_NAME>.<PROPERTY>=<VALUE>
▪ For example
log4j.rootLogger=INFO, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=
[%5p] %d{mm:ss} (%F:%M:%L)%n%m%n%n
log4j.appender.stdout.target=System.err
Output Settings
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=log.txt
log4j.appender.logfile.MaxFileSize=2048KB
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=
%d %p - <%m>%n
Output Settings
▪ Output in the log for specific classes and packages
log4j.logger.<PACKAGE_NAME>=<LEVEL>
log4j.logger.<PACKAGE_NAME>.<CLASS_NAME>=
<LEVEL>, <LOGGER_NAME>
▪ How to write the log;
– Specify for the package and class,
– usage level, additional appender
Output Settings
log4j.rootLogger=warn, stdout, file
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{ABSOLUTE} %5p %t %c{1}:%M:%L - %m%n
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.file=myproject.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern=
%d{ABSOLUTE} %5p %t %c{1}:%M:%L - %m%n
Output Settings
log4j.appender.debugfile=org.apache.log4j.FileAppender
log4j.appender.debugfile.file=myproject-debug.log
log4j.appender.debugfile.layout=org.apache.log4j.PatternLayout
log4j.appender.debugfile.layout.conversionPattern=
%d{ABSOLUTE} %5p %t %c{1}:%M:%L - %m%n
log4j.logger.com.my.app.somepackage=
DEBUG, debugfile
log4j.logger.com.my.app.somepackage.subpackage.MyClass=
INFO
Case studies
package com.softserve.edu;
import com.softserve.training.Calc;
import com.softserve.training.Some;
public class App {
public static final Logger logger =
Logger.getLogger(App.class); // LoggerFactory
public static void main(String[] args) {
System.out.println("Hello from App:");
App app = new App();
Calc calc = new Calc();
Some some = new Some();
Case studies
app.appMethod();
calc.calcMethod();
some.someMethod();
}
public void appMethod() {
logger.error("App Error");
logger.warn("App Warning");
logger.info("App Info");
logger.debug("App Debug");
}
}
Case studies
package com.softserve.training;
import com.softserve.edu.App;
public class Calc {
public static final Logger logger =
Logger.getLogger(Calc.class); // LoggerFactory
public void calcMethod() {
logger.error("Calc Error");
logger.warn("Calc Warning");
logger.info("Calc Info");
logger.debug("Calc Debug");
}
}
Case studies
package com.softserve.training;
import com.softserve.edu.App;
public class Some {
public static final Logger logger =
Logger.getLogger(Some.class); // LoggerFactory
public void someMethod() {
logger.error("Some Error");
logger.warn("Some Warning");
logger.info("Some Info");
logger.debug("Some Debug");
}
}
Case studies
log4j.rootLogger=warn, stdout, file
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{ABSOLUTE} %5p %t %c{1}:%M:%L - %m%n
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.file=myproject.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern=
%d{ABSOLUTE} %5p %t %c{1}:%M:%L - %m%n
Case studies
log4j.appender.debugfile=org.apache.log4j.FileAppender
log4j.appender.debugfile.file=myproject-debug.log
log4j.appender.debugfile.layout=org.apache.log4j.PatternLayout
log4j.appender.debugfile.layout.conversionPattern=
%d{ABSOLUTE} %5p %t %c{1}:%M:%L - %m%n
log4j.logger.com.softserve.training=DEBUG, debugfile
log4j.logger.com.softserve.training.Calc=INFO
Logging Tools in Java
Logging
▪ java.util.logging JUL (JSR47 Project);
▪ commons-logging JCL;
▪ Log4J;
▪ SLF4J;
▪ Logback;
▪ TestNG Reporting;
▪ etc.
LoggerFactory SLF4J
package com.softserve.edu;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.softserve.training.Calc;
import com.softserve.training.Some;
public class App {
public static final Logger logger =
LoggerFactory.getLogger(App.class);
… … …
}
Maven Dependency
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.10</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.10</version>
</dependency>
</dependencies>
Logging

Weitere ähnliche Inhalte

Was ist angesagt?

SLF4J (Simple Logging Facade for Java)
SLF4J (Simple Logging Facade for Java)SLF4J (Simple Logging Facade for Java)
SLF4J (Simple Logging Facade for Java)
Guo Albert
 
Improving DroidBox
Improving DroidBoxImproving DroidBox
Improving DroidBox
Kelwin Yang
 
Practical byteman sample 20131128
Practical byteman sample 20131128Practical byteman sample 20131128
Practical byteman sample 20131128
Jooho Lee
 
Java bytecode and classes
Java bytecode and classesJava bytecode and classes
Java bytecode and classes
yoavwix
 
Introduction to the Java bytecode - So@t - 20130924
Introduction to the Java bytecode - So@t - 20130924Introduction to the Java bytecode - So@t - 20130924
Introduction to the Java bytecode - So@t - 20130924
yohanbeschi
 
Robot framework
Robot frameworkRobot framework
Robot framework
boriau
 

Was ist angesagt? (20)

SLF4J Explained........
SLF4J Explained........SLF4J Explained........
SLF4J Explained........
 
SLF4J (Simple Logging Facade for Java)
SLF4J (Simple Logging Facade for Java)SLF4J (Simple Logging Facade for Java)
SLF4J (Simple Logging Facade for Java)
 
Logging with Logback in Scala
Logging with Logback in ScalaLogging with Logback in Scala
Logging with Logback in Scala
 
Play Framework Logging
Play Framework LoggingPlay Framework Logging
Play Framework Logging
 
SLF4J+Logback
SLF4J+LogbackSLF4J+Logback
SLF4J+Logback
 
LOGBack and SLF4J
LOGBack and SLF4JLOGBack and SLF4J
LOGBack and SLF4J
 
Jsp project module
Jsp project moduleJsp project module
Jsp project module
 
Improving DroidBox
Improving DroidBoxImproving DroidBox
Improving DroidBox
 
Rational Robot (http://www.geektester.blogspot.com)
Rational Robot (http://www.geektester.blogspot.com)Rational Robot (http://www.geektester.blogspot.com)
Rational Robot (http://www.geektester.blogspot.com)
 
Introduction to Java 8
Introduction to Java 8Introduction to Java 8
Introduction to Java 8
 
Java history, versions, types of errors and exception, quiz
Java history, versions, types of errors and exception, quiz Java history, versions, types of errors and exception, quiz
Java history, versions, types of errors and exception, quiz
 
Java 8 Lambda and Streams
Java 8 Lambda and StreamsJava 8 Lambda and Streams
Java 8 Lambda and Streams
 
Byteman - Carving up your Java code
Byteman - Carving up your Java codeByteman - Carving up your Java code
Byteman - Carving up your Java code
 
Practical byteman sample 20131128
Practical byteman sample 20131128Practical byteman sample 20131128
Practical byteman sample 20131128
 
Java byte code & virtual machine
Java byte code & virtual machineJava byte code & virtual machine
Java byte code & virtual machine
 
Advanced Rational Robot A Tribute (http://www.geektester.blogspot.com)
Advanced Rational Robot   A Tribute (http://www.geektester.blogspot.com)Advanced Rational Robot   A Tribute (http://www.geektester.blogspot.com)
Advanced Rational Robot A Tribute (http://www.geektester.blogspot.com)
 
Network Protocol Testing Using Robot Framework
Network Protocol Testing Using Robot FrameworkNetwork Protocol Testing Using Robot Framework
Network Protocol Testing Using Robot Framework
 
Java bytecode and classes
Java bytecode and classesJava bytecode and classes
Java bytecode and classes
 
Introduction to the Java bytecode - So@t - 20130924
Introduction to the Java bytecode - So@t - 20130924Introduction to the Java bytecode - So@t - 20130924
Introduction to the Java bytecode - So@t - 20130924
 
Robot framework
Robot frameworkRobot framework
Robot framework
 

Andere mochten auch

pay it foward
pay it fowardpay it foward
pay it foward
gabydq
 
Green fax agm
Green fax  agm Green fax  agm
Green fax agm
Paul Green
 
Berntsen -chicago_my_home_town_-_08-10-11
Berntsen  -chicago_my_home_town_-_08-10-11Berntsen  -chicago_my_home_town_-_08-10-11
Berntsen -chicago_my_home_town_-_08-10-11
Rosanna Goode
 

Andere mochten auch (17)

TOPTEN Mediakit For New Home Builders
TOPTEN Mediakit For New Home BuildersTOPTEN Mediakit For New Home Builders
TOPTEN Mediakit For New Home Builders
 
pay it foward
pay it fowardpay it foward
pay it foward
 
Ad Tracker Report
Ad Tracker ReportAd Tracker Report
Ad Tracker Report
 
Educ1751 Assignment 1
Educ1751 Assignment 1Educ1751 Assignment 1
Educ1751 Assignment 1
 
Git
GitGit
Git
 
Green fax agm
Green fax  agm Green fax  agm
Green fax agm
 
Me and my goals
Me and my goalsMe and my goals
Me and my goals
 
Ad tracker
Ad trackerAd tracker
Ad tracker
 
Berntsen -chicago_my_home_town_-_08-10-11
Berntsen  -chicago_my_home_town_-_08-10-11Berntsen  -chicago_my_home_town_-_08-10-11
Berntsen -chicago_my_home_town_-_08-10-11
 
Green Fax Agm
Green Fax  AgmGreen Fax  Agm
Green Fax Agm
 
人工知能の研究開発方法について20160927
人工知能の研究開発方法について20160927人工知能の研究開発方法について20160927
人工知能の研究開発方法について20160927
 
User research at Hilti Hungary
User research at Hilti HungaryUser research at Hilti Hungary
User research at Hilti Hungary
 
プレゼンについて
プレゼンについてプレゼンについて
プレゼンについて
 
Lotus Collaboration by Le Thanh Quang in CT
Lotus Collaboration by Le Thanh Quang in CT Lotus Collaboration by Le Thanh Quang in CT
Lotus Collaboration by Le Thanh Quang in CT
 
Exception
ExceptionException
Exception
 
Human-Centered Design
Human-Centered DesignHuman-Centered Design
Human-Centered Design
 
Junit and testNG
Junit and testNGJunit and testNG
Junit and testNG
 

Ähnlich wie Logging

Java Logging discussion Log4j,Slf4j
Java Logging discussion Log4j,Slf4jJava Logging discussion Log4j,Slf4j
Java Logging discussion Log4j,Slf4j
Rajiv Gupta
 
Logging and Exception
Logging and ExceptionLogging and Exception
Logging and Exception
Azeem Mumtaz
 
Logging Services for .net - log4net
Logging Services for .net - log4netLogging Services for .net - log4net
Logging Services for .net - log4net
Guo Albert
 
LOGBack and SLF4J
LOGBack and SLF4JLOGBack and SLF4J
LOGBack and SLF4J
jkumaranc
 
LOGBack and SLF4J
LOGBack and SLF4JLOGBack and SLF4J
LOGBack and SLF4J
jkumaranc
 

Ähnlich wie Logging (20)

Log4e
Log4eLog4e
Log4e
 
Logback
LogbackLogback
Logback
 
Logging with Logback in Scala
Logging with Logback in ScalaLogging with Logback in Scala
Logging with Logback in Scala
 
Java Logging discussion Log4j,Slf4j
Java Logging discussion Log4j,Slf4jJava Logging discussion Log4j,Slf4j
Java Logging discussion Log4j,Slf4j
 
.NET @ apache.org
 .NET @ apache.org .NET @ apache.org
.NET @ apache.org
 
Logging, Serilog, Structured Logging, Seq
Logging, Serilog, Structured Logging, SeqLogging, Serilog, Structured Logging, Seq
Logging, Serilog, Structured Logging, Seq
 
Log4j
Log4jLog4j
Log4j
 
Turbo charge your logs
Turbo charge your logsTurbo charge your logs
Turbo charge your logs
 
Application Logging in the 21st century - 2014.key
Application Logging in the 21st century - 2014.keyApplication Logging in the 21st century - 2014.key
Application Logging in the 21st century - 2014.key
 
Logging & Metrics with Docker
Logging & Metrics with DockerLogging & Metrics with Docker
Logging & Metrics with Docker
 
Logging and Exception
Logging and ExceptionLogging and Exception
Logging and Exception
 
Rein_in_the_ability_of_log4j
Rein_in_the_ability_of_log4jRein_in_the_ability_of_log4j
Rein_in_the_ability_of_log4j
 
Logging Services for .net - log4net
Logging Services for .net - log4netLogging Services for .net - log4net
Logging Services for .net - log4net
 
Log4e
Log4eLog4e
Log4e
 
11i Logs
11i Logs11i Logs
11i Logs
 
Java Logging
Java LoggingJava Logging
Java Logging
 
Php logging
Php loggingPhp logging
Php logging
 
LOGBack and SLF4J
LOGBack and SLF4JLOGBack and SLF4J
LOGBack and SLF4J
 
LOGBack and SLF4J
LOGBack and SLF4JLOGBack and SLF4J
LOGBack and SLF4J
 
LOGBack and SLF4J
LOGBack and SLF4JLOGBack and SLF4J
LOGBack and SLF4J
 

Kürzlich hochgeladen

AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 

Kürzlich hochgeladen (20)

AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verifiedSector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 

Logging