কিভাবে log4j সঠিকভাবে আরম্ভ করবেন?


280

আমার অ্যাপ্লিকেশনটিতে লগ 4j যুক্ত করার পরে প্রতিবার আমি আমার অ্যাপ্লিকেশনটি সম্পাদন করে নীচের আউটপুটটি পাই:

লগ 4 জ: সতর্কতামূলকভাবে লগার (স্লাইডসলেক্টর.ফেসডাটা.এফ.এসডিটা ডেটা পার্সার) এর জন্য কোনও অ্যাপেন্ডার খুঁজে পাওয়া যায়নি।
লগ 4 জ: সতর্কতা দয়া করে লগ 4j সিস্টেমটি সঠিকভাবে শুরু করুন।

দেখে মনে হচ্ছে এর অর্থ একটি কনফিগারেশন ফাইল নেই। এই কনফিগারেশন ফাইলটি কোথায় অবস্থিত হওয়া উচিত এবং ভাল শুরু করার সামগ্রী কী?

আমি একটি ডেস্কটপ অ্যাপ্লিকেশন বিকাশের জন্য সরল জাভা ব্যবহার করছি। সুতরাং কোন ওয়েবসারভার ইত্যাদি ...


49
আমার মতো সকল খাঁটি ছেলের জন্য: লগ 4j.properties এসসিআর / প্রধান / সংস্থানগুলিতে রাখুন !!
কারসেল


লগ 4j এর সংক্ষিপ্ত ম্যানুয়ালটি অতিক্রম করা খুব সহায়ক: লগিং.এপাচি.আর.এলগগজ
সা'দ

উত্তর:


278

Log4jডিফল্টরূপে কল করা log4j.propertiesবা log4j.xmlক্লাসপাথের কোনও ফাইল সন্ধান করে।

এখানে বর্ণিত হিসাবে সিস্টেমের বৈশিষ্ট্যগুলি সেট করে নিজেই আরম্ভ করতে কোন ফাইলটি ব্যবহার করে তা আপনি নিয়ন্ত্রণ করতে পারেন ("ডিফল্ট সূচনা প্রক্রিয়া" বিভাগটি দেখুন)।

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

java -Dlog4j.configuration=customName ....

log4jক্লাসপ্যাটে কাস্টমনেম নামে একটি ফাইল সন্ধান করার কারণ ঘটবে।

আপনার যদি সমস্যা হয় তবে আমি লগ 4j.debug চালু করতে সহায়ক মনে করি:

-Dlog4j.debug

এটি সিস্টেমে মুদ্রণ করবে out কোন ফাইলটি নিজেই আরম্ভ করার জন্য ব্যবহৃত হয়েছিল, কোন লগার / সংযোজনকারীরা কনফিগার হয়েছে এবং কীভাবে ইত্যাদি সম্পর্কে প্রচুর সহায়ক তথ্য out

কনফিগারেশন ফাইলটি জাভা বৈশিষ্ট্য ফাইল বা একটি এক্সএমএল ফাইল হতে পারে। এখানে লগ 4j ইন্ট্রো ডকুমেন্টেশন পৃষ্ঠা থেকে নেওয়া বৈশিষ্ট্যগুলির ফাইল ফর্ম্যাটটির একটি নমুনা দেওয়া হয়েছে :

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

43
সুতরাং কোনও ক্লাসপথে নেই এমন ফাইল থেকে কনফিগারেশন ফাইলটি লোড করার জন্য আপনাকে এগুলি করতে হবে: -ডলজ 4j.configration = ফাইল: / সি: / মাই / ফোল্ডার / লগ 4j.properties যা আসলে একটি URL।
বিবিকোপার

15
এক ছোট ডগা হয়তো কেউ দরকারী পাবেন: আপনার কাছে চালু করতে পারেন log4j কোডে সংশ্লিষ্ট সম্পত্তি সক্ষম করে ডিবাগার - System.setProperty ( "log4j.debug", "");
এক্সএক্সএল

কোথায় রাখো java -Dlog4j.configuration=customName? আমি প্রকল্প / পছন্দ / চালনা / ডিবাগ সেটিংস চেষ্টা করেছি, কিছু কনফিগারেশন বাছাই করেছি, সম্পাদনা ক্লিক করেছি, আর্গুমেন্টস ট্যাব, ভিএম আর্গুমেন্ট। কাস্টমনামটিতে .xML এক্সটেনশন অন্তর্ভুক্ত রয়েছে?
নুমেনন

