গ্রেড বুট পরীক্ষায় শাটডাউন হুক থেকে আউটপুট কীভাবে বন্ধ করা যায়?


13

আপনি https://start.spring.io/starter.zip?type=gradle-project&language=java&bootVersion=2.2.5.RELEASE&baseDir=demo&groupId=com.example&artifactId=demo&name থেকে এই ইস্যুতে start.spring.io থেকে এই সমস্যাটির জন্য একটি প্রকল্প তৈরি করতে পারেন = ডেমো & বর্ণনা = ডেমো% 20project% 20% 20Spring% 20Boot & packagename = com.example.demo ও প্যাকেজিং = বয়াম & javaVersion = 1.8 & নির্ভরতা = H2, ডেটা-jpa, ওয়েব

আমার গ্রেডেল দিয়ে নির্মিত একটি মাল্টি-মডিউল স্প্রিংবুট অ্যাপ্লিকেশন রয়েছে, স্প্রিংবুট ইন্টিগ্রেশন পরীক্ষার একটি গুচ্ছ রয়েছে। আমি যখন কোনও বিল্ড করি তখন নীচের মত দেখানো মত স্প্রিংবুট শাটডাউন থেকে কনসোল পর্যন্ত কিছু আউটপুট শেষ করি। আমি কীভাবে এই আউটপুটটি বন্ধ করব?

± |master 1 {1} S:3 U:10 ✗|  ./gradlew build

