स्प्रिंग बूट: मैं application.properties के साथ लॉगिंग स्तर कैसे सेट कर सकता हूं?


300

यह बहुत ही सरल प्रश्न है, लेकिन मुझे जानकारी नहीं मिल रही है।
(शायद जावा फ्रेमवर्क के बारे में मेरी जानकारी में भारी कमी है)

मैं आवेदन.प्रयोग के साथ लॉगिंग स्तर कैसे सेट कर सकता हूं?
और लॉगिंग फ़ाइल स्थान, आदि?


1
रिकॉर्ड के लिए, एक अन्य विकल्प लॉग स्तर को पर्यावरण चर के रूप में सेट करना है, उदाहरण के लिए हरको डैशबोर्ड के माध्यम से। में Settings-> वांछित स्तर पर Config Varsसेट logging.level.com.yourpackageकरें (INFO, ERROR, DEBUG)।
ल्यूकसोलर

जवाबों:


354

अपडेट: स्प्रिंग बूट v1.2.0 के साथ शुरू। कृपया, सेटिंग में application.propertiesया application.ymlलागू करें। संदर्भ गाइड के लॉग स्तर अनुभाग देखें ।

logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR

स्प्रिंग बूट के पुराने संस्करणों के लिए आप नहीं कर सकते। आपको बस इसके लिए अपने लॉगिंग फ्रेमवर्क (log4j, logback) के लिए सामान्य कॉन्फ़िगरेशन का उपयोग करना होगा। निर्देशिका के लिए उपयुक्त विन्यास फाइल ( log4j.xmlया logback.xml) जोड़ें src/main/resourcesऔर अपनी पसंद के अनुसार कॉन्फ़िगर करें।

आप --debugकमांड-लाइन से एप्लिकेशन शुरू करते समय निर्दिष्ट करके डिबग लॉगिंग को सक्षम कर सकते हैं ।

