Log4j এবং SLF4J দুটি জনপ্রিয় লাইব্রেরি যা অ্যাপ্লিকেশনগুলিতে লগিং ব্যবস্থাপনা সহজ করে। Apache CXF, যেহেতু একটি ওয়েব সার্ভিস ফ্রেমওয়ার্ক, লগিং এবং ডিবাগিংয়ের জন্য Log4j বা SLF4J এর মতো আধুনিক লগিং ফ্রেমওয়ার্কের সাথে ইন্টিগ্রেট হতে পারে। লগিং সিস্টেমের মাধ্যমে সার্ভিসের কার্যকারিতা ট্র্যাক করা, ত্রুটি নির্ণয় করা, এবং সিস্টেমের পারফরম্যান্স মনিটর করা সহজ হয়।
Apache CXF সাধারণত SLF4J বা Log4j ব্যবহার করে সার্ভিসের কার্যক্রম লগ করে। এখানে আলোচনা করা হবে কিভাবে Log4j এবং SLF4J এর সাথে Apache CXF ইন্টিগ্রেট করা যায়।
Apache CXF লগিং কনফিগারেশনকে সহজ করার জন্য SLF4J ব্যবহার করে। SLF4J এর মাধ্যমে আপনি একাধিক লগিং ফ্রেমওয়ার্ক ব্যবহার করতে পারেন। Log4j SLF4J এর একটি কনক্রিট ইমপ্লিমেন্টেশন (implementation) হিসাবে কাজ করতে পারে।
Apache CXF, Log4j এবং SLF4J ইন্টিগ্রেশন করার জন্য প্রথমে Maven প্রজেক্টে সঠিক ডিপেনডেন্সি অ্যাড করতে হবে।
<dependencies>
<!-- SLF4J API -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.32</version>
</dependency>
<!-- Log4j2 SLF4J binding -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.14.1</version>
</dependency>
<!-- Log4j2 Core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
<!-- Apache CXF -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-logging</artifactId>
<version>3.4.5</version>
</dependency>
</dependencies>
slf4j-api
: SLF4J APIlog4j-slf4j-impl
: SLF4J এর জন্য Log4j2 ইমপ্লিমেন্টেশনlog4j-core
: Log4j2 মূল কার্যকারিতাcxf-rt-logging
: Apache CXF এর লগিং কার্যকারিতাLog4j সাধারণত log4j2.xml
কনফিগারেশন ফাইল ব্যবহার করে। আপনাকে log4j2.xml
ফাইলটি src/main/resources
ডিরেক্টরিতে রাখতে হবে।
log4j2.xml Example:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<!-- Console Appender -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level: %msg%n%throwable"/>
</Console>
<!-- File Appender -->
<File name="File" fileName="logs/app.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level: %msg%n%throwable"/>
</File>
</Appenders>
<Loggers>
<!-- Root Logger -->
<Root level="debug">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
<!-- Apache CXF Logging -->
<Logger name="org.apache.cxf" level="DEBUG" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Logger>
</Loggers>
</Configuration>
এখানে:
app.log
এ সেভ করবে।Apache CXF-এর লগিং কার্যক্রম SLF4J বা Log4j এর মাধ্যমে কনফিগার করা যায়। CXF ডিফল্টভাবে SLF4J সমর্থন করে, এবং আপনি CXF সার্ভিস বা ক্লায়েন্টের বিভিন্ন অংশে লগিং সক্রিয় করতে পারেন।
import org.apache.cxf.jaxrs.JAXRSConfiguration;
import org.apache.cxf.jaxrs.client.WebClient;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
public class CXFLoggingExample {
public static void main(String[] args) {
// Create JAX-WS Client
JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();
factoryBean.setServiceClass(MyWebService.class);
factoryBean.setAddress("http://localhost:8080/mywebservice");
// Enable Logging
factoryBean.getInInterceptors().add(new LoggingInInterceptor());
factoryBean.getOutInterceptors().add(new LoggingOutInterceptor());
// Create and invoke client
MyWebService service = (MyWebService) factoryBean.create();
String response = service.someOperation();
System.out.println("Response: " + response);
}
}
এখানে, LoggingInInterceptor
এবং LoggingOutInterceptor
ক্লায়েন্টের ইনপুট এবং আউটপুট মেসেজ লগ করতে ব্যবহৃত হচ্ছে।
Apache CXF ওয়েব সার্ভিসে SLF4J এবং Log4j ব্যবহার করে, আপনি ইনপুট এবং আউটপুট মেসেজ, HTTP রিকোয়েস্ট, রেসপন্স, এবং ত্রুটি লগ করতে পারেন।
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
public class MyServiceLoggingConfig {
public static void configureLogging(JAXRSConfiguration config) {
config.getInInterceptors().add(new LoggingInInterceptor());
config.getOutInterceptors().add(new LoggingOutInterceptor());
}
}
এখানে, ইনপুট এবং আউটপুট মেসেজগুলো কনসোল এবং ফাইল উভয় জায়গায় লগ হবে, যেটি কনফিগার করা হয়েছে log4j2.xml
ফাইলে।
আপনি SLF4J API ব্যবহার করে কাস্টম লগ তৈরি করতে পারেন, যা Log4j দ্বারা রাউট করা হবে। উদাহরণস্বরূপ:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyService {
private static final Logger logger = LoggerFactory.getLogger(MyService.class);
public String processRequest(String request) {
logger.info("Received request: " + request);
try {
// Business logic
return "Processed: " + request;
} catch (Exception e) {
logger.error("Error processing request", e);
return "Error processing request";
}
}
}
এখানে, SLF4J API ব্যবহার করে লগ তৈরি করা হয়েছে, এবং এটি Log4j দ্বারা প্রক্রিয়াকৃত হবে।