প্রতিটি লগের শুরুতে লগব্যাককে তার নিজস্ব স্ট্যাটাস আউটপুট করা থেকে কীভাবে প্রতিরোধ করবেন?


145

এটি একটি গাফিলতির ত্রুটির মতো বলে মনে হচ্ছে তবে আমি কারণটি খুঁজে পাচ্ছি না। লগব্যাক / এসএলফ 4 জে লগিং (সর্বাধিক সাম্প্রতিক সংস্করণ slf4j-api-1.6.1, লগব্যাক কোর / ক্লাসিক 0.9.24)। পরীক্ষার জন্য সহজ লগ কনফিগারেশন হ'ল:

<configuration>
 <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
  <layout class="ch.qos.logback.classic.PatternLayout">
   <!-- DONT USE THIS FORMATTER FOR LIVE LOGGING THE %L LINE NUMBER OUTPUTTER IS SLOW -->
   <pattern>%le %-1r [%c{1}:%L] %m%n</pattern>
  </layout>
 </appender>
 <root level="DEBUG">
  <appender-ref ref="stdout" />
 </root>
</configuration>

প্রতিটি লগ সেটআপটি লগব্যাকের অভ্যন্তরীণ স্থিতি রেখার সাথে শুরু হয়:

11:21:27,825 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
11:21:27,826 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [file:.../logback-test.xml]
11:21:28,116 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
11:21:28,124 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
11:21:28,129 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [stdout]
11:21:28,180 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Pushing component [layout] on top of the object stack.
11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - This appender no longer admits a layout as a sub-component, set an encoder instead.
11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
11:21:28,207 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
11:21:28,207 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [stdout] to Logger[ROOT]

যা ডক্স অনুসারে, ফর্ম্যাট লগব্যাকটি ডিফল্টর জন্য ব্যবহার করে। এরপরে এটি কনফিগারটি পড়া শেষ করে (যা আলাদা ফরম্যাটে আউটপুট সেট আপ করা হয়) এবং সঠিকভাবে ফর্ম্যাট করা আউটপুট সহ চালিয়ে যায়। একটি কনফিগার প্যারামিটার রয়েছে <configuration debug="false">যা এটি প্রভাবিত করে না।

কেউ কীভাবে এই বন্ধ করতে জানেন?


লগব্যাকের সাম্প্রতিক সংস্করণগুলি% L গণনার ক্ষেত্রে অনেক দ্রুত।
থরবজর্ন রাভন অ্যান্ডারসন

@ থরবজরনরভান অ্যান্ডারসন ডকস বলেছেন "এল / লাইন: লাইন নম্বর তথ্য উত্পন্ন করা খুব দ্রুত নয়। সুতরাং, মৃত্যুদন্ড কার্যকর করার গতি কোনও সমস্যা না হলে এর ব্যবহার এড়ানো উচিত।" এফডাব্লুআইডাব্লু : লগব্যাক.কোস.ইচ / ম্যানুয়াল / প্লেসআউট.এইচটিএমএল (তাই সম্ভবত এটি দ্রুত কিন্তু তবুও সুপার দ্রুত বা কিছু নয় ...)
রজারডপ্যাক

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

উত্তর:


249

আপনি যদি উপাদানটির debugবৈশিষ্ট্যটি এতে সেট করেন তবে আপনি কনসোলে সমস্ত স্থিতির তথ্য পাবেন। এটি যদি আপনার সমস্যা হয় তবে কেবল এটি মিথ্যাতে সেট করুন বা এটি মুছে ফেলুন।configurationtrue

আপনার যদি স্তরের WARNবা তার উপরে কোনও কনফিগারেশন সমস্যা থাকে তবে আপনি কনসোলে লগইন করা সমস্ত স্থিতির তথ্যও পাবেন (স্তরের বার্তা সহ INFO)। এই সমস্যার সর্বোত্তম সমাধান হ'ল সমস্যাটি স্থির করা (আপনার ক্ষেত্রে <layout>উপাদানটিকে একটি <encoder>উপাদান দিয়ে প্রতিস্থাপন করুন )।

আপনি যদি কোনও কারণে সমস্যাটি সমাধান করতে না পারেন তবে কনসোল থেকে স্থিতি-তথ্যটি সরাতে চান, তবে পরিবর্তে আপনি বিকল্পটি কনফিগার করতে পারেন StatusListenerNopStatusListenerস্থিতি-তথ্য সম্পূর্ণরূপে অপসারণ করতে ব্যবহার করুন:

