আমি লগব্যাকের জন্য বিভিন্ন গন্তব্যে লগারের জন্য বিভিন্ন স্তরে লগব্যাক করতে কনফিগার করতে পারি?


156

আমি লগব্যাকের জন্য বিভিন্ন গন্তব্যে লগারের জন্য বিভিন্ন স্তরে লগব্যাক করতে কনফিগার করতে পারি ?

উদাহরণস্বরূপ, নিম্নলিখিত লগব্যাক কনফিগারেশন দেওয়া, লগব্যাক INFOবার্তাগুলিতে STDOUTএবং ERRORবার্তাগুলি রেকর্ড করবে STDERR?

(দ্রষ্টব্য যে এই উদাহরণটি অধ্যায় 3: লগব্যাক কনফিগারেশনেlogback-examples/src/main/java/chapters/configuration/sample4.xml প্রদর্শিত উদাহরণের একটি প্রকরণ )।

<configuration>
  <appender name="STDOUT"
   class="ch.qos.logback.core.ConsoleAppender">
   <encoder>
     <pattern>
        %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
      </pattern>
    </encoder>
  </appender>
  <appender name="STDERR"
   class="ch.qos.logback.core.ConsoleAppender">
   <encoder>
     <pattern>
        %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
      </pattern>
    </encoder>
    <target>System.err</target>
  </appender>
  <!-- What is the effective level of "chapters.configuration"? -->
  <logger name="chapters.configuration" level="INFO" additivity="false">
    <appender-ref ref="STDOUT" />
  </logger>
  <logger name="chapters.configuration" level="ERROR" additivity="false">
    <appender-ref ref="STDERR" />
  </logger>

  <!-- turn OFF all logging (children can override) -->
  <root level="OFF">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

1
একটি পপ কুইজে আমি বলব - উচ্চতর :), তবে গম্ভীরভাবে, আপনি যদি উভয় স্তরে লগইন করেন তবে আপনার কনসোল / স্টাডাউট কী বলে?
কোস্টজা

দ্বিতীয় চিন্তার বিষয়ে, আমি মনে করি যে উত্তরটি সম্পর্কে আমি বেশি আগ্রহী এই প্রশ্নটি হ'ল "আমি কিভাবে লগারের জন্য বিভিন্ন গন্তব্যে বিভিন্ন স্তরের লগ করতে পারি"?
ডেরেক মাহর

আমার তৈরি ফিল্টারটি আপনি পছন্দ করতে পারেন ।
মার্টিনাস

@ কোস্টজা এটি সঠিক উত্তর। levels are ordered as follows: TRACE < DEBUG < INFO < WARN < ERROR.
অ্যালেক্স 78191

উত্তর:


62

আপডেট: গ্রোভি ব্যবহার করে সমস্ত কনফিগারেশন ভিত্তিক পদ্ধতির জন্য ডিন হিলারের উত্তর দেখুন

-

লগব্যাক ফিল্টারগুলির সাহায্যে আপনি কিছু আকর্ষণীয় কাজ করতে পারেন । নীচের কনফিগারেশনটি স্টার্ডারকে কেবল সতর্কতা এবং ত্রুটি বার্তাগুলি এবং স্টাডাউটের সমস্ত কিছু মুদ্রণ করবে।

logback.xml

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
  <target>System.out</target>
  <filter class="com.foo.StdOutFilter" />
   ...
</appender>

<appender name="stderr" class="ch.qos.logback.core.ConsoleAppender">
  <target>System.err</target>
  <filter class="com.foo.ErrOutFilter" />
   ...
</appender>

<logger name="mylogger" level="debug">
    <appender-ref ref="stdout" />
    <appender-ref ref="stderr" />
</logger>

com.foo.StdOutFilter

public class StdOutFilter extends ch.qos.logback.core.filter.AbstractMatcherFilter
{