> Task :core:test
2020-02-01 11:20:33.529  INFO 24114 --- [extShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2020-02-01 11:20:33.531  INFO 24114 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2020-02-01 11:20:33.538  INFO 24114 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

> Task :email:test
2020-02-01 11:20:43.820  INFO 24150 --- [extShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2020-02-01 11:20:43.820  INFO 24150 --- [extShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2020-02-01 11:20:43.822  INFO 24150 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-2 - Shutdown initiated...
2020-02-01 11:20:43.822  INFO 24150 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2020-02-01 11:20:43.830  INFO 24150 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
2020-02-01 11:20:43.830  INFO 24150 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-2 - Shutdown completed.

> Task :security:test
2020-02-01 11:20:54.941  INFO 24188 --- [extShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2020-02-01 11:20:54.944  INFO 24188 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2020-02-01 11:20:54.952  INFO 24188 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.1.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 46s
57 actionable tasks: 54 executed, 3 up-to-date

রেফারেন্সের জন্য গ্রেডের সাথে start.spring.io থেকে তৈরি একটি অ্যাপ্লিকেশন স্ক্রিনে কোনও আউটপুট উত্পাদন করে না

./gradlew build

BUILD SUCCESSFUL in 779ms
5 actionable tasks: 5 up-to-date

পরিবর্তে আউটপুট স্থাপন করা হয় build/reports/

আমার ক্ষেত্রে আমি লগিং কনফিগারেশনে কোনও পরিবর্তন আনি যা বুটের সাথে আসে। লগিং স্তরের জন্য কোনও লগব্যাক.এক্সএমএল বা অ্যাপ্লিকেশন.আইএমএল-তে পরিবর্তন নেই। আমি প্রত্যাশা করছি যে গ্রেডল সিস্টেমটি ক্যাপচার করছে এবং সিস্টেম ত্রুটি এবং সেগুলিতে প্রেরণ করছে build/reports/তবে কিছু ফলাফল আউট সিস্টেমের বাইরে চলে যাচ্ছে বলে মনে হচ্ছে।


2
এই প্যাকেজগুলি বা ক্লাসগুলির জন্য লগিং স্তরটি নীচে INFO(বা সম্পূর্ণ অপসারণ) এর সাথে সামঞ্জস্য করা ।
কায়ামান

2
সেগুলি INFOহ'ল স্তরের লগ লাইন। আপনি যেমন দেখছেন সেগুলি শাটডাউন হুক থেকে উদ্ভূত হয়েছে এবং লগিং কনফিগার করা হয়েছে যেখানে সেগুলি শেষ হয়। আমি মনে করি তাত্ত্বিকভাবে বার্তাগুলি লগিং কনফিগারেশন পরিবর্তনের কারণে এবং তারপরে হুকগুলি অ্যাসিক্রোনারিকভাবে কার্যকর করা হওয়ার কারণে উদ্দেশ্য থেকে আলাদা জায়গায় এসে শেষ হতে পারে। পূর্ববর্তী কনফিগারটি লোড করা হওয়ায় এটি কনসোলে সেই লাইনগুলিকে ডিফল্ট করবে। হতে পারে.
কায়মান

1
আপনি কি আপনার পরীক্ষার শ্রেণি এবং আপনার মূল অ্যাপ্লিকেশন শ্রেণিটি যুক্ত করতে পারেন? এবং কোনও প্রাসঙ্গিক অ্যাপ্লিকেশন.প্রপার্টি / জিমেল ডেটাসোর্স কনফিগারেশনের মাধ্যমে সহায়তা করেছে?
ড্যারেন ফোরসিথে

3
এটি হতে পারে যে গ্রেডল টেস্ট কর্মী প্রসেসগুলি তাদের আউটপুট পুনর্নির্দেশটি টিয়ারড করার পরে ডাউন হয়ে গেলে শাটডাউন হুকগুলি ঘটে। আলোচনাটি খোলার জন্য এটি গ্রেড / গ্রেড ইস্যুতে মূল্যবান হতে পারে।
এসকাতোস

2
জেভিএম শাটডাউন হুকের উপর নির্ভর না করেই আপনার পরীক্ষাগুলিতে আদর্শভাবে বসন্ত বুট বন্ধ হয়ে যায়, এটি একটি বসন্তের সমস্যা।
এসকাতোস

উত্তর:


4

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

এই বার্তাগুলি বসন্ত বুটের মাধ্যমে উত্পন্ন হওয়ায় লগব্যাক পরীক্ষার কনফিগারেশন এক্সএমএল ব্যবহার করে শাটডাউন বার্তাগুলি ফিল্টার করা সবচেয়ে ভাল জায়গা।

এসসিআর / পরীক্ষা / সংস্থানগুলির ভিতরে লগব্যাক-টেস্ট.এক্সএমএল এর মতো কিছু

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
                <expression>return event.getThreadName().contains("ShutdownHook");</expression>
            </evaluator>
            <OnMismatch>NEUTRAL</OnMismatch>
            <OnMatch>DENY</OnMatch>
        </filter>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

build.gradle

testCompile 'org.codehaus.janino:janino'

1
আইএমও এখন পর্যন্ত সবচেয়ে ভাল কাজের উত্তর।
স্টিফেন হারবিচ

3

পরীক্ষার জেভিএমের স্টাডাউট / স্টাডারকে নিয়ন্ত্রণ করার জন্য, কোনও কোনও টাস্কের লগ কী করে তা আউটপুট অক্ষম করতে বা সিদ্ধান্ত নিতে পারে :TestLoggingContainer testLogging.showStandardStreams = false onOutputTest

apply plugin: 'java'

test {

    // show standard out and standard error of the test JVM on the console
    // can be used to disable the console output:
    testLogging.showStandardStreams = true

    // listen to standard out and standard error of the test JVM
    // can be used to make the logging optional:
    onOutput { descriptor, event ->
        logger.lifecycle("Test: " + descriptor + " produced standard out/err: " + event.message)
    }
}

এই স্ট্রীমগুলি TestLogEvent STANDARD_OUT& STANDARD_ERROR, যা জেভিএম থেকে আসছে। যখন এক একটি নির্ধারণ করতে পারেন event.messageধারণকারী extShutdownHook, এক লগিং এড়িয়ে যেতে পারেন।


দেখুন সমস্যাটি পুনরুত্পাদন করতে আপনি start.spring.io থেকে শুরু করে এই সমস্যাটির জন্য একটি প্রকল্প তৈরি করতে পারেন
এএমএস

এটি সম্ভবত একটি নন-ইস্যু, কারণ INFOস্প্রিংয়ের জন্য এটি ডিফল্ট লগিং স্তর; একটি অন্যান্য লগ-স্তর নির্ধারণ করতে পারে, যেমন। logging.level.org.springframework=TRACEপরিবেশগত পরিবর্তনশীল হিসাবে।
মার্টিন জিটলার

1
আমার বিশ্বাস শটডাউন হুক লগগুলি পরীক্ষার কার্যের বাইরে তৈরি করা হয়। কেউ কীভাবে শাটডাউন হুক ম্যাসেজগুলি ফিল্টার করতে পারে তা দেখাতে আপনি নিজের উত্তর আপডেট করতে পারবেন? আমি মনে করি এই বার্তাগুলি ফিল্টার করার সেরা জায়গাটি যেখানে সেগুলি উত্পন্ন হয় যা যাইহোক বসন্ত বুটে boot
সাগর বীরম

3

আমি এসআরসি / পরীক্ষা / সংস্থানগুলিতে ফোলিং যোগ করে স্প্রিং-ডেটা নির্দিষ্ট পরীক্ষা- নিরীক্ষণ ( এই স্প্রিং-স্টার্টারের ভিত্তিতে ) আড়াল application.propertiesকরতে পারি :

logging.level.root=ERROR

logging.level.org.springframeworkযেমন com.zaxxer.hikariলগারের উপর প্রভাব ফেলবে না , তবে আপনার এখানে নমনীয় বিকল্প রয়েছে।

( root=ERRORএটি "স্লেজ হাতুড়ি পদ্ধতির মতো")।

( src/main/resourcesএটিও সম্ভব তবে কেবল পরীক্ষায় নয় অ্যাপ্লিকেশন রানটাইমের সময়ও এর প্রভাব রয়েছে) ( এই সম্পত্তির জন্য অনেকগুলি সম্ভাব্য "অবস্থানগুলিরapplication.properties মধ্যে কেবল একটি ... এটি আরও দেখুন: https://docs.spring.io/spring-boot/ দস্তাবেজ / বর্তমান / রেফারেন্স / এইচটিএমএল / পরিশিষ্ট-অ্যাপ্লিকেশন-বৈশিষ্ট্য html )

এটির সাথে আমি একটি "নীরব" গ্রেডেল আউটপুটও পাই clean build:

$ ./gradlew clean build

BUILD SUCCESSFUL in 10s
7 actionable tasks: 7 executed

0

গ্রেডল একটি শান্ত মোড আছে।

./gradlew build -q

তবে পরীক্ষাগুলি সম্পর্কে আপনার এখনও তথ্য প্রয়োজন। আপনি জ্যাকো এবং সোনারকোব ব্যবহার করতে পারেন। এটি এখানে এবং এখানে আমার জন্য কাজ করেছিল ।

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