<configuration>
  <statusListener class="ch.qos.logback.core.status.NopStatusListener" />
  <!-- etc -->
</configuration>

9
এই সঠিক উত্তর, এটি আরও upvated করা উচিত, ধন্যবাদ। (লগব্যাক 1.0.11)
জাকব কুলহান

3
এটি কাজ করে। আমি সম্পূর্ণ পরিষ্কার ছিলাম না যে INFOলগ বার্তাগুলিও অদৃশ্য হয়ে যাবে, তবে বাস্তবে তারা তা করে। আমি জানি উত্তরটি এটি বলে, কিন্তু কোনও কারণে এটি আমার কাছে পরিষ্কার ছিল না। পরিষ্কার-পরিচ্ছন্ন হওয়ার জন্য: এনকোডার / লেআউটের সমস্যাটি সমাধান করুন এবং কেবল সতর্কতা বার্তাগুলিই চলে যাবে না, তথ্যের বার্তাগুলিও সমস্যার সাথে সম্পর্কিত না থাকলেও তা চলে যাবে।
জেসন

3
ডিবাগ বৈশিষ্ট্য নিয়ে কাজ করেনি, তবে স্থিতি শ্রোতার সাথে নির্দোষভাবে কাজ করেছেন।
আমেবা স্পুগনোসা

ধন্যবাদ - প্রয়োজনীয় স্থিতি শ্রোতা।
এজেকিয়েল ভিক্টর

2
এই পদ্ধতির ব্যবহারে যত্নশীল, এটি কাজ করে বলে মনে হচ্ছে তবে এটি আপনার ফাইলে একটি কনফিগারেশন ত্রুটি রয়েছে তা লুকিয়ে রাখে। আসল সমস্যাটি হ'ল ওয়ার লগ, এই সমস্যাগুলি কনফিগারেশনে স্থির করা উচিত, তারপরে সমস্ত লগ ইনক। INFO চলে যান।
টেকনোপল

45

ডক্সে বর্ণিত হিসাবে , কনফিগারেশন ফাইল বিশ্লেষণের সময় যদি সতর্কতা বা ত্রুটি দেখা দেয় তবে লগব্যাক স্বয়ংক্রিয়ভাবে কনসোলের স্থিতির ডেটা মুদ্রণ করবে।

Http://logback.qos.ch/codes.html#layoutInsteadOfEncoder অর্থাৎ এর সতর্কতা বার্তায় লগব্যাক দ্বারা উল্লিখিত লিঙ্কটি অনুসরণ করুন । একবার আপনি এতে উল্লিখিত পদক্ষেপগুলি অনুসরণ করেন, এটি হল << আউটআউট> উপাদানটি <এনকোডার> দিয়ে প্রতিস্থাপন করলে লগব্যাক কনসোলে বার্তা প্রিন্ট করা বন্ধ করবে।


4
ডান অনুসারে বাছাই করুন, যদিও আপনি আমাকে সঠিক দিকে নির্দেশ করেছেন। আমি প্রভাব ছাড়াই সেই এনকোডার সিনট্যাক্সে পরিবর্তিত হয়েছি, যদিও দেখা যাচ্ছে যে লগব্যাক.এক্সএমএলে অন্য একটি লাইন অপসারণের ফলে একটি সতর্কতা দেখা দিয়েছে did এটি সম্পর্কে বিভ্রান্তিমূলক বিষয়টি হ'ল আউটপুটটি আসলে আপনার লগব্যাক ফাইলকে বিশ্লেষণ করার আগে সিদ্ধান্ত গ্রহণের সিদ্ধান্ত নেয় বলে মনে হয় (1> সংস্থান খুঁজে পাওয়া যায়নি [লগব্যাক.groovy], 2> প্রাপ্ত সংস্থান [লগব্যাক-টেস্ট.এক্সএমএল])। লগব্যাক-পরীক্ষার স্থিরতার জন্য স্থিতি বার্তাগুলি পার্স হওয়ার আগে যা ঘটেছিল তা লুকানোর জন্য এটি বেশ বিভ্রান্তিকর। তবে পয়েন্টারের জন্য ধন্যবাদ।
স্টিভ বি

