Câu trả lời:
Đó là thông qua tài sản hệ thống
-Dorg.slf4j.simpleLogger.defaultLogLevel=debug
hoặc simplelogger.properties
tập tin trên đường dẫn lớp
xem http://www.slf4j.org/api/org/slf4j/impl/SimpleLogger.html để biết chi tiết
defaultLogLevel
) hoạt động. Chỉ cần tìm thấy tôi đã sửa đổi chương trình trong một thư mục sai ;-) Và defaultlog
không hoạt động. Vì vậy, bạn có thể muốn chỉnh sửa câu trả lời của mình mặc dù tôi đã chấp nhận nó
Đây là một mẫu simplelogger.properties
mà bạn có thể đặt trên đường dẫn lớp (bỏ ghi chú các thuộc tính bạn muốn sử dụng):
# 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
org.slf4j.simpleLogger.logFile
- Mục tiêu đầu ra có thể là đường dẫn đến tệp hoặc các giá trị đặc biệt "System.out" và "System.err". Mặc định là "System.err". Xem slf4j.org/api/org/slf4j/impl/SimpleLogger.html
Bạn có thể lập trình thay đổi nó bằng cách đặt thuộc tính hệ thống:
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");
}
}
Các mức nhật ký là LRI> WARN> INFO> DEBUG> TRACE.
Xin lưu ý rằng một khi trình ghi nhật ký được tạo, mức độ nhật ký không thể thay đổi. Nếu bạn cần thay đổi động mức ghi nhật ký, bạn có thể muốn sử dụng log4j với SLF4J.
org.slf4j.impl.SimpleLogger
bạn là mã nguồn thực tế chứ không phải doc?
LOG_FILE_KEY
tài sản không thể thay đổi sau khi logger được tạo không?
Tôi nhận thấy rằng Eemuli nói rằng bạn không thể thay đổi cấp độ nhật ký sau khi chúng được tạo - và mặc dù đó có thể là thiết kế, nhưng điều đó không hoàn toàn đúng.
Tôi gặp phải một tình huống khi tôi đang sử dụng một thư viện đã đăng nhập vào slf4j - và tôi đang sử dụng thư viện trong khi viết một plugin mjo mojo.
Maven sử dụng phiên bản (đã hack) của slf4j SimpleLogger và tôi không thể lấy mã plugin của mình để định tuyến lại việc ghi nhật ký của nó đến một cái gì đó như log4j, mà tôi có thể kiểm soát.
Và tôi không thể thay đổi cấu hình đăng nhập maven.
Vì vậy, để làm dịu một số thông tin thông tin ồn ào, tôi thấy rằng tôi có thể sử dụng sự phản chiếu như thế này, để futz với SimpleLogger khi chạy.
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);
}
Tất nhiên, lưu ý, đây không phải là một giải pháp rất ổn định / đáng tin cậy ... vì nó sẽ phá vỡ vào lần tới khi những người maven thay đổi logger của họ.