Log4j को ठीक से कैसे इनिशियलाइज़ करें?


280

अपने आवेदन में log4j जोड़ने के बाद मुझे हर बार अपने आवेदन को निष्पादित करने के बाद निम्नलिखित आउटपुट मिलते हैं:

log4j: WARN कोई लकड़हारा लकड़हारा (slideselector.facedata.FaceDataParser) के लिए नहीं पाया जा सकता है।
log4j: WARN कृपया log4j सिस्टम को ठीक से इनिशियलाइज़ करें।

ऐसा लगता है कि इसका मतलब है कि कॉन्फ़िगरेशन फ़ाइल गायब है। यह कॉन्फ़िग फ़ाइल कहाँ स्थित होनी चाहिए और एक अच्छी शुरुआत सामग्री क्या है?

मैं एक डेस्कटॉप एप्लिकेशन विकसित करने के लिए सादे जावा का उपयोग कर रहा हूं। तो कोई वेबसर्वर आदि नहीं ...


49
मेरे जैसे सभी मावेन लोगों के लिए: log4j.properties को src / main / resource में डालें !!
करूसल

Log4j प्रलेखन में log4j.xml फ़ाइल का एक बहुत ही बुनियादी नमूना है
केन ब्लूम

यह Log4j के छोटे मैनुअल पर जाने के लिए बहुत मददगार है: logging.apache.org/log4j/1.2/manual.html
Sa'ad

जवाबों:


278

Log4jडिफ़ॉल्ट रूप से किसी फ़ाइल के लिए log4j.propertiesया log4j.xmlक्लासपाथ पर दिखता है ।

आप यहां बताए गए सिस्टम गुण सेट करके खुद को इनिशियलाइज़ करने के लिए किस फाइल का उपयोग करते हैं, इस पर नियंत्रण कर सकते हैं ("डिफ़ॉल्ट प्रारंभिक प्रक्रिया" अनुभाग देखें)।

उदाहरण के लिए:

java -Dlog4j.configuration=customName ....

कारण होगा log4jclasspath पर customName नामक एक फ़ाइल के लिए देखने के लिए।

अगर आपको समस्या हो रही है तो मुझे log4j.debug चालू करना मददगार लगता है:

-Dlog4j.debug

यह System.out के बारे में बहुत सारी उपयोगी जानकारी के लिए प्रिंट करेगा कि किस फ़ाइल ने खुद को इनिशियलाइज़ करने के लिए किस फाइल का उपयोग किया है, कौन सा लकड़हारा / परिशिष्ट कॉन्फ़िगर किया गया और कैसे हुआ आदि।

कॉन्फ़िगरेशन फ़ाइल जावा गुण फ़ाइल या xml फ़ाइल हो सकती है। यहाँ log4j इंट्रो डॉक्यूमेंटेशन पेज से ली गई प्रॉपर्टीज़ फ़ाइल फॉर्मेट का एक नमूना है :

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
तो विन्यास फाइल को उस फ़ाइल से लोड करने के लिए, जो किसी क्लासपैथ पर नहीं है, आपको इसे करना होगा: -Dlog4j.configuration = फ़ाइल: / c: /my/folder/log4j.properties जो वास्तव में एक URL है।
bbcooper

15
एक छोटी सी टिप जो शायद किसी को उपयोगी लगेगी: आप कोड में संबंधित संपत्ति को सक्षम करके log4j डिबगर को भी चालू कर सकते हैं - System.setProperty ("log4j.debug", "");
XXL

कहां लगाते हैं java -Dlog4j.configuration=customName? मैंने प्रोजेक्ट / प्राथमिकताएं / रन / डिबग सेटिंग्स की कोशिश की, कुछ कॉन्फ़िगरेशन उठाए, संपादित करें, तर्क टैब, VM तर्क क्लिक किए। क्या customName में .xml एक्सटेंशन शामिल है?
नूमेन

2
कई विविधताओं को आज़माने के बाद, इसने काम किया: -Dlog4j.configuration = file: /// C: /mydir/subdir/log4j.properties उपरोक्त उदाहरण: -Dlog4j.configuration: file: / c: /my/folder/log4j.properties अनुत्तीर्ण होना।
user1062589

1
मैं वास्तव में चाहता हूं कि मैनुअल अधिक जोर देगा जो -Dlog4j.debugआपके कॉन्फ़िगरेशन को डीबग करने में मदद कर सकता है।
श्रीधर सरनोबत

