xml bangla কনসোল এবং ফাইল অ্যাঞ্জেণ্ডার ব্যবহার করে খুব সহজ log4j2 এক্সএমএল কনফিগারেশন ফাইল



xml bangla tutorial (3)

এখানে আমার সরল log4j2.xml যা দৈনিক রোলিং ফাইলকে কনসোল এবং লিখতে প্রিন্ট করে:

// java
private static final Logger LOGGER = LogManager.getLogger(MyClass.class);


// log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Properties>
        <Property name="logPath">target/cucumber-logs</Property>
        <Property name="rollingFileName">cucumber</Property>
    </Properties>
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="[%highlight{%-5level}] %d{DEFAULT} %c{1}.%M() - %msg%n%throwable{short.lineNumber}" />
        </Console>
        <RollingFile name="rollingFile" fileName="${logPath}/${rollingFileName}.log" filePattern="${logPath}/${rollingFileName}_%d{yyyy-MM-dd}.log">
            <PatternLayout pattern="[%highlight{%-5level}] %d{DEFAULT} %c{1}.%M() - %msg%n%throwable{short.lineNumber}" />
            <Policies>
                <!-- Causes a rollover if the log file is older than the current JVM's start time -->
                <OnStartupTriggeringPolicy />
                <!-- Causes a rollover once the date/time pattern no longer applies to the active file -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="DEBUG" additivity="false">
            <AppenderRef ref="console" />
            <AppenderRef ref="rollingFile" />
        </Root>
    </Loggers>
</Configuration>

TimeBasedTriggeringPolicy

ব্যবধান (পূর্ণসংখ্যা) - তারিখ প্যাটার্নের সবচেয়ে নির্দিষ্ট সময় ইউনিটের উপর ভিত্তি করে কত ঘন ঘন একটি রোলওভার ঘটবে। উদাহরণস্বরূপ, সবচেয়ে নির্দিষ্ট আইটেম হিসাবে ঘন্টার সাথে তারিখের প্যাটার্ন সহ এবং 4 রোলওভারের বৃদ্ধি প্রতি 4 ঘণ্টার মধ্যে ঘটবে। ডিফল্ট মান 1।

modulate (বুলিয়ান) - অন্তর্বর্তী সীমানা উপর পরবর্তী রোলভার ঘটতে কারণ অন্তর্বর্তী স্থায়ী করা উচিত কিনা তা নির্দেশ করে। উদাহরণস্বরূপ, যদি আইটেমটি ঘন্টা থাকে তবে বর্তমান ঘন্টাটি 3 টা এবং ব্যবধান 4 হয় তবে প্রথম রোলওভার 4 টা বাজে হবে এবং পরবর্তী সকাল 8 টা, দুপুর, 4 টা, ইত্যাদিতে ঘটবে।

উত্স: https://logging.apache.org/log4j/2.x/manual/appenders.html

আউটপুট:

[INFO ] 2018-07-21 12:03:47,412 ScenarioHook.beforeScenario() - Browser=CHROME32_NOHEAD
[INFO ] 2018-07-21 12:03:48,623 ScenarioHook.beforeScenario() - Screen Resolution (WxH)=1366x768
[DEBUG] 2018-07-21 12:03:52,125 HomePageNavigationSteps.I_Am_At_The_Home_Page() - Base URL=http://simplydo.com/projector/
[DEBUG] 2018-07-21 12:03:52,700 NetIncomeProjectorSteps.I_Enter_My_Start_Balance() - Start Balance=348000

একটি নতুন লগ ফাইল দৈনিক তৈরি করা হবে আগের দিন স্বয়ংক্রিয়ভাবে পুনঃনামকরণ করা হবে:

cucumber_yyyy-MM-dd.log

একটি log4j2.xml প্রকল্পে, আপনি log4j2.xml src/main/resources বা src/test/resourceslog4j2.xml

আমি কনসোল সহ একটি খুব সহজ এক্সএমএল কনফিগারেশন ফাইল এবং log4j2 ব্যবহার করে একটি ফাইল অ্যাডেন্ডার চাই।

(অ্যাপাচি ওয়েবসাইটটি আমাকে অনেক তথ্য দিয়ে হত্যা করছে।)


Answer #1

log4j2 একটি খুব নমনীয় কনফিগারেশন সিস্টেম (যা IMHO একটি সাহায্যের চেয়ে বেশি বিভ্রান্তি), আপনি JSON ব্যবহার করতে পারেন। একটি রেফারেন্সের জন্য https://logging.apache.org/log4j/2.x/manual/configuration.html দেখুন।

ব্যক্তিগতভাবে, আমি সম্প্রতি log4j2 ব্যবহার শুরু করেছি, কিন্তু আমি "কঠোর এক্সএমএল" কনফিগারেশন (অর্থাৎ, উপাদানগুলির নামের পরিবর্তে বৈশিষ্ট্যাবলী ব্যবহার করে) দিকে এগিয়ে যাচ্ছি, যা স্কিমা-যাচাইযোগ্য হতে পারে।

ফাইল নামটি নির্ধারণের জন্য একটি "সম্পত্তি" ব্যবহার করে স্বয়ংসম্পূর্ণকরণ এবং কঠোর মোড ব্যবহার করে এখানে আমার সহজ উদাহরণ:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorinterval="30" status="info" strict="true">
    <Properties>
        <Property name="filename">log/CelsiusConverter.log</Property>
    </Properties>
    <Appenders>
        <Appender type="Console" name="Console">
            <Layout type="PatternLayout" pattern="%d %p [%t] %m%n" />
        </Appender>
        <Appender type="Console" name="FLOW">
            <Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n" />
        </Appender>
        <Appender type="File" name="File" fileName="${filename}">
            <Layout type="PatternLayout" pattern="%d %p %C{1.} [%t] %m%n" />
        </Appender>
    </Appenders>
    <Loggers>
        <Root level="debug">
            <AppenderRef ref="File" />
            <AppenderRef ref="Console" />
            <!-- Use FLOW to trace down exact method sending the msg -->
            <!-- <AppenderRef ref="FLOW" /> -->
        </Root>
    </Loggers>
</Configuration>

Answer #2
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>
        <File name="MyFile" fileName="all.log" immediateFlush="false" append="false">
            <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Root level="debug">
            <AppenderRef ref="Console" />
            <AppenderRef ref="MyFile"/>
        </Root>
    </Loggers>
</Configuration>

নোট:

  • আপনার কনফিগারেশন ফাইল নিম্নলিখিত বিষয়বস্তু রাখুন।
  • কনফিগারেশন ফাইল log4j2.xml নাম
  • Log4j2.xml রাখুন এমন একটি ফোল্ডারে যা ক্লাস-পাথে (অর্থাত্ আপনার উৎস ফোল্ডার "src")
  • Logger logger = LogManager.getLogger(); ব্যবহার করুন Logger logger = LogManager.getLogger(); আপনার লগগার আরম্ভ করা
  • আমি তাৎক্ষণিকভাবে ফ্লাশ = "মিথ্যা" সেট করেছি কারণ এটি এসএসডি জীবনের জন্য ভাল। আপনার লগ-ফাইলে সরাসরি লগের প্রয়োজন হলে প্যারামিটারটি সরান বা সেটিকে সত্য হিসাবে সেট করুন




fileappender