লগে একটি বসন্তের লেনদেন দেখানো হচ্ছে


102

আমি লেনদেনমূলক সমর্থন সহ বসন্ত কনফিগার করেছি। আমি সবকিছু সঠিকভাবে স্থাপন করেছি তা নিশ্চিত করার জন্য লেনদেনে লগ করার কোনও উপায় আছে কি? লগতে প্রদর্শিত হচ্ছে যা ঘটছে তা দেখার একটি ভাল উপায়।

উত্তর:


96

আপনার log4j.properties(বিকল্প লগার, বা লগ 4 জ এর এক্সএমএল ফর্ম্যাটের জন্য, ডক্সটি পরীক্ষা করুন)

আপনার লেনদেন পরিচালকের উপর নির্ভর করে আপনি বসন্ত কাঠামোর লগিং স্তর সেট করতে পারেন যাতে এটি আপনাকে লেনদেন সম্পর্কে আরও তথ্য দেয়। উদাহরণস্বরূপ, ব্যবহারের ক্ষেত্রে JpaTransactionManager, আপনি সেট করেছেন

log4j.logger.org.springframework.orm.jpa=INFO

(এটি আপনার লেনদেন পরিচালকের প্যাকেজ) এবং এছাড়াও

log4j.logger.org.springframework.transaction=INFO

যদি INFOপর্যাপ্ত না হয় তবে ব্যবহার করুনDEBUG


7
INFOস্তর কোনও tx ক্রিয়াকলাপটি মোটেও দেখায় না, এটি খুব ভার্জোজ হবে। DEBUGসেখানে প্রয়োজনীয় হবে।
স্কাফম্যান

@ বোঝো আমি জেপাট্রান্সঅ্যাকশন ম্যানেজার এবং যখন পুল থেকে সংযোগ নেওয়া হয় এবং নির্দিষ্ট লেনদেনের জন্য ছেড়ে দেওয়া হয় তখন আমি তা পর্যবেক্ষণ করতে চাই।
আলী

তারপরে আপনাকে আপনার সংযোগ পুলের জন্য লগিং কনফিগারেশনটি পরিবর্তন করতে হবে
বোঝো

আমরা যদি মায়াবটিস + এসএলএফ 4 জে + লগব্যাক + স্প্রিংবুট ব্যবহার করি?
লিলি

66

আমার জন্য, যুক্ত করার জন্য একটি ভাল লগিং কনফিগারেশনটি ছিল:

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] এর জন্য সম্পূর্ণ লেনদেন


1
গ্রেট! অন্যান্য প্যাকেজগুলির সমস্ত তথ্য / ডিবাগ / ট্রেস লগিংয়ের প্রয়োজন নেই, যখন আপনি এটি যা খুঁজছেন: ডি
জোহান্নেক

31

সঙ্গে স্প্রিং বুট অ্যাপ্লিকেশন 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

1
মোহন মত কাজ করে
বেন

9

সর্বাধিক আকর্ষণীয় লগ তথ্য JtaTransactionManager.java(যদি এই প্রশ্নটি এখনও সম্পর্কে থাকে JtaTransactionManager) DEBUGঅগ্রাধিকারে লগ হয় । ধরে log4j.propertiesনিচ্ছি ক্লাসপথে আপনার কোথাও রয়েছে, আমি এইভাবে ব্যবহারের পরামর্শ দেব:

log4j.logger.org.springframework.transaction=DEBUG

7

আপনি রানটাইমে স্প্রিং ক্লাসে অ্যাক্সেস করতে পারেন বলে আপনি লেনদেনের স্থিতি নির্ধারণ করতে পারেন। এই নিবন্ধটি আপনাকে সাহায্য করতে পারে:

https://dzone.com/articles/monitoring-declarative-transac


খুব ভাঙা, তবে চেষ্টা করুন: স্প্রিংয়ের @ ট্রানজেকশনাল টীকাটি ডিবাগ করার টিপস (এটি এখনও নিজে চেষ্টা করেননি)। এটি লেনদেনের স্থিতি পেতে লেনদেনের সিনক্রোনাইজেশন ম্যানেজার ব্যবহার করে । কোডটি isActualTransactionActive()প্রতিটি লগিং কলটিতে পুনরুদ্ধার করার পরিবর্তে রেফারেন্সটিকে ক্যাশে করতে সম্ভবত থ্রেড-লোকাল ভেরিয়েবল ব্যবহার করা উচিত ।
ডেভিড টনহোফার

6

আপনি জেডিবিসি লগিংও সক্ষম করতে পারবেন:

log4j.logger.org.springframework.jdbc=DEBUG

1

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;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.