দুটি ফাইলে বিভিন্ন বার্তা লগ করতে লগব্যাক করুন


146

আমি আমার লগিং করতে লগব্যাক / এসএলএফ 4 জে ব্যবহার করছি। আমি আমার লগ ফাইলটি কিছু ডেটা বিশ্লেষণ করতে পার্স করতে চাই, সুতরাং একটি বড় বড় ফাইল পার্স করার পরিবর্তে (বেশিরভাগ ডিবাগ স্টেটমেন্ট নিয়ে গঠিত) আমার দুটি লগারের উদাহরণ থাকতে হবে যা প্রতিটি পৃথক ফাইলে লগ করে; বিশ্লেষণের জন্য একটি এবং সমস্ত উদ্দেশ্য লগিংয়ের জন্য। লগব্যাক, বা অন্য কোনও লগারের সাথে এটি সম্ভব কিনা তা কি কেউ জানেন?

উত্তর:


296

লগব্যাকে এরকম কিছু করা খুব সম্ভব। এখানে একটি উদাহরণ কনফিগারেশন:

<?xml version="1.0"?>
<configuration>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>logfile.log</file>
        <append>true</append>
        <encoder>
            <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
        </encoder>
    </appender>
    <appender name="ANALYTICS-FILE" class="ch.qos.logback.core.FileAppender">
        <file>analytics.log</file>
        <append>true</append>
        <encoder>
            <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
        </encoder>
    </appender>
    <!-- additivity=false ensures analytics data only goes to the analytics log -->
    <logger name="analytics" level="DEBUG" additivity="false">
        <appender-ref ref="ANALYTICS-FILE"/>
    </logger>
    <root>
        <appender-ref ref="FILE"/>
    </root>
</configuration>

তারপরে আপনি দুটি পৃথক লগার সেটআপ করতে চান, একটির জন্য একটি এবং এর মতো বিশ্লেষণী ডেটা লগ করার জন্য:

Logger analytics = LoggerFactory.getLogger("analytics");

1
আমার এই ধরণের কাজটি করা দরকার যাতে আমার কোনও নন-লাইন-ফিড অ্যাপেন্ডার এবং একই ফাইলটিতে নিয়মিত অ্যাপেন্ডার থাকতে পারে। এই তথ্যের জন্য ধন্যবাদ।
জাঙ্গোফান

আইএমও অ্যাডিশনটিভিটি = মিথ্যা ডিফল্ট হওয়া উচিত যদি আলাদা অ্যাপেন্ডার-রেফ নির্দিষ্ট করা থাকে। খুব ঘন ঘন আমরা এমন অ্যাপ্লিকেশন পাই যেখানে কিছু টাইমার ইভেন্টের কারণে কিছু মডিউল খুব ঘন ঘন লগ জেনারেটর হয়ে থাকে এবং আমরা সেই লগগুলি বিভিন্ন ফাইলে আলাদা করতে চাই। 10 টি ভিন্ন ফাইলের একই লগ ইন লগইন করা আসলেই বোঝা যায় না। সুতরাং এটি ডিফল্ট নয় এমন একটি বৈশিষ্ট্য হওয়া উচিত। লগব্যাক যেহেতু পুনর্লিখন ছিল একই ভুলটি একই লেখকের দ্বারা সংশোধন করা উচিত ছিল।
সমরজিৎ সামন্ত

আমি যথাক্রমে বিভিন্ন ফাইলগুলিতে ত্রুটি, ডিবাগ, তথ্য বার্তাগুলি লগ করতে চাই। লগব্যাক.এক্সএমএল দিয়ে কি এটি সম্ভব
কাসিম

@ কাসিম - এটি সম্ভব। দেখুন - amitstechblog.wordpress.com/2014/09/27/…
অ্যান্ডি

আমি বিভিন্ন প্যাকেজ থেকে এই ফাইলের উত্তরের মতো বিভিন্ন ফাইলগুলিতে লগগুলি লগ করার চেষ্টা করছি তবে এটি আমার পক্ষে কার্যকর হয় না। আমার লগব্যাক এক্সএমএল এক্সট্র্যাক্টটি এখানে রয়েছে - পেস্টবিন . com/এআইআই 4 ফ 1 জেক । আমি হাইবারনেট প্যাকেজ ট্র্যাক স্তরের লগকে অন্য কোনও ফাইলে লগ করার চেষ্টা করছি। কোনও পরামর্শ?
অ্যান্ডি ডুফ্রেসনে

7

আপনার ইচ্ছামতো লগার থাকতে পারে। তবে, প্রতিটি প্যাকেজের জন্য আপনার একটির আলাদা হওয়া উচিত যা আপনাকে আলাদাভাবে লগ করতে হবে। তারপরে সেই প্যাকেজের সমস্ত ক্লাস এবং এর উপ-প্যাকেজগুলি নির্দিষ্ট নির্দিষ্ট লগারটি পাবে। তারা সকলেই রুট লগারটি ভাগ করতে এবং যুক্ততা = "সত্য" ব্যবহার করে তাদের লগ ডেটা রুট লগার অ্যাপেন্ডারে প্রেরণ করতে পারে। এখানে একটি উদাহরণ:

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

<property name="pattern" value="%date{HH:mm:ss.SSS} %-5p %logger{36} 
%X{akkaSource} [%file:%line] - %m%n" />

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%date{HH:mm:ss.SSS} %-5p %logger{36} %X{akkaSource} [%file:%line] - %m%n</pattern>
    </encoder>
</appender>

<appender name="abc" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${catalina.base}/logs/worker.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${catalina.base}/logs/worker-%d{yyyy-MM-dd_HH}.log</fileNamePattern>
        <maxHistory>360</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>${pattern}</pattern>
    </encoder>
</appender>

<appender name="xyz" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${catalina.base}/logs/transformer.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${catalina.base}/logs/transformer-%d{yyyy-MM-dd_HH}.log</fileNamePattern>
        <maxHistory>360</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>${pattern}</pattern>
    </encoder>
</appender>

<logger name="com.xxx.yyy.zzz" level="INFO" additivity="true">
    <appender-ref ref="xyz"/>
</logger>

<logger name="com.aaa.bbb.ccc" level="INFO" additivity="true">
    <appender-ref ref="abc"/>
</logger>

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


2

আমার ক্ষেত্রে আমি ক্লাসের নামগুলি লগের নাম হিসাবে ছেড়ে যেতে চেয়েছিলাম

private static final Logger log = LoggerFactory.getLogger(ScheduledPost.class);

এবং যেমন আমার যেমন কয়েকটি ক্লাস ছিল তাই আমারও logback.xml

<!--additivity=false ensures this log data only goes to the this log, and no one more -->
<logger name="xxx.xxx.xxx.ScheduledPost" level="DEBUG" additivity="false">
    <appender-ref ref="ASYNC_SCHEDULE_LOG_FILE"/>
</logger>
<logger name="xxx.xxx.xxx.GcmPost" level="DEBUG" additivity="false">
    <appender-ref ref="ASYNC_SCHEDULE_LOG_FILE"/>
</logger>
<logger name="xxx.xxx.xxx.PushUtils" level="DEBUG" additivity="false">
    <appender-ref ref="ASYNC_SCHEDULE_LOG_FILE"/>
</logger>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.