উত্তর:
আপনার log4j.properties
(বিকল্প লগার, বা লগ 4 জ এর এক্সএমএল ফর্ম্যাটের জন্য, ডক্সটি পরীক্ষা করুন)
আপনার লেনদেন পরিচালকের উপর নির্ভর করে আপনি বসন্ত কাঠামোর লগিং স্তর সেট করতে পারেন যাতে এটি আপনাকে লেনদেন সম্পর্কে আরও তথ্য দেয়। উদাহরণস্বরূপ, ব্যবহারের ক্ষেত্রে JpaTransactionManager
, আপনি সেট করেছেন
log4j.logger.org.springframework.orm.jpa=INFO
(এটি আপনার লেনদেন পরিচালকের প্যাকেজ) এবং এছাড়াও
log4j.logger.org.springframework.transaction=INFO
যদি INFO
পর্যাপ্ত না হয় তবে ব্যবহার করুনDEBUG
আমার জন্য, যুক্ত করার জন্য একটি ভাল লগিং কনফিগারেশনটি ছিল:
log4j.logger.org.springframework.transaction.intercepor = ট্রেস
এটি আমাকে এর মতো লগ প্রদর্শন করবে:
2012-08-22 18: 50: 00,031 ট্র্যাক - [com.MyClass.myMethod] এর জন্য লেনদেন হচ্ছে
[পদ্ধতি com থেকে আমার নিজস্ব লগ বিবৃতি। MyClass.myMethod]
2012-08-22 18: 50: 00,142 ট্র্যাক - [com.MyClass.myMethod] এর জন্য সম্পূর্ণ লেনদেন
সঙ্গে স্প্রিং বুট অ্যাপ্লিকেশন application.properties
logging.level.ROOT=INFO
logging.level.org.springframework.orm.jpa=DEBUG
logging.level.org.springframework.transaction=DEBUG
অথবা আপনি যদি ইয়ামলকে পছন্দ করেন ( application.yaml
)
logging:
level:
org.springframework.orm.jpa: DEBUG
org.springframework.transaction: DEBUG
সর্বাধিক আকর্ষণীয় লগ তথ্য JtaTransactionManager.java
(যদি এই প্রশ্নটি এখনও সম্পর্কে থাকে JtaTransactionManager
) DEBUG
অগ্রাধিকারে লগ হয় । ধরে log4j.properties
নিচ্ছি ক্লাসপথে আপনার কোথাও রয়েছে, আমি এইভাবে ব্যবহারের পরামর্শ দেব:
log4j.logger.org.springframework.transaction=DEBUG
আপনি রানটাইমে স্প্রিং ক্লাসে অ্যাক্সেস করতে পারেন বলে আপনি লেনদেনের স্থিতি নির্ধারণ করতে পারেন। এই নিবন্ধটি আপনাকে সাহায্য করতে পারে:
isActualTransactionActive()
প্রতিটি লগিং কলটিতে পুনরুদ্ধার করার পরিবর্তে রেফারেন্সটিকে ক্যাশে করতে সম্ভবত থ্রেড-লোকাল ভেরিয়েবল ব্যবহার করা উচিত ।
Ch.qos.logback.core.LayoutBase থেকে প্রাপ্ত আমার লগব্যাক লেআউট বাস্তবায়নে আমি এখানে কিছু কোড ব্যবহার করছি ।
পদ্ধতির উল্লেখটি সংরক্ষণ করার জন্য আমি একটি থ্রেড-লোকাল ভেরিয়েবল তৈরি করি org.springframework.transaction.support.TransactionSynchronizationManager.isActualTransactionActive()
। যখনই কোনও নতুন লগ লাইন প্রিন্ট করা হবে তখন getSpringTransactionInfo()
তাকে ডাকা হয় এবং এটি এক-অক্ষরযুক্ত স্ট্রিং দেয় যা লগতে চলে যায়।
তথ্যসূত্র:
কোড:
private static ThreadLocal<Method> txCheckMethod;
private static String getSpringTransactionInfo() {
if (txCheckMethod == null) {
txCheckMethod = new ThreadLocal<Method>() {
@Override public Method initialValue() {
try {
ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
Class<?> tsmClass = contextClassLoader.loadClass("org.springframework.transaction.support.TransactionSynchronizationManager");
return tsmClass.getMethod("isActualTransactionActive", (Class<?>[])null);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
};
}
assert txCheckMethod != null;
Method m = txCheckMethod.get();
String res;
if (m == null) {
res = " "; // there is no Spring here
}
else {
Boolean isActive = null;
try {
isActive = (Boolean) m.invoke((Object)null);
if (isActive) {
res = "T"; // transaction active
}
else {
res = "~"; // transaction inactive
}
}
catch (Exception exe) {
// suppress
res = "?";
}
}
return res;
}
INFO
স্তর কোনও tx ক্রিয়াকলাপটি মোটেও দেখায় না, এটি খুব ভার্জোজ হবে।DEBUG
সেখানে প্রয়োজনীয় হবে।