2
বিভিন্ন প্রকরণের চেষ্টা করার পরে, এটি কাজ করেছে: -ডলজ 4 জ্যাক কনফিগারেশন = ফাইল: /// সি: /mydir/subdir/log4j.properties উপরের উদাহরণ: -ডলোগ 4j.configration = ফাইল: / সি: / মাই / ফোল্ডার / লোগোজেজেপি ব্যর্থ হয়েছে.
ব্যবহারকারী 1062589

1
আমি সত্যিই চাই ম্যানুয়ালগুলি আরও জোর দেয় যা -Dlog4j.debugআপনার কনফিগারেশনটি ডিবাগ করতে সহায়তা করে।
শ্রীধর সারনোবাত

239

"আসল" প্রকল্পগুলির জন্য লগ 4 জে সঠিকভাবে সেট আপ করার সময় আপনি দ্রুত এবং নোংরা সমাধান পেতে চাইতে পারেন, উদাহরণস্বরূপ যদি আপনি কেবল একটি নতুন লাইব্রেরি পরীক্ষা করছেন।

যদি তাই হয় স্থির পদ্ধতিতে একটি কল

org.apache.log4j.BasicConfigurator.configure();

কনসোলে বেসিক লগিং সেটআপ করবে এবং ত্রুটির বার্তা চলে যাবে।


হাই এ 3। 14_আমি যেখানে এটি ব্যবহার করব? আমি বুঝতে পারি না এমনকি আমি এই সমস্যাটির জন্য আরও উত্তর উল্লেখ করেছি। দয়া করে আমাকে সহায়তা করুন
রবি পটনুরু

5
মনে রাখবেন যে এটি ডিবাগ-স্তরের লগিংকে ডিফল্ট করবে, এটি পছন্দসই নয়। আপনি Logger.getRootLogger().setLevel(Level.INFO);
এটির

কেবল সতর্কবাণীগুলি চলে যায়নি, তবে আমি কনসোল উইন্ডোতে কিছু সহজেই ডিবাগ তথ্য আউটপুট পেয়েছি
বেকড ইনহেল্ট

2
সুতরাং বিদ্রূপাত্মক..আমি এটি উত্পাদন অবস্থাতে ব্যবহার করি
aswzen

25

যদি আপনি কেবল সমস্ত কিছু থেকে মুক্তি পান (উদাহরণস্বরূপ যদি আপনি পরীক্ষায় থাকেন)

org.apache.log4j.BasicConfigurator.configure(new NullAppender());

20

অনুযায়ী এ্যাপাচি Log4j FAQ পৃষ্ঠায় :

"লগারের জন্য কোনও অ্যাপেন্ডার পাওয়া যায় নি" এবং "দয়া করে লগ 4j সঠিকভাবে কনফিগার করুন" সম্পর্কে কেন আমি একটি সতর্কতা দেখছি?

এই ঘটে যখন ডিফল্ট কনফিগারেশন ফাইল log4j.propertiesএবং log4j.xmlপাওয়া যাবে না এবং আবেদন সঞ্চালিত কোন স্পষ্ট কনফিগারেশন। ডিফল্ট কনফিগারেশন ফাইলগুলি সনাক্ত করতে log4jব্যবহার Thread.getContextClassLoader().getResource()করে এবং সরাসরি ফাইল সিস্টেমটি পরীক্ষা করে না। Log4j.properties স্থাপন করার জন্য উপযুক্ত অবস্থান জানা বা log4j.xmlব্যবহারের ক্ষেত্রে শ্রেণি লোডার অনুসন্ধান কৌশল বোঝার প্রয়োজন। log4jকনসোল বা ফাইল সিস্টেমের আউটপুট কিছু পরিবেশে নিষিদ্ধ হতে পারে বলে একটি ডিফল্ট কনফিগারেশন সরবরাহ করে না।

মূলত সতর্কবার্তাটি কোনও সংযোজনকারীকে লগারের জন্য খুঁজে পাওয়া যায়নি তার অর্থ আপনি ব্যবহার করছেনlog4j লগিং সিস্টেম তবে আপনি আপনার কনফিগারেশন ফাইলে কোনও অ্যাপেন্ডার (যেমন ফাইল অ্যাপেন্ডার, কনসোল অ্যাপেন্ডার, সকেটঅ্যাপেন্ডার, সিসলগ অ্যাপেন্ডার ইত্যাদি) যুক্ত করেন নি বা কনফিগারেশন ফাইলটি অনুপস্থিত।

