188

api 1.7 および slf4j-simple 実装として。この組み合わせでログレベルを構成する方法が見つかりません。

誰でも助けてもらえますか?

4

4 に答える 4

263

これは、システムプロパティを介して行われます

-Dorg.slf4j.simpleLogger.defaultLogLevel=debug

またはsimplelogger.propertiesクラスパス上のファイル

詳細については、 http://www.slf4j.org/api/org/slf4j/impl/SimpleLogger.htmlを参照してください。

于 2013-01-27T06:51:03.327 に答える
137

これは、クラスパスに配置できるサンプルsimplelogger.propertiesです (使用するプロパティのコメントを外します)。

# 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

Maven または Gradle プロジェクトでは、「クラスパス上の」便利な場所はsrc/main/resources/simplelogger.properties.

于 2014-04-30T14:51:22.380 に答える
87

システムプロパティを設定することにより、プログラムで変更できます。

public class App {
  public static void main(String[] args) {
    // for the code below to work, it must be executed before the
    ​// logger is created. see note below
    System.setProperty(org.slf4j.impl.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "TRACE");
       
    ​org.slf4j.Logger log = LoggerFactory.getLogger(App.class);
       ​
    ​log.trace("trace");
    ​log.debug("debug");
    ​log.info("info");
    ​log.warn("warning");
    ​log.error("error");
  ​}
​}

ログ レベルはERROR> WARN> INFO> DEBUG>TRACEです。

ロガーが作成されると、ログ レベルは変更できないことに注意してください。ログ レベルを動的に変更する必要がある場合は、SLF4J でlog4jを使用することをお勧めします。

于 2013-06-02T22:25:08.013 に答える
4

Eemuli は、作成後にログ レベルを変更することはできないと言っていました。

slf4j にログインするライブラリを使用している状況に遭遇しました。また、maven mojo プラグインの作成中にライブラリを使用していました。

Maven は (ハッキングされた) バージョンの slf4j SimpleLogger を使用しており、プラグイン コードを取得して、ログを制御できる log4j などに再ルーティングすることができませんでした。

また、maven のログ設定を変更できません。

そこで、うるさい情報メッセージを静めるために、このようなリフレクションを使用して、実行時に SimpleLogger を操作できることがわかりました。

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

もちろん、これは非常に安定した/信頼できる解決策ではないことに注意してください...次回Mavenの人々がロガーを変更したときに壊れます。

于 2018-06-06T15:09:46.980 に答える