5
আমি মনে করি স্টিভ বি বলতে যা বোঝায় তা হ'ল লঙ্ঘনকারী (বা কমপক্ষে অপ্রচলিত) যে কনফিগারেশন ফাইলটি লোড করার আগে (এবং বিশেষত) সমস্ত স্ট্যাটাস বার্তা দমন করা উচিত , যদি না এটি কনফিগারেশনের পরে কোনও ত্রুটির সম্মুখীন হয়। আপনি যখন এই নিয়মের সাথে অপরিচিত হন এবং প্রথমে এই স্থিতি বার্তাগুলি দেখতে পান (যা একটি কনফিগারেশন সতর্কতা বা ত্রুটি বোঝায়), বেশিরভাগ ব্যবহারকারীরা প্রত্যাশা করবেন যে একবার ত্রুটিটি সমাধান হয়ে গেলে লগব্যাক আর সম্পর্কিত ত্রুটি বার্তাগুলি মুদ্রণ করবে না, তবে অন্যটি মুদ্রণ অবিরত করবে স্থিতি বার্তা
ডেরেক মাহর

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

4
@ সেকি: অবশেষে আমি এটি আবিষ্কার করেছি: এই বার্তাগুলি ট্রিগার করার দ্বিতীয় উপায় হ'ল debug="true"এর configurationউপাদানটিতে বৈশিষ্ট্য থাকা logback.xml। এই গর্তে পড়ে এমন অন্যান্য ব্যক্তির সুবিধার জন্য দয়া করে এটি উল্লেখ করুন!
কার্ল স্মট্রিক্জ

6
সম্ভবত প্রথম আইএনএফও বিবৃতি দেওয়ার আগে 'সতর্কতা সনাক্ত করা উচিত, অতীতের সমস্ত স্থিতির তথ্য আউটপুট করা উচিত। এই বার্তাটি বন্ধ করতে, আপনার সতর্কতা / ত্রুটিগুলি ঠিক করুন '
ডেভিড রুসেল

7

Ceki উত্তর সঠিক:

(...) কনফিগারেশন ফাইল বিশ্লেষণের সময় যদি সতর্কতা বা ত্রুটি দেখা দেয় তবে লগব্যাক স্বয়ংক্রিয়ভাবে কনসোলের স্থিতির ডেটা মুদ্রণ করবে।

এটি ঠিক হয়ে গেলে, আপনার লগের প্রথম লাইনে আর কোনও দূষণ হবে না।

মার্চ ২০১৫ অবধি লগব্যাক ১.১.২<encoder> - তে আপনাকে সাব-উপাদান ব্যবহার করতে হবে - <layout>এখন হ্রাস করা হয়েছে এবং যদি এটি ব্যবহার করা হয় তবে ত্রুটির বার্তা উপস্থিত হবে। আপনি এটি নিয়ন্ত্রণ করতে পারবেন না, এটি লগব্যাকের ডিফল্ট আচরণ।

কিছু অভ্যন্তরীণ শ্রেণীর নামও খুব বেশি পরিবর্তন করা হয়েছে, এমনকি তাদের ম্যানুয়াল পৃষ্ঠায় উদাহরণগুলিও পুরানো!

এখানে তাদের ত্রুটিগুলি কোড সহায়তা পৃষ্ঠা থেকে কোড স্নিপেট , যা লগারটি কনফিগার করার সঠিক উপায় রয়েছে। এটি আমার প্রকল্পে বিষয়টি পুরোপুরি ঠিক করেছে। http://logback.qos.ch/codes.html#layoutInsteadOfEncoder

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
  <file>testFile.log</file>
  ...
  <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    <pattern>%msg%n</pattern>
  </encoder>
</appender>

4

আমি বুঝতে পারলাম স্টিভ ঠিকঠাক খুঁজে পেয়েছে তবে সে থ্রেডে উল্লেখ করে নি। যদি অন্য কোনও ব্যক্তি একই সমস্যাটিকে আঘাত করে তবে তা এখানে স্থির।

"<এনকোডার> .. </ এনকোডার>" দিয়ে "<layout>" উপাদানগুলি প্রতিস্থাপন করুন

অপরাধী হ'ল: <লেআউট ক্লাস = "ch.qos.logback.classic.PatternLayout">


1
আপনি যদি এই বার্তাগুলি সম্পূর্ণরূপে মুছে ফেলতে চান তবে রাসমাস বর্ণিত হিসাবে নপস্ট্যাটাসলিস্টনার ব্যবহার করুন। এনকোডার বনাম লেআউট পদ্ধতির উদাহরণ হিসাবে 'লগব্যাক.groovy পাওয়া যায় নি' এর মতো বার্তা দমন করে না। আমি লগব্যাক-ক্লাসিক ব্যবহার করছি 1.1.3 (মার্চ 2015)
ক্রিশ্চিয়ান বোটিজা