    @Override
    public FilterReply decide(Object event)
    {
        if (!isStarted())
        {
            return FilterReply.NEUTRAL;
        }

        LoggingEvent loggingEvent = (LoggingEvent) event;

        List<Level> eventsToKeep = Arrays.asList(Level.TRACE, Level.DEBUG, Level.INFO);
        if (eventsToKeep.contains(loggingEvent.getLevel()))
        {
            return FilterReply.NEUTRAL;
        }
        else
        {
            return FilterReply.DENY;
        }
    }

}

com.foo.ErrOutFilter

public class ErrOutFilter extends ch.qos.logback.core.filter.AbstractMatcherFilter
{

    @Override
    public FilterReply decide(Object event)
    {
        if (!isStarted())
        {
            return FilterReply.NEUTRAL;
        }

        LoggingEvent loggingEvent = (LoggingEvent) event;

        List<Level> eventsToKeep = Arrays.asList(Level.WARN, Level.ERROR);
        if (eventsToKeep.contains(loggingEvent.getLevel()))
        {
            return FilterReply.NEUTRAL;
        }
        else
        {
            return FilterReply.DENY;
        }
    }

}

5
আপনি logback.qos.ch/manual/filters.html#levelFilter ব্যবহার করতে পারেন যা আপনার জন্য ক্লাস বাস্তবায়ন করবে ..
ডিজেল

@ ওডেলিয়া হ্যাঁ, আপনি স্তর ফিল্টারটি ব্যবহার করতে পারেন তবে কনফিগারেশনটি কেবল একটি মাত্র স্তর শুনতে পারাতে আপনাকে একাধিক ফিল্টার সংজ্ঞায়িত করতে হবে।
উরিয়া কার্পেন্টার

13
@ উরিয়া লগব্যাক.কোস.সিচ / ম্যানুয়াল / ফিল্টার্স html # থ্রেসহোল্ড ফিল্টার একক স্তরের পরিবর্তে একটি পরিসীমা নেবে
অ্যান্টনি স্টাবস ২

11
ঠিক আছে, তবে ইয়েচ !!! এ জাতীয় সাধারণ প্রয়োজনে জাভা প্রোগ্রামিংয়ের দরকার পড়েনি।
কেভিন cline

1
stderr এর জন্য আপনার ফিল্টার লাগবে না। এই লিঙ্কটি দেখুন stackoverflow.com/questions/13179773/…
ডিন হিলার

84

আমি বিশ্বাস করি এটিই সহজ সমাধান হবে:

<configuration>
    <contextName>selenium-plugin</contextName>
    <!-- Logging configuration -->  
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <Target>System.out</Target>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="STDERR" class="ch.qos.logback.core.ConsoleAppender">
            <Target>System.err</Target>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder> 
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] %logger{10} [%file:%line] %msg%n</pattern> 
        </encoder> 
    </appender>
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="STDERR" />
    </root>
</configuration>

37
আপনি ThresholdFilterএর পরিবর্তে গুলি ব্যবহার করতে চান ।
মার্টিন শ্রাইডার

হ্যাঁ, আপনি কেবল তথ্য স্তরটি করেন যখন আপনি তথ্য চান, ডিবাগ এবং ট্রেসকে স্টাডাউটে লগ ইন করতে চান তবে পরিবর্তে উপেক্ষা করা হবে, তাই না?
ডিন হিলার 24'15

এই ডিবাগ এবং ট্রেস খায়?
স্টিফান

@ মার্টিনশ্রেডার লগব্যাক.এক্সএমএল <filter class="ch.qos.logback.classic.filter.ThresholdFilter">নির্দিষ্টকরণের আসল ভূমিকা কী ব্যবহার করে <root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="STDERR" /> </root>?
নিউরোজেন

1
এটি নির্ধারণ করা - <onMatch>এবং <onMismatch>জন্য সংজ্ঞায়িত করা হয় না ThresholdFilter। কেবল তাদের সরান এবং এটি ইচ্ছাকৃতভাবে কাজ করবে।
চরণোর

46