239

जबकि log4j को ठीक से स्थापित करना "वास्तविक" परियोजनाओं के लिए बहुत अच्छा है, आप एक त्वरित और गंदे समाधान चाहते हैं, उदाहरण के लिए यदि आप सिर्फ एक नई लाइब्रेरी का परीक्षण कर रहे हैं।

यदि ऐसा है तो स्टेटिक मेथड पर कॉल करें

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

कंसोल में बेसिक लॉगिंग सेटअप करेगा, और एरर मैसेज चला जाएगा।


हाय ए ३। 14_ इनफिनिटी जहां मुझे इसका उपयोग करना चाहिए? मैं नहीं समझ सकता यहां तक ​​कि मैंने इस मुद्दे के लिए और अधिक जवाब दिए हैं। कृपया मेरी मदद करें
रवि पोटनुरु

5
ध्यान रखें कि यह डिबग-स्तर लॉगिंग के लिए डिफ़ॉल्ट होगा, जो वांछनीय नहीं हो सकता है। आप इसे इस तरह बदल सकते हैं:Logger.getRootLogger().setLevel(Level.INFO);
forresthopkinsa

न सिर्फ चेतावनियाँ चली गईं, बल्कि मुझे कंसोल विंडो में कुछ आसान डिबग
इंफो

2
इसलिए विडंबना..हम इसे उत्पादन की स्थिति पर उपयोग करें
aswzen

25

यदि आप सब कुछ से छुटकारा पा लेते हैं (जैसे यदि आप परीक्षण में हैं)

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

20

के अनुसार Apache log4j FAQ पृष्ठ :

मुझे "लकड़हारे के लिए कोई ऐपेंडर्स नहीं मिला" और "कृपया लॉग 4 जे को ठीक से कॉन्फ़िगर करें" के बारे में चेतावनी क्यों दिखाई देती है?

यह तब होता है जब डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइलें log4j.propertiesऔर log4j.xmlनहीं मिल सकती हैं और एप्लिकेशन कोई स्पष्ट कॉन्फ़िगरेशन नहीं करता है। डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइलों का पता लगाने के लिए log4jउपयोग करता Thread.getContextClassLoader().getResource()है और सीधे फ़ाइल सिस्टम की जांच नहीं करता है। लॉग 4j.properties रखने के लिए उपयुक्त स्थान को जानना या log4j.xmlउपयोग में क्लास लोडर की खोज रणनीति को समझने की आवश्यकता है। log4jकंसोल के लिए आउटपुट के बाद से डिफ़ॉल्ट कॉन्फ़िगरेशन प्रदान नहीं करता है या फ़ाइल सिस्टम कुछ वातावरणों में निषिद्ध हो सकता है।

मूल रूप से चेतावनी लकड़हारा के लिए कोई भी एपेंडर्स नहीं पाया जा सकता है जिसका अर्थ है कि आप log4jलॉगिंग सिस्टम का उपयोग कर रहे हैं , लेकिन आपने अपने कॉन्फ़िगरेशन फ़ाइल या कॉन्फ़िगरेशन फ़ाइल में कोई भी ऐपेंडर्स (जैसे कि फाइलएपेंडर, कंसोलप्लेन्डर, सॉकेटऐपेंडर, सिसलोगएपेंडर, आदि) नहीं जोड़ा है। लापता।

Log4j को कॉन्फ़िगर करने के तीन तरीके हैं: एक गुण फ़ाइल ( log4j.properties) के साथ, एक XML फ़ाइल और जावा कोड के माध्यम से ( rootLogger.addAppender(new NullAppender());)।

log4j.properties

यदि आपके पास प्रॉपर्टी फाइल मौजूद है (जैसे कि सोलर इंस्टॉल करते समय), तो आपको इस फाइल को अपनी क्लासपैथ डायरेक्टरी में रखना होगा ।

classpath

यहाँ लिनक्स में कुछ कमांड सुझाव दिए गए हैं कि कैसे अपने वर्गपथ मूल्य का निर्धारण करें:

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

या जावा से System.getProperty("java.class.path"):।

Log4j XML

नीचे 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>

बिल्ला