3

আমি নিজেও একই সমস্যার সাথে লড়াই করেছি অর্থাৎ শুরুতে এখানে অনেকগুলি লাইন লগইন করা হয়েছিল যা আমার কোডের সাথে সম্পর্কিত ছিল না। এখানে আমি এটি ঠিক করেছি।

<configuration debug="false">

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level 
        %logger{36} - %msg%n</pattern> </encoder> -->
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} %-5level %logger{10} - %msg%n</pattern>
    </encoder>
</appender>

<root level="error">
    <appender-ref ref="STDOUT" />
</root>

<logger name="fun.n.games" level="DEBUG" />

এটি pom.xML এ নিম্নলিখিত প্রবেশের সাথে চলছে

        <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>

2

এটি 0.9.29 এ স্থির বলে মনে হচ্ছে। সবে বেশ কয়েকটি পরীক্ষা করা হয়েছে। আর জোড়ান INFO নেই। আমি এই ফিক্সিং কমিট হয়।


2

আমার একই সমস্যা ছিল আমি এই লাইনটি যুক্ত করেছি

        <!-- Stop output INFO at start -->
        <statusListener class="ch.qos.logback.core.status.NopStatusListener" />

লগব্যাক এবং এটি সফলভাবে কাজ


এটি কাজ করে, তবে এটি ERROR বার্তা আউটপুটকেও প্রতিরোধ করে - গুরুতর লগব্যাক কনফিগারেশনের সমস্যা দেখা দিলে কোনও আউটপুট তৈরি হয় না।
হুনজা

0

আমি সবকিছু চেষ্টা করেছি এবং কিছুই আমার পক্ষে কাজ করেনি। আমার ক্লাসপথে একাধিক লগব্যাক.এক্সএমএল ফাইলের কারণে আমার সমস্যা হয়েছিল। এটি বহু মডুলার প্রকল্পের সাধারণ ক্ষেত্রে। ক্লাসপথে যখন কেবল একটি লগব্যাক.এক্সএমএল ফাইল থাকে, তখন কোনও দ্বিধা নেই এবং সমস্যাটি সমাধান করা হয়।


এটি আপনাকে কী আউটপুট দিয়েছে?
রজারডপ্যাক

0

ব্যবহার করে logback.groovy:statusListener(NopStatusListener) (in src/test/resources/logback.groovy) কাজ করে।

(বৈধ ব্যবহারের ক্ষেত্রে উদাহরণস্বরূপ, যদি Eclipse এএনটি-র সাথে কাজ করা, লগব্যাক লগিং, গ্রোভি ক্লাস এবং ইউনিট পরীক্ষাগুলি গ্রহণ করা ইউনিট পরীক্ষা ব্যবহার করে src/test/resources/logback.groovyতবে আপনি src/main/resources/logback.groovy(বা অনুরূপ )ও বাদ দিতে পারবেন না (যদি এএনটির ক্লাসপাথ ব্যবহার করা হয় প্রকল্পগুলি ক্লাসপাথ))


0

আমি নিজের লগব্যাক লগগুলি স্যুইচ করার জন্য স্থিতি শ্রোতাদের ব্যবহার করতে পছন্দ করি:

<configuration>
  <statusListener class="ch.qos.logback.core.status.NopStatusListener" />
  ...
</configuration>

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

package com.your.package;

import ch.qos.logback.core.status.OnConsoleStatusListener;
import ch.qos.logback.core.status.Status;

import java.util.List;

public class PrintOnlyWarningLogbackStatusListener extends OnConsoleStatusListener {

    private static final int LOG_LEVEL = Status.WARN;

    @Override
    public void addStatusEvent(Status status) {
        if (status.getLevel() == LOG_LEVEL) {
            super.addStatusEvent(status);
        }
    }

    @Override
    public void start() {
        final List<Status> statuses = context.getStatusManager().getCopyOfStatusList();
        for (Status status : statuses) {
            if (status.getLevel() == LOG_LEVEL) {
                super.start();
            }
        }
    }

}    

তারপরে এটি আপনার লগব্যাক.এক্সএমএল ফাইলটিতে ব্যবহার করুন:

<configuration>
  <statusListener class="com.your.package.PrintOnlyWarningLogbackStatusListener" />
  ...
</configuration>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.