বিষয়গুলি বুঝতে খুব সহজ রাখার জন্য শুধুমাত্র একটি থ্রিজল্ড ফিল্টার এবং লেভেলফিল্টার সহ কনফিগারেশনের ভিত্তিতে সমাধান :

<configuration>
    <appender name="STDERR" class="ch.qos.logback.core.ConsoleAppender">
        <target>System.err</target>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
          <level>WARN</level>
        </filter>
        <encoder>
            <pattern>%date %level [%thread] %logger %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <target>System.out</target>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
          <level>DEBUG</level>
          <onMatch>ACCEPT</onMatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
          <level>INFO</level>
          <onMatch>ACCEPT</onMatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
          <level>TRACE</level>
          <onMatch>ACCEPT</onMatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
          <level>WARN</level>
          <onMatch>DENY</onMatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
          <level>ERROR</level>
          <onMatch>DENY</onMatch>
        </filter>
        <encoder>
            <pattern>%date %level [%thread] %logger %msg%n</pattern>
        </encoder>
    </appender>

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

4
কিছুটা ভার্বোজ, তবে আমি এই সমাধানটি পছন্দ করি কারণ এটি খুব সহজ এবং পাঠযোগ্য।
গন্ডি

@ গন্ডি কেন ভার্বোজ? আপনি শুধুমাত্র ব্যবহার করতে পারেন ThresoldFilter
Alex78191

ThresoldFilterপাঁচটি ব্যবহারের পরিবর্তে STDOUT এ কেন ব্যবহার করবেন না LevelFilter?
টোনারিমোচি

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

31

ঠিক আছে, এটি করার জন্য আমার প্রিয় xML উপায়। আমি এটি গ্রহণের সংস্করণের জন্য করি যাতে পারি

  • আমাকে লগ স্টেটমেন্ট এবং এ নিতে স্টাফ ক্লিক করুন
  • কালো এবং নীচে তথ্য এবং নীচে সতর্কতা / গুরুতর লাল দেখুন severe

এবং কোনও কারণে এসও এই সমস্ত সঠিকভাবে প্রদর্শন করছে না তবে বেশিরভাগই সেখানে উপস্থিত রয়েছে বলে মনে হচ্ছে ...

<configuration scan="true" scanPeriod="30 seconds">

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">      
          <evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator"> 
            <expression>
               e.level.toInt() &lt;= INFO.toInt()
            </expression>
          </evaluator>
          <OnMismatch>DENY</OnMismatch>
          <OnMatch>NEUTRAL</OnMatch>
        </filter>

        <encoder>
            <pattern>%date{ISO8601} %X{sessionid}-%X{user} %caller{1} %-4level: %message%n</pattern>
        </encoder>
    </appender>

    <appender name="STDERR" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
            <level>warn</level>
        </filter>

        <encoder>
            <pattern>%date{ISO8601} %X{sessionid}-%X{user} %caller{1} %-4level: %message%n</pattern>
        </encoder>
        <target>System.err</target>
    </appender>

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

সতর্কতা এবং ত্রুটি থেকে ট্রেস ডিবাগ তথ্য পৃথক করার জন্য এটি সেরা ফিল্টারিং সমাধান
খেরাউদ

logback.groovyএই চেহারা লাইন সংস্করণ কি হবে ?

15

সহজ সমাধান হ'ল ThresholdFilterঅ্যাপেন্ডারগুলিতে ব্যবহার করা:

    <appender name="..." class="...">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>

সম্পূর্ণ উদাহরণ:

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <encoder>
            <pattern>%d %-5level: %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="STDERR" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <target>System.err</target>
        <encoder>
            <pattern>%d %-5level: %msg%n</pattern>
        </encoder>
    </appender>

    <root>
        <appender-ref ref="STDOUT" />
        <appender-ref ref="STDERR" />
    </root>
</configuration>

আপডেট: মাইক মন্তব্যটিতে ইঙ্গিত করার সাথে সাথে ERROR স্তর সহ বার্তাগুলি এখানে STDOUT এবং STDERR এ মুদ্রিত হয়েছে। যদিও ওপি'র উদ্দেশ্য ছিল তা নিশ্চিত নয়। আপনি চাইলে মাইকের উত্তরটি চেষ্টা করে দেখতে পারেন।