यदि आप Tomcat का उपयोग कर रहे हैं, तो आप अपना स्थान 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 या WAR एप्लिकेशन में log4j को मेरी गुण फ़ाइल क्यों नहीं मिल सकती है?

संक्षिप्त उत्तर: log4j कक्षाएं और गुण फ़ाइल समान क्लास लोडर के दायरे में नहीं हैं।

Log4j केवल Class.forName()लोडिंग कक्षाओं के लिए डिफ़ॉल्ट तंत्र का उपयोग करता है । संसाधनों को इसी तरह से संभाला जाता है। java.lang.ClassLoaderअधिक विवरण के लिए प्रलेखन देखें।

इसलिए, यदि आपको समस्या हो रही है, तो कक्षा या संसाधन को स्वयं लोड करने का प्रयास करें। यदि आप इसे नहीं ढूंढ सकते हैं, तो न ही लॉग 4j करेंगे। ;)


यह सभी देखें:


12

आप उपयोग करके अपने java app के अंदर से अपने log4j.properties का स्थान निर्धारित कर सकते हैं:

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

अधिक जानकारी यहाँ उपलब्ध है: https://log.apache.org/log4j/1.2/manual.html


1
हम्म, क्लास नहीं मिला। एक importकथन हमेशा मददगार होता है क्योंकि कोड पूरा करना विश्वसनीय नहीं होता है।
मार्टिन

11

एक रूट एपेंडर करने वाले एक log4j.properties या log4j.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.
सुनील

3

सक्षम करने के लिए -Dlog4j.debug, मैं सिस्टम, उन्नत सिस्टम सेटिंग्स, पर्यावरण चर और सिस्टम चर _JAVA_OPTIONSको सेट पर जाता हूं -Dlog4j.debug


1

क्या आप में विकसित कर रहे हैं? क्या आप Apache Tomcat का उपयोग कर रहे हैं?

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

मेरा log4j संपत्ति फ़ाइल के नीचे तय हो गया है:

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

मैंने hibernate.cfg.xml फ़ाइल के आगे संसाधन फ़ोल्डर में फ़ाइल log4j.properties बनाया है और इसे नीचे दिए गए पाठ से भर दिया है:

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();

दूसरा तरीका यह है कि इस मानक log4j.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

लॉग 4j में जिम्मेदार डिबग सेट करने का प्रयास करें: कॉन्फ़िगरेशन नोड को सही।

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

यह जानकारी को प्रिंट करता है क्योंकि कॉन्फ़िगरेशन फ़ाइल को पढ़ा जाता है और लॉग 4 जे पर्यावरण को कॉन्फ़िगर करने के लिए उपयोग किया जाता है। आपको अपनी समस्या को हल करने के लिए अधिक विवरण प्राप्त हो सकते हैं।


क्या कोई जानता है? एक ही विकल्प भी सेटिंग से गिरने के बिना गुण विन्यास से प्रयोग करने योग्य है -Dlog4j.debug = रनटाइम स्टार्टअप पर सच?
JFK

1

लॉगिंग एपीआई - जावा लॉगिंग एपीआई एंड यूज़र, सिस्टम एडमिनिस्ट्रेटर, फील्ड सर्विस इंजीनियर और सॉफ्टवेयर डेवलपमेंट टीमों द्वारा विश्लेषण के लिए उपयुक्त लॉग रिपोर्ट तैयार करके ग्राहक साइटों पर सॉफ्टवेयर सर्विसिंग और रखरखाव की सुविधा प्रदान करता है। लॉगिंग एपीआई आवेदन या प्लेटफ़ॉर्म में सुरक्षा विफलताओं, कॉन्फ़िगरेशन त्रुटियों, प्रदर्शन बाधाओं, और / या बग जैसी जानकारी कैप्चर करता है। कोर पैकेज में मैमोरी, आउटपुट स्ट्रीम, कंसोल, फाइल्स और सॉकेट्स के लिए प्लेन टेक्स्ट या XML फॉर्मेट किए गए लॉग रिकॉर्ड देने के लिए सपोर्ट शामिल है। इसके अलावा, लॉगिंग एपीआई लॉगिंग सेवाओं के साथ बातचीत करने में सक्षम हैं जो पहले से ही मेजबान ऑपरेटिंग सिस्टम पर मौजूद हैं।

पैकेज java.util.log «जावा प्लेटफ़ॉर्म की मुख्य लॉगिंग सुविधाओं के वर्ग और इंटरफेस प्रदान करता है।


