কীভাবে slf4j- সাধারণ কনফিগার করবেন


166

এপিআই 1.7 এবং বাস্তবায়ন হিসাবে slf4j- সহজ। আমি এই সংমিশ্রনের সাথে লগিং স্তরটি কীভাবে কনফিগার করতে পারি তা খুঁজে পাচ্ছি না।

কেউ সাহায্য করতে পারেন?


উত্তর:


218

এটি হয় সিস্টেম সম্পত্তি দ্বারা

-Dorg.slf4j.simpleLogger.defaultLogLevel=debug

বা simplelogger.propertiesক্লাসপথে ফাইল

দেখতে http://www.slf4j.org/api/org/slf4j/impl/SimpleLogger.html বিস্তারিত জানার জন্য


ধন্যবাদ আমি "org.slf4j.simpleLogger.defaultLogLevel" কে System.properties- এ "ত্রুটি" হিসাবে সেট করেছি, তবে slf4j এখনও INFO স্তরের বার্তা লগইন করে। কোন ধারণা? বিটিডাব্লু, আমি কোথায় সরললগার.প্রপত্তি স্থাপন করব?
জেলিন লুও

2
org.slf4j.simpleLogger.defaultLogLevel এর পরিবর্তে org.slf4j.simplelogger.defaultlog ব্যবহার করে দেখুন। ফাইলটি অবশ্যই ক্লাসপথে, ডিফল্ট প্যাকেজে থাকতে হবে
এভেজেনি ডোরোফিভ

2
প্রকৃতপক্ষে এটি ( defaultLogLevel) কাজ করে ust কেবলমাত্র পাওয়া গেছে যে আমি প্রোগ্রামটি একটি ভুল ফোল্ডারে পরিবর্তন করছি ;-) এবং defaultlogকাজ করে না। সুতরাং আপনি সম্ভবত আপনার উত্তরটি সম্পাদনা করতে
চাইলেও

11
কেবল একটি নোট: আপনি যে সরললগার ব্যবহার করছেন তার সংস্করণ অনুসারে উভয় উত্তরই ভাল। উদাহরণস্বরূপ, ডিফল্টলগলভেল 1.7.5 এর জন্য কাজ করে, কিন্তু ডিফল্টলগ 1.6.6 এর জন্য কাজ করে। আমার প্রকল্পের লগিংটি কনফিগার করার সময় এবং এই পোস্টে আসার পরে আমি এটি খুঁজে পেয়েছি
কেন শিহ

112

এই নমুনা simplelogger.propertiesযা আপনি ক্লাসপাথ (uncomment বৈশিষ্ট্য আপনি ব্যবহার করতে ইচ্ছুক) স্থাপন করতে পারেন:

# SLF4J's SimpleLogger configuration file
# Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err.

# Default logging detail level for all instances of SimpleLogger.
# Must be one of ("trace", "debug", "info", "warn", or "error").
# If not specified, defaults to "info".
#org.slf4j.simpleLogger.defaultLogLevel=info

# Logging detail level for a SimpleLogger instance named "xxxxx".
# Must be one of ("trace", "debug", "info", "warn", or "error").
# If not specified, the default logging detail level is used.
#org.slf4j.simpleLogger.log.xxxxx=

# Set to true if you want the current date and time to be included in output messages.
# Default is false, and will output the number of milliseconds elapsed since startup.
#org.slf4j.simpleLogger.showDateTime=false

# The date and time format to be used in the output messages.
# The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat.
# If the format is not specified or is invalid, the default format is used.
# The default format is yyyy-MM-dd HH:mm:ss:SSS Z.
#org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z

# Set to true if you want to output the current thread name.
# Defaults to true.
#org.slf4j.simpleLogger.showThreadName=true

# Set to true if you want the Logger instance name to be included in output messages.
# Defaults to true.
#org.slf4j.simpleLogger.showLogName=true

# Set to true if you want the last component of the name to be included in output messages.
# Defaults to false.
#org.slf4j.simpleLogger.showShortLogName=false

1
@ রবার্টহান্ট এই লগটি ফাইলে কীভাবে সংরক্ষণ করবেন?
দেবব্রত

6
@ দেবব্রত সম্পত্তি যুক্ত করুন org.slf4j.simpleLogger.logFile- আউটপুট লক্ষ্য যা কোনও ফাইলের পথ হতে পারে, বা বিশেষ মানগুলি "সিস্টেম.আউট" এবং "সিস্টেম.আরআর" হতে পারে। ডিফল্ট হ'ল "System.err"। Slf4j.org/api/org/slf4j/impl/SimpleLogger.html
রবার্ট হান্ট

একাধিক মান পাওয়া কি সম্ভব? হ্যাঁ কিভাবে? আমি কি org.slf4j.simpleLogger.logFile = test.log, System.err চাই?
LOLWTFasdasd আসাদাদ

1
@LOLWTFasdasdasdad দুর্ভাগ্যক্রমে নয়, এটি কেবলমাত্র System.out, System.err বা কোনও ফাইলের পথের একক লক্ষ্যকে সমর্থন করে। এটি সহজ হিসাবে ডিজাইন করা হয়েছে, আপনি আরও উন্নত বৈশিষ্ট্য চাইলে আপনার লগ 4 জ বা লগব্যাকের মতো পূর্ণ লগিং বাস্তবায়ন বিবেচনা করা উচিত।
রবার্ট হান্ট

