এই (আশ্চর্যজনক) দ্রুত এবং সহায়ক উত্তরের জন্য অনেক ধন্যবাদ; তারা আমার সমাধানের জন্য আমাকে সঠিক পথে রাখে।
কোডবেসটি আমি এটি ব্যবহার করতে চাই, জাভা.ইটিল.লগিংটিকে তার লগার প্রক্রিয়া হিসাবে ব্যবহার করি এবং লোগোজেজে বা ইন্টারফেস / ফেসেক্সগুলিতে লগের সম্পূর্ণরূপে পরিবর্তন করতে আমি এই কোডগুলিতে ঘরে যথেষ্ট অনুভব করি না। তবে এই পরামর্শগুলির উপর ভিত্তি করে আমি 'হ্যাক-আপ' করেছিলাম একটি জুলহ্যান্ডলার এক্সটেনশন এবং এটি ট্রিট হিসাবে কাজ করে।
একটি সংক্ষিপ্তসার অনুসরণ করা। প্রসারিত করুন java.util.logging.Handler
:
class LogHandler extends Handler
{
Level lastLevel = Level.FINEST;
public Level checkLevel() {
return lastLevel;
}
public void publish(LogRecord record) {
lastLevel = record.getLevel();
}
public void close(){}
public void flush(){}
}
স্পষ্টতই, আপনি আপনার কাছ থেকে যতটা চান / চান / চান ঠিক তেমন সঞ্চয় করতে পারেন LogRecord
বা আপনার একটি ওভারফ্লো না হওয়া পর্যন্ত এগুলি সমস্ত স্ট্যাকের মধ্যে ঠেলাতে পারেন।
জুনিট-পরীক্ষার প্রস্তুতির ক্ষেত্রে, আপনি একটি তৈরি করে এতে java.util.logging.Logger
নতুন একটি যুক্ত করুন LogHandler
:
@Test tester() {
Logger logger = Logger.getLogger("my junit-test logger");
LogHandler handler = new LogHandler();
handler.setLevel(Level.ALL);
logger.setUseParentHandlers(false);
logger.addHandler(handler);
logger.setLevel(Level.ALL);
কলটি setUseParentHandlers()
হ'ল সাধারণ হ্যান্ডলারদের নিঃশব্দ করা, যাতে (এই জুনিট-পরীক্ষার জন্য) অপ্রয়োজনীয় লগিং না ঘটে। আপনার কোড-আন্ডার-টেস্টে এই লগারটি ব্যবহার করার জন্য যা যা করা করুন, পরীক্ষা চালান এবং গুণমানকে দৃsert় করুন:
libraryUnderTest.setLogger(logger);
methodUnderTest(true); // see original question.
assertEquals("Log level as expected?", Level.INFO, handler.checkLevel() );
}
(অবশ্যই, আপনি এই কাজের বৃহত অংশটি একটি @Before
পদ্ধতিতে সরানো এবং বিভিন্ন ধরণের অন্যান্য উন্নতি করতে হবে, তবে এটি এই উপস্থাপনাটিকে বিশৃঙ্খলা করবে))
logger.getAllAppenders()
, তারপরে পদক্ষেপ এবংappender.setThreshold(Level.OFF)
প্রত্যেককে কল করা (এবং আপনার কাজ শেষ হয়ে গেলে সেগুলি পুনরায় সেট করুন!)। এটি নিশ্চিত করে যে আপনি যে "খারাপ" বার্তাগুলি তৈরি করার চেষ্টা করছেন তা পরীক্ষার লগগুলিতে প্রদর্শিত হবে না এবং পরবর্তী বিকাশকারীকে ফ্রিক আউট করে।