লগ 4 জে কনফিগার করার জন্য তিনটি উপায় রয়েছে: log4j.propertiesএকটি এক্সএমএল ফাইল সহ এবং জাভা কোড ( rootLogger.addAppender(new NullAppender());) এর মাধ্যমে একটি বৈশিষ্ট্য ফাইল ( ) সহ ।

log4j.properties

যদি আপনি সম্পত্তি ফাইল উপস্থিত থাকেন (যেমন সোলার ইনস্টল করার সময়), আপনার এই ফাইলটি আপনার ক্লাসপথ ডিরেক্টরিতে স্থাপন করা দরকার।

ক্লাসপাথ

আপনার ক্লাসপথের মানটি কীভাবে নির্ধারণ করবেন তা এখানে লিনাক্সের কয়েকটি আদেশ আদেশ রয়েছে:

$ echo $CLASSPATH
$ ps wuax | grep -i classpath
$ grep -Ri classpath /etc/tomcat? /var/lib/tomcat?/conf /usr/share/tomcat?

বা জাভা থেকে: System.getProperty("java.class.path")

লগ 4 জ এক্সএমএল

XML বিন্যাসে log4j এর জন্য নীচে একটি বেসিক XML কনফিগারেশন ফাইল রয়েছে:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <param name="Target" value="System.out"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/> 
    </layout> 
  </appender> 

  <root> 
    <priority value ="debug" /> 
    <appender-ref ref="console" /> 
  </root>
  
</log4j:configuration>

হুল বিড়াল