আমি লগার এবং মূল ব্যবহার করছি। লগারে অ্যাপেন্ডারদের মৃত্যুদন্ড কার্যকর করা হচ্ছে তবে মূলটিতে থাকা অ্যাপেন্ডারদের ডাকা হচ্ছে না।
গঙ্গাধর জেএনএএনইউ

গঙ্গাধর, আপনার সন্তানের লগারে অ্যাডটিভিটিভিটি সেট করুন "সত্য" you
এক্স ওয়া সাতুক

1
ধন্যবাদ ... এসটিডিআরআর অ্যাপেন্ডারে <দ্য রিপোর্ট> ট্যাগটি ভুলে যাবেন না গুরুত্বপূর্ণ! তবে এটির সাথে একটি সমস্যাও রয়েছে: ফিল্টার স্তরের উপরের সমস্ত আউটপুট মুদ্রিত হয় ... তবে স্টাডাউট দিয়ে আপনি চান ত্রুটি স্তরটি (এবং উপরে) প্রিন্ট করা উচিত নয় ... আমার সমাধান দেখুন যা এটি এস হবার্টের উত্তরের সাথে সংযুক্ত করে ...
মাইকে রডেন্ট '

10

এটি আমি ব্যবহার করি এমন কনফিগারেশন যা সূক্ষ্মভাবে কাজ করে এটি XML + JaninoEventEvaluator এর উপর ভিত্তি করে ( জেনিনো লাইব্রেরিটিকে ক্লাসপাথে যুক্ত করা প্রয়োজন)

<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%date | [%-5level] in [%file:%line] - %msg %n</pattern>
    </encoder>
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
        <evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">
            <expression>
                level &lt;= INFO
            </expression>
        </evaluator>
        <OnMismatch>DENY</OnMismatch>
        <OnMatch>NEUTRAL</OnMatch>
    </filter>
</appender>
<appender name="STDERR" class="ch.qos.logback.core.ConsoleAppender">
    <target>System.err</target>
    <encoder>
        <pattern>%date | [%-5level] in [%file:%line] - %msg %n</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>WARN</level>
    </filter>
</appender>

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

8

আমি আমার লগব্যাক কনফিগার করতে লগব্যাক.groovy ব্যবহার করি তবে আপনি এটি এক্সএমএল কনফিগারেশনের মাধ্যমেও করতে পারেন:

import static ch.qos.logback.classic.Level.*
import static ch.qos.logback.core.spi.FilterReply.DENY
import static ch.qos.logback.core.spi.FilterReply.NEUTRAL
import ch.qos.logback.classic.boolex.GEventEvaluator
import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.core.ConsoleAppender
import ch.qos.logback.core.filter.EvaluatorFilter

def patternExpression = "%date{ISO8601} [%5level] %msg%n"

appender("STDERR", ConsoleAppender) {
    filter(EvaluatorFilter) {
      evaluator(GEventEvaluator) {
        expression = 'e.level.toInt() >= WARN.toInt()'
      }
      onMatch = NEUTRAL
      onMismatch = DENY
    }
    encoder(PatternLayoutEncoder) {
      pattern = patternExpression
    }
    target = "System.err"
  }

appender("STDOUT", ConsoleAppender) {
    filter(EvaluatorFilter) {
      evaluator(GEventEvaluator) {
        expression = 'e.level.toInt() < WARN.toInt()'
      }
      onMismatch = DENY
      onMatch = NEUTRAL
    }
    encoder(PatternLayoutEncoder) {
      pattern = patternExpression
    }
    target = "System.out"
}

logger("org.hibernate.type", WARN)
logger("org.hibernate", WARN)
logger("org.springframework", WARN)

root(INFO,["STDERR","STDOUT"])

আমি মনে করি GEventEvaluator ব্যবহার সহজতর কারণ ফিল্টার ক্লাস তৈরি করার দরকার নেই।
আমি আমার ইংরাজির জন্য ক্ষমা চাই!