Log4j 1.x «log4j एक लोकप्रिय जावा-आधारित लॉगिंग उपयोगिता है। Log4j कई लेखकों के काम पर आधारित एक ओपन सोर्स प्रोजेक्ट है। यह डेवलपर को यह नियंत्रित करने की अनुमति देता है कि कौन से लॉग स्टेटमेंट ऐपेंडर्स [कंसोल, फाइल, डीबी और ईमेल] का उपयोग करके विभिन्न स्थानों पर आउटपुट हैं। यह बाहरी कॉन्फ़िगरेशन फ़ाइलों का उपयोग करके रनटाइम पर पूरी तरह से कॉन्फ़िगर करने योग्य है।

Log4j के तीन मुख्य घटक हैं:


कॉन्फ़िगरेशन फ़ाइलों को XML में या जावा गुणों (कुंजी = मान) प्रारूप में लिखा जा सकता है।

  1. log4j_External.properties «जावा गुण (कुंजी = मान) प्रारूप

एक " $ { " और समापन " } " के बीच की स्ट्रिंग को एक कुंजी के रूप में व्याख्या की गई है। प्रतिस्थापित चर के मूल्य को सिस्टम गुण या कॉन्फ़िगरेशन फ़ाइल में ही परिभाषित किया जा सकता है। ऐप्पल विशिष्ट विकल्प सेट करें। «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

तालिका के लिए MySQL तालिका संरचना 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 log4j: सार्वजनिक DTD फ़ाइल के साथ कॉन्फ़िगरेशन
<?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. Java प्रोग्राम में URL से Log4j कॉन्फ़िगरेशन:

बाहरी फ़ाइल के साथ कस्टम कॉन्फ़िगरेशन निर्दिष्ट करने के लिए, उपयोग किए गए वर्ग को कॉन्फ़िगरेशन इंटरफ़ेस लागू करना होगा ।

जब डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइलें "log4j.properties", "log4j.xml" उपलब्ध नहीं हैं

  • "Log4j.properties" के लिए आप PropertyConfigurator .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

मेरे लिए फिक्स "src" फ़ोल्डर में "log4j.properties" डालना था।


0

यदि हम log4j के शीर्ष पर एपाचे कॉमन लॉगिंग रैपर का उपयोग कर रहे हैं, तो हमें क्लासथ में दोनों जार उपलब्ध कराने की आवश्यकता है। इसके अलावा, commons-logging.propertiesऔर log4j.properties/xmlclasspath में उपलब्ध होना चाहिए।

हम उपयोग के 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

यह .yaml का उपयोग कर एक वैकल्पिक तरीका है

तर्क संरचना:

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             

Ref: LOG4J 2 संवहन: का उपयोग करना YAML


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 निर्भरता का उपयोग किया था। यह कॉन्फ़िगरेशन केवल त्वरित परीक्षण के लिए है यदि आप एक मानक कॉन्फ़िगरेशन के साथ एक लकड़हारा का उपयोग करना चाहते हैं। मैं कल्पना कर सकता हूं कि आप बाद में एक कॉन्फ़िगरेशन फ़ाइल बनाना चाहते हैं यदि आपको अधिक जानकारी की आवश्यकता है या अपने स्वयं के लॉगिंग स्तरों को पूरा करना है।

    <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- विचार

लेकिन यहाँ वह नीचे की तरह कहते हैं

यह तय करने के लिए कि अपनी परियोजना के मुख्य / संसाधन फ़ोल्डर में बस निम्नलिखित log4j.resources फ़ाइल दर्ज करें

log4j.resource बनाने के बजाय, log4j.properties बनाएँ। IntelliJ में संसाधन पर राइट क्लिक करें -> नया -> संसाधन बंडल - बस इसे log4j नाम दें


0

यदि आप log4j.propertiesया फिर जोड़ने के बाद भी Intellij IDEA पर यह त्रुटि कर रहे हैंlog4j.xml अपने संसाधन परीक्षण फ़ोल्डर फ़ाइल , तो शायद Intellij IDEA फ़ाइल के अस्तित्व के बारे में अभी तक अवगत नहीं है।

इसलिए, फ़ाइल जोड़ने के बाद, फ़ाइल पर राइट क्लिक करें और Recompile log4j.xml चुनें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.