কনসোল এবং ফাইল অ্যাপেন্ডার ব্যবহার করে খুব সাধারণ লগ 4j2 এক্সএমএল কনফিগারেশন ফাইল


223

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

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


72
হাহাহা - আপনি এই বলে খুশি হয়েছিলেন "(অ্যাপাচি ওয়েবসাইট আমাকে অনেক তথ্য দিয়ে হত্যা করছে।)"
থান্নোর

19
আপনার সেই বাক্যটি (অ্যাপাচি ওয়েবসাইট আমাকে অনেক তথ্য দিয়ে হত্যা করছে)) আমি আপনার প্রশ্নটি কেন দেখছি তার প্রধান কারণ!
জু অলিভিরা

উত্তর:


281
<?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
  • শ্রেণী-পথে থাকা একটি ফোল্ডারে লগ 4j2.xML রাখুন (যেমন আপনার উত্স ফোল্ডার "src")
  • Logger logger = LogManager.getLogger();আপনার লগার শুরু করতে ব্যবহার করুন
  • আমি তাত্ক্ষণিক ফ্লাশ = "মিথ্যা" সেট করেছি যেহেতু এসএসডি আজীবনের পক্ষে এটি সর্বোত্তম । আপনার লগ-ফাইলে এখনই লগের দরকার হলে প্যারামিটারটি সরিয়ে ফেলুন বা সত্যে সেট করুন

1
সম্পূর্ণতার জন্য, অ্যাসিঙ্ক লগার বা অ্যাসিঙ্ক অ্যাপেন্ডার ব্যবহার করার সময় অবিলম্বে ফ্লাশ = "মিথ্যা" ব্যবহারের পরামর্শ দেওয়া হয়।
রিমকো পপমা

1
পটভূমি: তাত্ক্ষণিকভাবে ফ্লাশ = "ভুয়া" লগ 4 জ 2 এর অ্যাসিঙ্ক উপাদানগুলিকে একক ডিস্ক লেখায় একাধিক লগ ইভেন্টগুলিকে একত্রে ব্যাচ করতে দেয়। বোনাস হিসাবে, আপনার সাম্প্রতিকতম লগ ইভেন্টগুলি সর্বদা ডিস্কে লেখা থাকে এবং মেমোরি বাফারে কখনও ঝুলতে দেওয়া হয় না। (
লগ

1
আমি কাজ করতে Log4j 2.0 সাইটে উদাহরণগুলি পেতে পারি না তবে এটি একটি করেছিল did ধন্যবাদ.
jangofan

12
দয়া করে সত্যটি যুক্ত করুন যে গ্রহনটি ব্যবহার করেন তাদের জন্য একটি পরিষ্কারের প্রয়োজন হতে পারে। মানবজাতির পক্ষে।
রিউত শরবানী

1
@ থারসটেননিহিউস আমি আমার আগের মন্তব্যটি সম্পাদনা করতে পারি না, তবে আপনি যখন নির্মাণ করবেন তখন গ্রহগ্রহটি কনফিগারেশনটি অনুলিপি করে এবং কোনও কারণে এটি লগ 4j.xML পরিবর্তন না হলেও সর্বদা অনুলিপি করে না। কমপক্ষে এটিই আমার জন্য সমাধান করেছে।
শারবাণী

19

এখানে আমার সরলবাদী 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।

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

সূত্র: 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আপনি এতে src/main/resources বা রাখবেন src/test/resources


12

লগ 4 জ 2 এর একটি খুব নমনীয় কনফিগারেশন সিস্টেম রয়েছে (যা আইএমএইচও সাহায্যের চেয়ে আরও বেশি বিচ্যুতি), আপনি জেএসএনও ব্যবহার করতে পারেন। একটি রেফারেন্সের জন্য https://logging.apache.org/log4j/2.x/manual/configration.html দেখুন ।

ব্যক্তিগতভাবে, আমি সম্প্রতি লগ 4 জ 2 ব্যবহার করা শুরু করেছি, তবে আমি "কঠোর এক্সএমএল" কনফিগারেশনের দিকে ঝুঁকছি (যা উপাদানগুলির নামের পরিবর্তে বৈশিষ্ট্যগুলি ব্যবহার করছি), যা স্কিমা-যাচাইযোগ্য হতে পারে।

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

<?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>

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

Fileএখানে নীতি কী ? সর্বোচ্চ ফাইলের আকার কত? এবং কিভাবে এটি ফাইল করতে লিখতে? (ফাইলটিতে সর্বদা লগ 10MB থাকে?)
টিনা জে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.