4

এটা চেষ্টা কর. আপনি কেবল বিল্ট-ইন ThresholdFilterএবং ব্যবহার করতে পারেন LevelFilter। প্রোগ্রামালিকভাবে আপনার নিজের ফিল্টার তৈরি করার দরকার নেই। এই উদাহরণে WARN এবং ERROR স্তরগুলি System.err এ লগইন হয় এবং System.out এ বিশ্রাম নেওয়া হয়:

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
    <!-- deny ERROR level -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>DENY</onMatch>
    </filter>
    <!-- deny WARN level -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>WARN</level>
        <onMatch>DENY</onMatch>
    </filter>
    <target>System.out</target>
    <immediateFlush>true</immediateFlush>
    <encoder>
        <charset>utf-8</charset>
        <pattern>${msg_pattern}</pattern>
    </encoder>
</appender>

<appender name="stderr" class="ch.qos.logback.core.ConsoleAppender">
    <!-- deny all events with a level below WARN, that is INFO, DEBUG and TRACE -->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>WARN</level>
    </filter>
    <target>System.err</target>
    <immediateFlush>true</immediateFlush>
    <encoder>
        <charset>utf-8</charset>
        <pattern>${msg_pattern}</pattern>
    </encoder>
</appender>   

<root level="WARN">
    <appender-ref ref="stderr"/>
</root>

<root level="TRACE">
    <appender-ref ref="stdout"/>
</root>


3

আমি এই উত্তরের জন্য কোনও কৃতিত্ব গ্রহণ করি না, কারণ এটি কেবল উপরের সেরা দুটি উত্তরের সংমিশ্রণ: এক্স ওও সাটুক এবং সাবেস্টিয়ান হেলবার্টের: ThresholdFilterএটি সুন্দর তবে আপনি এটির উপরের স্তরের পাশাপাশি কনফিগার করতে পারবেন না এবং স্তর * নীচু করে, কিন্তু দুই সঙ্গে এটি মিশ্রন LevelFilters"অস্বীকার" সেট WARNএবং ERRORএকটি আচরণ কাজ করে।

খুব গুরুত্বপূর্ণ : <target>System.err</target>এসটিডিআরআর অ্যাপেন্ডারে ট্যাগটি ভুলে যাবেন না : আমার এটিকে বাদ দেওয়া কয়েক মিনিটের জন্য আমাকে হতাশ করেছিল।

<configuration>
    <timestamp key="byDay" datePattern="yyyyMMdd'T'HHmmss" />
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>DENY</onMatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>DENY</onMatch>
        </filter>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M\(%line\)
                - %msg%n
            </pattern>
        </encoder>
    </appender>

    <appender name="STDERR" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>
        <target>System.err</target>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M\(%line\)
                - %msg%n
            </pattern>
        </encoder>
    </appender>

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

* যদিও এটিতে API এর কোনও পদ্ধতি decideরয়েছে তবে আপনি কীভাবে এই প্রসঙ্গে এটি ব্যবহার করবেন তা আমার কোনও ধারণা নেই।


থ্রেশহোল্ড ফিল্টার এবং লেভেলফিল্টার সংমিশ্রণ করা এটিই সর্বোত্তম সমাধান!
geistLich

<target> System.err </target> কিসের জন্য?
সিমরান কৌর

1

কোন প্রোগ্রামিং প্রয়োজন। কনফিগারেশন আপনার জীবন সহজ করে তোলে।

নীচে কনফিগারেশন যা বিভিন্ন ফাইলের বিভিন্ন স্তরের লগগুলিতে লগ করে

<property name="DEV_HOME" value="./logs" />

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFO</level>
    </filter>
    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} %-5level - %msg%n
        </Pattern>
    </layout>
</appender>