আপনি যদি টমক্যাট ব্যবহার করছেন তবে আপনি এটি log4j.properties: /usr/share/tomcat?/lib/বা /var/lib/tomcat?/webapps/*/WEB-INF/lib/ফোল্ডারে রেখে দিতে পারেন।

Solr

রেফারেন্সের জন্য, সোলার ডিফল্ট log4j.propertiesফাইলটি দেখে মনে হয়:

#  Logging level
solr.log=logs/
log4j.rootLogger=INFO, file, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n

#- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=4MB
log4j.appender.file.MaxBackupIndex=9

#- File to log to and log format
log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n

log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.hadoop=WARN

# set to INFO to enable infostream log messages
log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF

কেন J4EE বা ওয়ার অ্যাপ্লিকেশনটিতে লগ 4 জে আমার সম্পত্তি ফাইল খুঁজে পাবে না?

সংক্ষিপ্ত উত্তর: লগ 4 জে ক্লাস এবং সম্পত্তি ফাইলগুলি একই শ্রেণিবোর্ডারের স্কোপের মধ্যে নেই।

লগ 4 জ Class.forName()ক্লাস লোড করার জন্য কেবলমাত্র ডিফল্ট প্রক্রিয়া ব্যবহার করে । সংস্থানগুলি একইভাবে পরিচালিত হয়। java.lang.ClassLoaderআরও তথ্যের জন্য ডকুমেন্টেশন দেখুন ।

সুতরাং, আপনার যদি সমস্যা হয় তবে ক্লাসটি লোড করার চেষ্টা করুন বা নিজেই উত্স করুন। আপনি যদি এটি খুঁজে না পান তবে লগ 4 জেগেও ব্যবহার করবে না। ;)


আরো দেখুন:


12

আপনি আপনার জাভা অ্যাপ্লিকেশনটির ভিতরে থেকে আপনার লগ 4j.properties এর অবস্থান সেট করতে পারেন:

org.apache.log4j.PropertyConfigurator.configure(file/location/log4j.properties)

আরও তথ্য এখানে উপলব্ধ: https://logging.apache.org/log4j/1.2/manual.html


1
হুমমম, ক্লাস পাওয়া গেল না। importকোড সমাপ্তি সমস্ত নির্ভরযোগ্য নয় বলে একটি বিবৃতি সর্বদা সহায়ক।
মার্টিন

11

একটি লগ 4j.properties বা লগ 4j.xML অনলাইনে সন্ধান করুন যার মূল সংযোজন রয়েছে এবং এটি আপনার ক্লাসপথে রেখে দিন।

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout

কনসোলে লগ হবে। আমি কোনও ফাইলে লগিং করতে পছন্দ করি যাতে আপনি পরে তদন্ত করতে পারেন।

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file

যদিও ভার্বোজ লগিং অ্যাপ্লিকেশনগুলির জন্য 100KB সাধারণত 1MB বা 10MB করা দরকার, বিশেষত ডিবাগের জন্য।

ব্যক্তিগতভাবে আমি একাধিক লগার সেট আপ করেছি, এবং ডিবাগের পরিবর্তে সতর্কতা বা ত্রুটি স্তরের জন্য রুট লগার সেট করেছি।


9

ক্লাসপথে সম্পত্তি ফাইল না রেখে এটি করার আরেকটি উপায় হ'ল সরাসরি জাভা কোড থেকে সম্পত্তি সেট করা। এখানে নমুনা কোড।

public class Log4JSample {

public static void main(String[] args) {
    Properties properties=new Properties();
    properties.setProperty("log4j.rootLogger","TRACE,stdout,MyFile");
    properties.setProperty("log4j.rootCategory","TRACE");

    properties.setProperty("log4j.appender.stdout",     "org.apache.log4j.ConsoleAppender");
    properties.setProperty("log4j.appender.stdout.layout",  "org.apache.log4j.PatternLayout");
    properties.setProperty("log4j.appender.stdout.layout.ConversionPattern","%d{yyyy/MM/dd HH:mm:ss.SSS} [%5p] %t (%F) - %m%n");

    properties.setProperty("log4j.appender.MyFile", "org.apache.log4j.RollingFileAppender");
    properties.setProperty("log4j.appender.MyFile.File", "my_example.log");
    properties.setProperty("log4j.appender.MyFile.MaxFileSize", "100KB");
    properties.setProperty("log4j.appender.MyFile.MaxBackupIndex", "1");
    properties.setProperty("log4j.appender.MyFile.layout",  "org.apache.log4j.PatternLayout");
    properties.setProperty("log4j.appender.MyFile.layout.ConversionPattern","%d{yyyy/MM/dd HH:mm:ss.SSS} [%5p] %t (%F) - %m%n");

    PropertyConfigurator.configure(properties);

    Logger logger = Logger.getLogger("MyFile");

    logger.fatal("This is a FATAL message.");
    logger.error("This is an ERROR message.");
    logger.warn("This is a WARN message.");
    logger.info("This is an INFO message.");
    logger.debug("This is a DEBUG message.");
    logger.trace("This is a TRACE message.");
}

}


6

আপনি সেটলেভেল () ব্যবহার করে লগ স্তর সেট আপ করতে পারেন ।

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

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

Logger.getRootLogger().setLevel(Level.WARN); //will not show debug messages

সম্ভাব্য স্তরের সেটটি হ'ল:

ট্রেস

ডিবাগ,

তথ্য,

সতর্ক,

ত্রুটি এবং

মারাত্মক

মতে লগিং সার্ভিস ম্যানুয়াল


6
import org.apache.log4j.BasicConfigurator;

এই পদ্ধতিটি কল করুন

BasicConfigurator.configure();

বিশেষত, এটি লিখেছে System.out। নন-আরগস কনফিগার করার পদ্ধতির জাভাদোক বলেছেন:Add a ConsoleAppender that uses PatternLayout using the PatternLayout#TTCC_CONVERSION_PATTERN and prints to System.out to the root category.
sunil

3

সক্রিয় করার জন্য -Dlog4j.debug, আমি যেতে সিস্টেম, উন্নত সিস্টেম সেটিংস, পরিবেশ ভেরিয়েবল এবং সেট সিস্টেম ভেরিয়েবল _JAVA_OPTIONSথেকে -Dlog4j.debug


1

আপনি কি বিকাশ করছেন? আপনি কি অ্যাপাচি টমক্যাট ব্যবহার করছেন?

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyyMMdd HH:mm:ss.SSS} [[%5p] %c{1} [%t]] %m%n

আমার জাভা অ্যাপে এর মতো বৈশিষ্ট্য রয়েছে।


1

আমার লগ 4j সম্পত্তি ফাইলের নীচে স্থির হয়ে গেছে:

## direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=./logs/test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file

হাই, ডিবাগ কনসোল এবং ফাইলের ত্রুটির জন্য আমি এটি কীভাবে কনফিগার করতে পারি?
ঝোনআরিয়াস

1

আমি ফাইল তৈরি করেছি log4j.properties মধ্যে সম্পদ পাশে ফোল্ডারের hibernate.cfg.xml ফাইল এবং নীচের টেক্সট সঙ্গে এটি ভরাট:

log4j.rootLogger=INFO, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n

এখন আমি সতর্কতা এবং ত্রুটি থেকে মুক্তি পেয়েছি


1

সহজভাবে, src / main / সমাবেশ ফোল্ডারের অধীনে log4j.properties তৈরি করুন। কনসোলে বা আপনার ফাইলটি সংশোধনকারী ফাইলে লগ বার্তাগুলি প্রদর্শিত হতে চান তা নির্ভর করে। নিম্নলিখিতটি আপনার বার্তাগুলি কনসোলে প্রদর্শন করতে যাচ্ছে।

# Root logger option
log4j.rootLogger=INFO, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

1

আগে যেমন ব্যাখ্যা করা হয়েছে সেখানে 2 টি পন্থা রয়েছে

প্রথমটি হ'ল আপনার প্রধান পদ্ধতিতে এই লাইনটি যুক্ত করা:

BasicConfigurator.configure();

দ্বিতীয় পন্থাটি আপনার শ্রেণিপথে এই স্ট্যান্ডার্ড লগ 4j.properties ফাইল যুক্ত করুন:

দ্বিতীয় পন্থা নেওয়ার সময় আপনাকে নিশ্চিত করতে হবে যে আপনি ফাইলটি সঠিকভাবে শুরু করেছেন।

যেমন।

Properties props = new Properties();

props.load(new FileInputStream("log4j property file path"));

props.setProperty("log4j.appender.File.File", "Folder where you want to store log files/" + "File Name");

লগ ফাইলগুলি সঞ্চয় করার জন্য আপনি প্রয়োজনীয় ফোল্ডার তৈরি করেছেন তা নিশ্চিত করুন।


1

Log4j: কনফিগারেশন নোডকে সত্যে ডিবাগ বৈশিষ্ট্য সেট করার চেষ্টা করুন।

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">

লগ 4 জে এনভায়রনমেন্ট কনফিগার করার জন্য কনফিগারেশন ফাইলটি পড়ে এবং ব্যবহৃত হওয়ায় এটি তথ্য মুদ্রণ করে। আপনার সমস্যা সমাধানের জন্য আপনাকে আরও বিশদ পেতে পারে।


কেউ কি জানে? রানটাইম প্রারম্ভকালে -Dlog4j.debug = সেটিংয়ে ফিরে না এসে কি একই বিকল্প বৈশিষ্ট্য কনফিগারেশন থেকে ব্যবহারযোগ্য?
জেএফকে

1

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

প্যাকেজ java.util.logging the জাভা প্ল্যাটফর্মের মূল লগিং সুবিধার ক্লাস এবং ইন্টারফেস সরবরাহ করে।


লগ 4 জে 1.x «লগ 4j একটি জনপ্রিয় জাভা ভিত্তিক লগিং ইউটিলিটি। অনেক লেখকের কাজের ভিত্তিতে লগ 4 জ একটি ওপেন সোর্স প্রকল্প project এটি অ্যাপেন্ডার্স [কনসোল, ফাইল, ডিবি এবং ইমেল] ব্যবহার করে কোন লগ স্টেটমেন্টগুলি বিভিন্ন স্থানে আউটপুট হয় তা বিকাশকারীকে নিয়ন্ত্রণ করতে দেয়। বাহ্যিক কনফিগারেশন ফাইল ব্যবহার করে রানটাইম এ এটি সম্পূর্ণরূপে কনফিগার করা যায়।

Log4j এর তিনটি প্রধান উপাদান রয়েছে:


কনফিগারেশন ফাইলগুলি XML বা জাভা বৈশিষ্ট্যগুলিতে (কী = মান) ফর্ম্যাটে লেখা যেতে পারে।

  1. log4j_Extern.properties «জাভা বৈশিষ্ট্য (কী = মান) ফর্ম্যাট

একটি খোলার " $ { " এবং " } " বন্ধ করার মধ্যবর্তী স্ট্রিংটিকে কী হিসাবে ব্যাখ্যা করা হয়। বিকল্প ভেরিয়েবলের মান সিস্টেম বৈশিষ্ট্য হিসাবে বা কনফিগারেশন ফাইল হিসাবে সংজ্ঞায়িত করা যেতে পারে। অ্যাপেন্ডার নির্দিষ্ট বিকল্প সেট করুন। 4 log4j.appender.appenderName.option = মান, প্রতিটি নামযুক্ত অ্যাপেন্ডারের জন্য আপনি এর লেআউট কনফিগার করতে পারেন।

log4j.rootLogger=INFO, FILE, FILE_PER_SIZE, FILE_PER_DAY, CONSOLE, MySql

#log.path=./
log.path=E:/Logs

# https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html
# {%-5p - [WARN ,INFO ,ERROR], %5p 0- [ WARN, INFO,ERROR]}
log.patternLayout=org.apache.log4j.PatternLayout
log.pattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n

# System.out | System.err
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.err
log4j.appender.CONSOLE.layout=${log.patternLayout}
log4j.appender.CONSOLE.layout.ConversionPattern=${log.pattern}

# File Appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log.path}/logFile.log
#log4j:ERROR setFile(null,false) call failed. - Defaults setFile(null,true)
#log4j.appender.FILE.Append = false
log4j.appender.FILE.layout=${log.patternLayout}
log4j.appender.FILE.layout.ConversionPattern=${log.pattern}

# BackUP files for every Day.
log4j.appender.FILE_PER_DAY=org.apache.log4j.DailyRollingFileAppender
# [[ Current File ] - logRollingDayFile.log ], { [BackUPs] logRollingDayFile.log_2017-12-10, ... }
log4j.appender.FILE_PER_DAY.File=${log.path}/logRollingDayFile.log
log4j.appender.FILE_PER_DAY.DatePattern='_'yyyy-MM-dd
log4j.appender.FILE_PER_DAY.layout=${log.patternLayout}
log4j.appender.FILE_PER_DAY.layout.ConversionPattern=${log.pattern}

# BackUP files for size rotation with log cleanup.
log4j.appender.FILE_PER_SIZE=org.apache.log4j.RollingFileAppender
# [[ Current File ] - logRollingFile.log ], { [BackUPs] logRollingFile.log.1, logRollingFile.log.2}
log4j.appender.FILE_PER_SIZE.File=${log.path}/logRollingFile.log
log4j.appender.FILE_PER_SIZE.MaxFileSize=100KB
log4j.appender.FILE_PER_SIZE.MaxBackupIndex=2
log4j.appender.FILE_PER_SIZE.layout=${log.patternLayout}
log4j.appender.FILE_PER_SIZE.layout.ConversionPattern=${log.pattern}

# MySql Database - JDBCAppender
log4j.appender.MySql=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.MySql.driver=com.mysql.jdbc.Driver
log4j.appender.MySql.URL=jdbc:mysql://localhost:3306/automationlab
log4j.appender.MySql.user=root
log4j.appender.MySql.password=
log4j.appender.MySql.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.MySql.layout.ConversionPattern=INSERT INTO `logdata` VALUES ('%p', '%d{yyyy-MM-dd HH:mm:ss}', '%C', '%M', '%L', '%m');
#log4j.appender.MySql.sql=INSERT INTO `logdata` VALUES ('%p', '%d{yyyy-MM-dd HH:mm:ss}', '%C', '%M', '%L', '%m');

# Direct log events[Messages] to MongoDB Collection - MongoDbAppender
log.mongoDB.hostname=loalhost
log.mongoDB.userName=Yash777
log.mongoDB.password=Yash@123
log.mongoDB.DB=MyLogDB
log.mongoDB.Collection=Logs

log4j.appender.MongoDB=org.log4mongo.MongoDbAppender
log4j.appender.MongoDB.hostname=${log.mongoDB.hostname}
log4j.appender.MongoDB.userName=${log.mongoDB.userName}
log4j.appender.MongoDB.password=${log.mongoDB.password}
log4j.appender.MongoDB.port=27017
log4j.appender.MongoDB.databaseName=${log.mongoDB.DB}
log4j.appender.MongoDB.collectionName=${log.mongoDB.Collection}
log4j.appender.MongoDB.writeConcern=FSYNCED

টেবিলের জন্য মাইএসকিউএল সারণি কাঠামো logdata

CREATE TABLE IF NOT EXISTS `logdata` (
  `Logger_Level` varchar(5) COLLATE utf8_unicode_ci NOT NULL,
  `DataTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `ClassName` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `MethodName` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `LineNumber` int(10) NOT NULL,
  `Message` text COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  1. log4j_External.xML «XML লগ 4j: পাবলিক ডিটিডি ফাইলের সাথে কনফিগারেশন
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE log4j:configuration PUBLIC
  "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration debug="false">

    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <param name="target" value="System.out" />
        <param name="threshold" value="debug" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
        </layout>
    </appender>

    <appender name="FILE" class="org.apache.log4j.FileAppender">
        <param name="file" value="E:/Logs/logFile.log" />
        <param name="append" value="false" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
        </layout>
    </appender>

    <appender name="FILE_PER_SIZE" class="org.apache.log4j.RollingFileAppender">
        <param name="file" value="E:/Logs/logRollingFile.log" />
        <param name="immediateFlush" value="true"/>
        <param name="maxFileSize" value="100KB" />
        <param name="maxBackupIndex" value="2"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
        </layout>
    </appender>

    <appender name="FILE_PER_DAY" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="file" value="E:/Logs/logRollingDayFile.log" />
        <param name="datePattern" value="'_'yyyy-MM-dd" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n"/>
        </layout>
    </appender>

    <root>
        <priority value="info" />
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
        <appender-ref ref="FILE_PER_SIZE" />
        <appender-ref ref="FILE_PER_DAY" />
    </root>
</log4j:configuration>

  1. জাভা প্রোগ্রামের URL থেকে লগ 4 জে কনফিগারেশন:

একটি বাহ্যিক ফাইলের সাথে একটি কাস্টম কনফিগারেশন নির্দিষ্ট করতে, ব্যবহৃত শ্রেণিকে কনফিগার ইন্টারফেস প্রয়োগ করতে হবে ।

যখন ডিফল্ট কনফিগারেশন ফাইলগুলি "log4j.properties", "log4j.xML" উপলব্ধ থাকে না

  • "Log4j.properties" এর জন্য আপনি সম্পত্তি Configurator .configure (java.net.URL) পদ্ধতিতে খাওয়ানো যেতে পারেন ।
  • "Log4j.xML" এর জন্য DOMConfigurator ব্যবহার করা হবে।
public class LogFiles {
    // Define a static logger variable so that it references the Logger instance named "LogFiles".
    static final Logger log = Logger.getLogger( LogFiles.class );

    @SuppressWarnings("deprecation")
    public static void main(String[] args) {
        System.out.println("CONFIGURATION_FILE « "+LogManager.DEFAULT_CONFIGURATION_FILE);
        System.out.println("DEFAULT_XML_CONFIGURATION_FILE = 'log4j.xml' « Default access modifier");

        String fileName = //"";
                //"log4j_External.xml";
                "log4j_External.properties";
        String configurationFile = System.getProperty("user.dir")+"/src/" + fileName;

        if( fileName.contains(".xml") ) {
            DOMConfigurator.configure( configurationFile );
            log.info("Extension *.xml");
        } else if ( fileName.contains(".properties") ) {
            PropertyConfigurator.configure( configurationFile );
            log.info("Extension *.properties");
        } else {
            DailyRollingFileAppender dailyRollingAppender = new DailyRollingFileAppender();
            dailyRollingAppender.setFile("E:/Logs/logRollingDayFile.log");
            dailyRollingAppender.setDatePattern("'_'yyyy-MM-dd");

            PatternLayout layout = new PatternLayout();
            layout.setConversionPattern( "%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" );
            dailyRollingAppender.setLayout(layout);

            dailyRollingAppender.activateOptions();

            Logger rootLogger = Logger.getRootLogger();
            rootLogger.setLevel(Level.DEBUG);
            rootLogger.addAppender(dailyRollingAppender);

            log.info("Configuring from Java Class.");
        }

        log.info("Console.Message.");
        method2();
        methodException(0);
    }

    static void method2() {
        log.info("method2 - Console.Message.");
    }
    static void methodException(int b) {
        try {
            int a = 10/b;
            System.out.println("Result : "+ a);
            log.info("Result : "+ a);
        } catch (Exception ex) { // ArithmeticException: / by zero
            log.error(String.format("\n\tException occurred: %s", stackTraceToString(ex)));
        }
    }
    public static String stackTraceToString(Exception ex) {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        ex.printStackTrace(pw);
        return sw.toString();
    }
}

1

আমার জন্য ঠিক করা ছিল "লগ 4j.properties" "এসসিআর" ফোল্ডারে।


0

যদি আমরা log4j এর শীর্ষে অ্যাপাচি কমন্স লগিং মোড়ক ব্যবহার করি, তবে আমাদের উভয় বয়ামগুলি ক্লাসপথে উপলব্ধ থাকতে হবে। এছাড়াও, commons-logging.propertiesএবং log4j.properties/xmlক্লাসপথে উপলব্ধ হওয়া উচিত।

আমরা ব্যবহার log4j.propertiesহিসাবে বাস্তবায়ন ক্লাস এবং নাম পাস করতে পারেন । অ্যাপ / ওয়েব সার্ভারের ক্ষেত্রে সেটিংসের মাধ্যমেও একই কাজ করা যেতে পারে ।JAVA_OPTS-Dorg.apache.commons.logging.Log=<logging implementation class name> -Dlog4j.configuration=<file:location of log4j.properties/xml file>JAVA_OPTS

এটি বৈশিষ্ট্য বহিরাগত করতে সহায়তা করবে যা মোতায়েনের ক্ষেত্রে পরিবর্তন করা যেতে পারে।


0

এটি .ml ব্যবহার করে একটি বিকল্প উপায়

যুক্তি কাঠামো:

Configuration:
    Properties:
    Appenders:
    Loggers:

নমুনা:

Configutation:
    name: Default

    Properties:
        Property:
            name: log-path
            value: "logs"

    Appenders:

        Console:
        name: Console_Appender
        target: SYSTEM_OUT
        PatternLayout:
            pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"

       File:
          name: File_Appender
          fileName: ${log-path}/logfile.log
          PatternLayout:
            pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"

    Loggers:

        Root:
            level: debug
            AppenderRef:
              - ref: Console_Appender

        Logger:
            - name: <package>.<subpackage>.<subsubpackage>.<...>
              level: debug
              AppenderRef:
                 - ref: File_Appender
                 level: error             

তথ্যসূত্র : লগ 4 জ 2 কনফিগারেশন : ইয়ামল ব্যবহার করছে


0

পরীক্ষার জন্য, লগ স্তর নির্ধারণ সহ একটি দ্রুত-নোংরা উপায়:

org.apache.log4j.BasicConfigurator.configure();
org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.WARN);

// set to Level.DEBUG for full, or Level.OFF..

0

ম্যাভেন সমাধান:

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

    <properties>
        <slf4jVersion>1.7.28</slf4jVersion>
    </properties>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4jVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jdk14</artifactId>
            <version>${slf4jVersion}</version>
        </dependency>

0

আমি সবেমাত্র এটি করেছি এবং বিষয়টি ঠিক হয়ে গেছে।

নীচের ব্লগ অনুসরণ

https://intellij-support.jetbrains.com/hc/en-us/community/posts/206875685-How-to-fix-log4j-WARN-console-messages-when-running-an-Application-inside-IntelliJ- ধারণা

তবে এখানে সে নীচের মত বলে

এটি ঠিক করতে আপনার প্রকল্পের মূল / সংস্থান ফোল্ডারে কেবল নিম্নলিখিত লগ 4j.resورس ফাইলটি প্রবেশ করুন

লগ 4j.res উত্স তৈরির পরিবর্তে লগ 4j.properties তৈরি করুন। ইন্টেলিজজে রিসোর্সে ডান ক্লিক করুন -> নতুন -> রিসোর্স বান্ডেল - কেবল লোগোজেজে এর নাম দিন


0

log4j.propertiesবা যুক্ত করার পরেও যদি আপনার ইন্টেলিজ আইডিইএতে এই ত্রুটিটি হয়log4j.xmlআপনার রিসোর্স টেস্ট ফোল্ডারে ফাইল ফাইল হয়ত ইনটেলিজ আইডিইএ ফাইলটির অস্তিত্ব সম্পর্কে এখনও অবগত নয়।

সুতরাং, ফাইল যুক্ত করার পরে, ফাইলটিতে ডান ক্লিক করুন এবং রিকম্পাইল লগ 4j.xML নির্বাচন করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.