74

আপনি সিস্টেমের বৈশিষ্ট্যটি সেট করে এটি ক্রমাগত পরিবর্তন করতে পারেন:

public class App {

    public static void main(String[] args) {

        System.setProperty(org.slf4j.impl.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "TRACE");

        final org.slf4j.Logger log = LoggerFactory.getLogger(App.class);

        log.trace("trace");
        log.debug("debug");
        log.info("info");
        log.warn("warning");
        log.error("error");

    }
}

লগ স্তরগুলি ERROR> সতর্কতা> তথ্য> ডিবগ> ট্র্যাক।

দয়া করে নোট করুন যে একবার লগার তৈরি হয়ে গেলে লগ স্তর পরিবর্তন করা যায় না। আপনি ব্যবহার করতে চাইতে পারেন আপনি পরিবর্তনশীল লগিং স্তর পরিবর্তন করার প্রয়োজন হলে log4j SLF4J সঙ্গে।


3
"দয়া করে নোট করুন একবার লগার তৈরি হয়ে গেলে লগ স্তর পরিবর্তন করা যায় না।" - এটি আসলে কোথায় নির্দিষ্ট করা হয়েছে?
ksl

2
ksl, org.slf4j.impl.SmpleLogger এ। প্রথম লগার তৈরি করা হলে, init () পদ্ধতিটি চালিত হয় এবং এটি সিস্টেমের বৈশিষ্ট্য থেকে ডিফল্ট লগিং স্তরটি আনে। এটি কোনও পর্যায়ে সতেজ হয় না। এছাড়াও, org.slf4j.impl.SimpleLoggerFactory শুধুমাত্র একবার ক্লাসের জন্য একটি লগার তৈরি করে, সুতরাং, একই লগার সর্বদা প্রদত্ত শ্রেণীর (বা নাম) জন্য ফিরে আসে। তবে বিভিন্ন স্তরের লগার থাকতে পারে। সুতরাং সম্ভাব্য কাজটি হতে পারে আপনি লগিংয়ের স্তরটি পরিবর্তন করতে চাইলে আপনি এই "বিভিন্ন" স্তরটিকে আপনার "লগ" ভেরিয়েবলের জন্য এই বিভিন্ন স্তরের লগারগুলি বরাদ্দ করেন। এটি খুব ঝরঝরে সমাধান নয় তবে কাজ করা উচিত।
eemelipa

@ এমুলি org.slf4j.impl.SimpleLoggerআপনি ডক এর চেয়ে প্রকৃত উত্স কোড বলতে চান?
কেএসএল

LOG_FILE_KEYলগার তৈরি হওয়ার পরে সম্পত্তিটি পরিবর্তন করা যায় না তাও সত্য ?
কেএসএল

1
হ্যাঁ, আমি আসল উত্স কোড বলতে চাইছি। আমি LOG_FILE_KEY সম্পর্কে নিশ্চিত নই।
এমিলিপা

4

আমি লক্ষ্য করেছি যে ইমুলি বলেছিল যে তারা তৈরি করার পরে আপনি লগ স্তর পরিবর্তন করতে পারবেন না - এবং এটি নকশা হতে পারে, এটি সম্পূর্ণ সত্য নয়।

আমি এমন পরিস্থিতিতে ছুঁড়েছি যেখানে আমি একটি লাইব্রেরি ব্যবহার করছি যা slf4j এ লগইন হয়েছিল - এবং আমি একটি লাইভ লাইব্রেরিটি মভেন মজো প্লাগইন লেখার সময় ব্যবহার করছিলাম।

মাভেন slf4j সিম্পলোগারের একটি (হ্যাক) সংস্করণ ব্যবহার করে এবং আমি আমার প্লাগইন কোডটি লগ 4j এর মতো কিছুতে পুনরায় তৈরি করতে পেরেছি, যা আমি নিয়ন্ত্রণ করতে পারি।

এবং আমি maven লগিং কনফিগার পরিবর্তন করতে পারবেন না।

সুতরাং, কিছু গোলমাল তথ্য বার্তাগুলি নিঃশব্দ করার জন্য, আমি খুঁজে পেয়েছি যে আমি রানটাইমের সময় সিম্পললগারের সাথে ফুট করার জন্য এই জাতীয় প্রতিচ্ছবি ব্যবহার করতে পারি।

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.spi.LocationAwareLogger;
    try
    {
        Logger l = LoggerFactory.getLogger("full.classname.of.noisy.logger");  //This is actually a MavenSimpleLogger, but due to various classloader issues, can't work with the directly.
        Field f = l.getClass().getSuperclass().getDeclaredField("currentLogLevel");
        f.setAccessible(true);
        f.set(l, LocationAwareLogger.WARN_INT);
    }
    catch (Exception e)
    {
        getLog().warn("Failed to reset the log level of " + loggerName + ", it will continue being noisy.", e);
    }

অবশ্যই মনে রাখবেন, এটি খুব স্থিতিশীল / নির্ভরযোগ্য সমাধান নয় ... কারণ পরের বার খাঁটি লোকেরা তাদের লগার পরিবর্তন করবে।

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