<appender name="FILE-ERROR"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${DEV_HOME}/app-error.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} %-5level - %msg%n
        </Pattern>
    </encoder>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- rollover daily -->
        <fileNamePattern>${DEV_HOME}/archived/app-error.%d{yyyy-MM-dd}.%i.log
        </fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>

    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <!--output messages of exact level only -->
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>
<appender name="FILE-INFO"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${DEV_HOME}/app-info.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} %-5level - %msg%n
        </Pattern>
    </encoder>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- rollover daily -->
        <fileNamePattern>${DEV_HOME}/archived/app-info.%d{yyyy-MM-dd}.%i.log
        </fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>


    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>INFO</level>
        <!--output messages of exact level only -->
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>


<appender name="FILE-DEBUG"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${DEV_HOME}/app-debug.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
        </Pattern>
    </encoder>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- rollover daily -->
        <fileNamePattern>${DEV_HOME}/archived/app-debug.%d{yyyy-MM-dd}.%i.log
        </fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>

    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>DEBUG</level>
        <!--output messages of exact level only -->
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>

<appender name="FILE-ALL"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${DEV_HOME}/app.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
        </Pattern>
    </encoder>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- rollover daily -->
        <fileNamePattern>${DEV_HOME}/archived/app.%d{yyyy-MM-dd}.%i.log
        </fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
</appender>

<logger name="com.abc.xyz" level="DEBUG" additivity="true">
    <appender-ref ref="FILE-DEBUG" />
    <appender-ref ref="FILE-INFO" />
    <appender-ref ref="FILE-ERROR" />
    <appender-ref ref="FILE-ALL" />
</logger>

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


0
<configuration scan="true" scanPeriod="60 seconds">
 <appender name="A1" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${storm.log.dir}/${logfile.name}</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>${storm.log.dir}/${logfile.name}.%i</fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>9</maxIndex>
    </rollingPolicy>

    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>100MB</maxFileSize>
    </triggeringPolicy>

    <encoder>
      <pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSZZ} %c{1} [%p] %m%n</pattern>
    </encoder>
 </appender>

 <appender name="ACCESS" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${storm.log.dir}/access.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>${storm.log.dir}/access.log.%i</fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>9</maxIndex>
    </rollingPolicy>

    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>100MB</maxFileSize>
    </triggeringPolicy>

    <encoder>
      <pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSZZ} %c{1} [%p] %m%n</pattern>
    </encoder>
  </appender>

  <appender name="METRICS" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${storm.log.dir}/metrics.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>${storm.log.dir}/logs/metrics.log.%i</fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>9</maxIndex>
    </rollingPolicy>

    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>2MB</maxFileSize>
    </triggeringPolicy>

    <encoder>
      <pattern>%d %-8r %m%n</pattern>
    </encoder>
  </appender>

  <root level="INFO">
    <appender-ref ref="A1"/>
  </root>

  <logger name="backtype.storm.security.auth.authorizer" additivity="false">
    <level value="INFO" />
    <appender-ref ref="ACCESS" />
  </logger>

  <logger name="backtype.storm.metric.LoggingMetricsConsumer" additivity="false" >
    <level value="INFO"/>
    <appender-ref ref="METRICS"/>
  </logger>

</configuration>

So here is the logback file in which I am not printing backtype.storm.metric.LoggingMetricsConsumer info level if i say additivity = "true" then for for all classes in backtype.* this rule will be applied

0

স্তরের "INFO" বা তার থেকে উচ্চতর কনসোল এবং "WARN" স্তরের বার্তাগুলি বা ফাইলের থেকে উচ্চতর বার্তাগুলির আউটপুট কীভাবে দেওয়া যায় তার উদাহরণ

আপনার লগব্যাক.এক্সএমএল ফাইল:

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>

            <!--output messages of exact level only-->
            <!--<onMatch>ACCEPT</onMatch>-->
            <!--<onMismatch>DENY</onMismatch>-->
        </filter>
        <encoder>
            <pattern>%d{yyyy-MMM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg %n
            </pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>myfile.log</file>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>
        <append>true</append>
        <encoder>
            <pattern>%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE"/>
    </root>
</configuration>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.