स्प्रिंग बूट, लॉगबैक के लिए कुछ डिफॉल्ट, रंग आदि को कॉन्फ़िगर करने के लिए एक अच्छा प्रारंभिक बिंदु भी प्रदान करता है। आधार। xml फ़ाइल जिसे आप बस अपनी लॉगबैक। Xml फ़ाइल में शामिल कर सकते हैं। (यह स्प्रिंग बूट में डिफ़ॉल्ट logback.xml से भी अनुशंसित है ।

<include resource="org/springframework/boot/logging/logback/base.xml"/>     

8
सामान्य रूप से कमांड लाइन पर जो कुछ भी आप कर सकते हैं वह बाहरी कॉन्फिगर फाइल में काम करता है। तो डिबग = सच क्या यह मुझे लगता है। यह ध्वज थोड़ा विशेष है क्योंकि लॉगिंग को बहुत पहले आरंभीकृत किया जाना है, लेकिन मुझे लगता है कि यह काम करेगा।
डेव सीर

7
BTW पसंदीदा लॉगिंग सिस्टम लॉगबैक है, और आपको स्टार्टर पॉम से डिफ़ॉल्ट रूप से जो मिलता है। तो logback.xml ठीक दानेदार तरीके से लॉगिंग को कॉन्फ़िगर करने के लिए सबसे आम उपकरण है। -Debug ध्वज बस कुछ चयनित स्प्रिंग लॉगिंग चैनलों पर स्विच करता है।
डेव सीर

एक और टिप, स्प्रिंग बूट में एक अच्छा आधार शामिल है । xml । जो एक अच्छा शुरुआती बिंदु है। (मेरा विस्तारित जवाब देखें)।
एम। डेइनम

@ M.Deinum आपकी शानदार टिप के लिए फिर से धन्यवाद! अब मैं अपने स्वयं के कोड के लिए लॉग स्तर बदल सकता हूं।
zeodtr

2
लगता है अब हम कर सकते हैं। के रूप में वसंत v4.1.3 के लिए। कृपया (स्प्रिंग बूट v1.2.0 के साथ। कृपया), सेटिंग्स में application.propertiesया application.ymlलागू करते हैं, के रूप में रिचर्ड ने जवाब दिया ( :या =मुद्दा --- --- बृहदान्त्र मेरे लिए काम करने लगता है)।
एरिक प्लटन

108

आप अपने application.properties का उपयोग करके ऐसा कर सकते हैं।

logging.level.=ERROR-> रूट लॉगिंग स्तर को त्रुटि पर सेट करता है
...
logging.level.=DEBUG-> रूट लॉगिंग स्तर को DEBUG में

logging.file=${java.io.tmpdir}/myapp.logसेट करता है -> TMPDIR / myapp.log के लिए पूर्ण लॉग फ़ाइल पथ

सेट करता है। प्रोफ़ाइल का उपयोग करके लॉगिंग के संबंध में आवेदन का एक डिफ़ॉल्ट डिफ़ॉल्ट सेट होगा: application.properties:

spring.application.name=<your app name here>
logging.level.=ERROR
logging.file=${java.io.tmpdir}/${spring.application.name}.log

application-dev.properties:

logging.level.=DEBUG
logging.file=

जब आप अपने पसंदीदा आईडीई के अंदर विकसित होते हैं तो आप -Dspring.profiles.active=devअपने ऐप के रन / डिबग कॉन्फ़िगरेशन के लिए वीएम तर्क के रूप में जोड़ते हैं ।

यह आपको उत्पादन में लॉगिंग में त्रुटि देगा और लॉग फाइल में आउटपुट लिखने के बिना विकास के दौरान लॉगिंग डिबग करेगा। यह विकास के दौरान प्रदर्शन में सुधार करेगा (और ऑपरेशन के कुछ घंटों में एसएसडी ड्राइव को बचाएगा;)।


1
असाइनमेंट के लिए '=' साइन काम नहीं किया। असाइनमेंट ':' के साथ विभाजक के रूप में किया गया था। logging.level.:DEBUG
randominstanceOfLivingThing

2
अजीब बात है, मेरे पास यह सेटअप एक उदाहरण परियोजना में काम कर रहा है। '' (स्पेस), '=' और ':' संकेतों को समान रूप से विभाजक के रूप में माना जाता है, ऐसे मामलों को छोड़कर जहां विभाजक कुंजी में उपयोग किए जाते हैं। क्या आप सुनिश्चित हैं कि आपकी कुंजी में कोई सफेद स्थान नहीं था?
रिचर्ड

1
पुष्टि कर सकते हैं कि ":" काम करता है लेकिन "=" को नजरअंदाज किया जाता है, संपादित करें: जल्द ही बोला गया, "=" और स्तर के बीच एक स्थान था। अब सब कुछ काम करता है।
माइक आर

1
यह मेरे परीक्षण में काम नहीं करता है spring-boot 1.4.0: logging.level.=DEBUGक्या आवेदन शुरू करने में विफल होगा, और त्रुटि प्राप्त होगी:java.lang.ClassCircularityError: java/util/logging/LogRecord
एरिक वैंग

2
मेरे logging.level.लिए बस एक सुविधा वाक्यविन्यास शॉर्टकट है logging.level.root, जिसे एक टाइपो के साथ भ्रमित होने के लिए (1) कम संभावना के रूप में पसंद किया जा सकता है, (2) संभावित रूप से अधिक स्पष्ट, और (3) =असाइनमेंट साइन के साथ काम करना , जो अधिक समग्र स्थिरता प्रदान करता है। कॉन्फ़िगरेशन फ़ाइल के लिए।
एलेन बेकर

66

रूट लॉगिंग स्तर सेट करने का उचित तरीका संपत्ति का उपयोग कर रहा है logging.level.rootदस्तावेज़ीकरण देखें , जिसे इस सवाल के मूल रूप से पूछे जाने के बाद से अपडेट किया गया है।

उदाहरण:

logging.level.root=WARN

15

मान लीजिए कि आपके आवेदन में पैकेज का नाम है com.company.myproject । फिर आप अपने प्रोजेक्ट के अंदर कक्षाओं के लिए लॉगिंग स्तर निर्धारित कर सकते हैं जैसा कि नीचे दिया गया है। एप्लिकेशन और फाइल में

logging.level.com.company.myproject = DEBUG

logging.level.org.springframework.web = DEBUG तथा logging.level.org.hibernate = DEBUG केवल स्प्रिंग फ्रेमवर्क वेब और हाइबरनेट की कक्षाओं के लिए लॉगिंग स्तर निर्धारित करेगा।

लॉगिंग फ़ाइल स्थान उपयोग की स्थापना के लिए

logging.file =/home/ubuntu/myproject.log


14

यदि आप स्प्रिंग बूट पर हैं तो आप सीधे application.properties में निम्नलिखित गुण जोड़ सकते हैं लॉगिंग स्तर सेट करने के लिए फ़ाइल , लॉगिंग पैटर्न को कस्टमाइज़ और लॉग में बाहरी फ़ाइल संग्रहीत कर सकते हैं।

ये विभिन्न लॉगिंग स्तर हैं और न्यूनतम << अधिकतम से इसका क्रम है।

बंद << FATAL << ERROR << WARN << INFO << DEBUG << TRACE << सभी

# To set logs level as per your need.
logging.level.org.springframework = debug
logging.level.tech.hardik = trace

# To store logs to external file
# Here use strictly forward "/" slash for both Windows, Linux or any other os, otherwise, its won't work.      
logging.file=D:/spring_app_log_file.log

# To customize logging pattern.
logging.pattern.file= "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"

अपने लॉग को अधिक स्पष्ट रूप से अनुकूलित करने के लिए कृपया इस लिंक से गुजरें।

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html


मुझे पता नहीं क्यों, लेकिन logging.level.tech.hardik = यह पता लगाने के लिए मेरे मामले में काम नहीं कर रहा है, जब मैं logging.level.roo लगाता हूं = यह काम कर रहा है
अरविंद कुमार

10

यह सुनिश्चित करते हुए कि डेव सीर टिप को कुछ प्यार मिलता है, क्योंकि Application.properties में जोड़ना debug=trueवास्तव में डिबग लॉगिंग को सक्षम करेगा।


8

यदि आप एक अलग लॉगिंग फ्रेमवर्क का उपयोग करना चाहते हैं, उदाहरण के लिए, log4j, मैंने पाया कि सबसे आसान तरीका यह है कि स्प्रिंग बूटिंग को स्वयं लॉगिंग अक्षम करें और अपने स्वयं के कार्यान्वित करें। इस तरह मैं हर फ़ाइल को एक फ़ाइल के भीतर कॉन्फ़िगर कर सकता हूं, log4j.xml (मेरे मामले में) जो है।

इसे प्राप्त करने के लिए आपको बस उन पंक्तियों को अपने pom.xml में जोड़ना होगा:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
</dependency>

आपके पास पहले से ही पहली निर्भरता है और केवल अन्य दो की जरूरत है। कृपया ध्यान दें, कि यह उदाहरण केवल log4j को कवर करता है।
यह सब है, अब आप अपने log4j config फाइल के भीतर बूट के लिए लॉगिंग को कॉन्फ़िगर करने के लिए बिल्कुल तैयार हैं!


इस बहिष्कार ने मेरे लिए काम किया। मेरे बाकी आपी को मेरी लॉग 4 जे निर्भरता और नहीं चुना गया log4j.properties
ankitjaininfo

उनके पास अब स्प्रिंग-बूट-स्टार्टर-लॉग 4 जे 2 भी है
कल्पेश सोनी

4

आप लॉग स्तर को DEBUG में सेट करने का प्रयास कर सकते हैं यह एप्लिकेशन शुरू करते समय सब कुछ दिखाएगा

logging.level.root=DEBUG

3

रिकॉर्ड के लिए: आधिकारिक दस्तावेज , स्प्रिंग बूट के रूप में v1.2.0। कृपया और वसंत v4.1.3। जारी करें:

यदि आपको लॉगिंग करने के लिए आवश्यक एकमात्र परिवर्तन विभिन्न लॉगर्स के स्तरों को निर्धारित करना है, तो आप "logging.level" उपसर्ग का उपयोग करते हुए Application.properties में कर सकते हैं, उदा।

logging.level.org.springframework.web: DEBUG logging.level.org.hibernate: ERROR

आप "logging.file" का उपयोग करके (कंसोल के अतिरिक्त) लॉग इन करने के लिए एक फ़ाइल का स्थान भी सेट कर सकते हैं।

लॉगिंग सिस्टम की अधिक बारीक-बारीक सेटिंग्स को कॉन्फ़िगर करने के लिए आपको सवाल में लॉगिंग सिस्टम द्वारा समर्थित मूल कॉन्फ़िगरेशन प्रारूप का उपयोग करने की आवश्यकता है। डिफ़ॉल्ट रूप से स्प्रिंग बूट सिस्टम के लिए अपने डिफ़ॉल्ट स्थान से मूल कॉन्फ़िगरेशन को चुनता है (जैसे कि classpath: logback.xml for Logback), लेकिन आप "logging.config" संपत्ति का उपयोग करके कॉन्फ़िगरेशन फ़ाइल का स्थान सेट कर सकते हैं।


2

यदि आप अधिक विवरण सेट करना चाहते हैं, तो कृपया लॉग कॉन्फिगर फ़ाइल नाम "logback.xml" या "logback-spring.xml" जोड़ें।

अपने आवेदन में। फाइल में इस तरह से इनपुट करें:

logging.config: classpath:logback-spring.xml

लोबैक-स्प्रिंग.एक्सएमएल में इस तरह से इनपुट करें:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/base.xml"/>

        <appender name="ROOT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">

            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>INFO</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>

            <file>sys.log</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">


                <fileNamePattern>${LOG_DIR}/${SYSTEM_NAME}/system.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>500MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>

            <encoder>
                <pattern>%-20(%d{yyy-MM-dd HH:mm:ss.SSS} [%X{requestId}]) %-5level - %logger{80} - %msg%n
                </pattern>
            </encoder>
        </appender>


        <appender name="BUSINESS_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>TRACE</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>

            <file>business.log</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

                <fileNamePattern>${LOG_DIR}/${SYSTEM_NAME}/business.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>500MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>

            <encoder>
                <pattern>%-20(%d{yyy-MM-dd HH:mm:ss.SSS} [%X{requestId}]) %-5level - %logger{80} - %msg%n
                </pattern>
            </encoder>
        </appender>


        <logger name="{project-package-name}" level="TRACE">
            <appender-ref ref="BUSINESS_APPENDER" />
        </logger>

        <root level="INFO">
            <appender-ref ref="ROOT_APPENDER" />
        </root>

    </configuration>

2

मौजूदा उत्तर महान हैं। मैं सिर्फ आपके साथ एक नया स्प्रिंग बूट फीचर साझा करना चाहता हूं जिससे समूह में लॉग और पूरे समूह पर लॉगिंग स्तर सेट हो सके।

डॉक्स से छूट:

  • एक लॉगिंग समूह बनाएँ
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
  • समूह के लिए लॉगिंग स्तर सेट करें
logging.level.tomcat=TRACE

यह अच्छी सुविधा है जो अधिक लचीलापन लाता है।


2

मेरे वर्तमान विन्यास में मैंने इसे इस तरह से application.yaml में परिभाषित किया है:

logging:
  level:
    ROOT: TRACE

मैं स्प्रिंग-बूट: 2.2.0 का उपयोग कर रहा हूँ। कृपया। आप किसी भी पैकेज को परिभाषित कर सकते हैं जिसके पास TRACE का स्तर होना चाहिए।


1
यह आवेदन स्तर पर स्थापित होता है। ओपी केवल हाइबरनेट लॉग के लिए ट्रेस चाहता है, जिसके लिए आपको लॉग सेटिंग्स में एक पैकेज स्तर के फिल्टर की आवश्यकता होगी
सुदीप भंडारी

2

वसंत बूट परियोजना में हम logging.level.root = WARN लिख सकते हैं, लेकिन यहाँ समस्या यह है, हमें फिर से पुनः आरंभ करना होगा, यहां तक ​​कि हमने devtools निर्भरता को भी जोड़ा है, यदि हम संशोधित किए गए किसी भी मूल्य को ऑटोडेटेक्टेबल नहीं करेंगे, तो इस सीमा के लिए मुझे पता चला समाधान i, e हम pom.xml में एक्ट्यूएटर जोड़ सकते हैं और url बार http: // localhost: 8080 / loggers / ROOT या http: // localhost: 8080 / loggers / com में डाकिया ग्राहक में दिखाए अनुसार लकड़हारा स्तर पास कर सकते हैं। .mycompany और शरीर में आप नीचे दिए गए json प्रारूप को पास कर सकते हैं

{
  "configuredLevel": "WARN"
}

1

ग्रहण आईडीई और आपकी परियोजना के मामले में परिवर्तन को प्रतिबिंबित करने के लिए परियोजना को साफ और निर्माण करना याद रखें।


1

स्प्रिंगबूट 2 के साथ आप इस तरह एक पर्यावरण चर के साथ रूट लॉगिंग स्तर सेट कर सकते हैं:

logging.level.root=DEBUG

या आप इस तरह के पैकेज के लिए विशिष्ट लॉगिंग सेट कर सकते हैं:

logging.level.my.package.name=TRACE

पर्यावरण चर विन्यास के लिए, आप बल्कि उपयोग करेंगे: LOGGING_LEVEL_ROOT=DEBUGऊंट मामले के सिंटैक्स का उपयोग करके
एंथनी डाहने
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.