下面列出了怎么用org.slf4j.Marker的API类实例代码及写法,或者点击链接到github查看源代码。
@PostConstruct
public void init() {
log.debug("Registering JVM gauges");
metricRegistry.register(PROP_METRIC_REG_JVM_MEMORY, new MemoryUsageGaugeSet());
metricRegistry.register(PROP_METRIC_REG_JVM_GARBAGE, new GarbageCollectorMetricSet());
metricRegistry.register(PROP_METRIC_REG_JVM_THREADS, new ThreadStatesGaugeSet());
metricRegistry.register(PROP_METRIC_REG_JVM_FILES, new FileDescriptorRatioGauge());
metricRegistry.register(PROP_METRIC_REG_JVM_BUFFERS, new BufferPoolMetricSet(ManagementFactory.getPlatformMBeanServer()));
if (jHipsterProperties.getMetrics().getJmx().isEnabled()) {
log.debug("Initializing Metrics JMX reporting");
JmxReporter jmxReporter = JmxReporter.forRegistry(metricRegistry).build();
jmxReporter.start();
}
if (jHipsterProperties.getMetrics().getLogs().isEnabled()) {
log.info("Initializing Metrics Log reporting");
Marker metricsMarker = MarkerFactory.getMarker("metrics");
final Slf4jReporter reporter = Slf4jReporter.forRegistry(metricRegistry)
.outputTo(LoggerFactory.getLogger("metrics"))
.markWith(metricsMarker)
.convertRatesTo(TimeUnit.SECONDS)
.convertDurationsTo(TimeUnit.MILLISECONDS)
.build();
reporter.start(jHipsterProperties.getMetrics().getLogs().getReportFrequency(), TimeUnit.SECONDS);
}
}
@PostConstruct
public void init() {
log.debug("Registering JVM gauges");
metricRegistry.register(PROP_METRIC_REG_JVM_MEMORY, new MemoryUsageGaugeSet());
metricRegistry.register(PROP_METRIC_REG_JVM_GARBAGE, new GarbageCollectorMetricSet());
metricRegistry.register(PROP_METRIC_REG_JVM_THREADS, new ThreadStatesGaugeSet());
metricRegistry.register(PROP_METRIC_REG_JVM_FILES, new FileDescriptorRatioGauge());
metricRegistry.register(PROP_METRIC_REG_JVM_BUFFERS, new BufferPoolMetricSet(ManagementFactory.getPlatformMBeanServer()));
metricRegistry.register(PROP_METRIC_REG_JVM_ATTRIBUTE_SET, new JvmAttributeGaugeSet());
if (jHipsterProperties.getMetrics().getJmx().isEnabled()) {
log.debug("Initializing Metrics JMX reporting");
JmxReporter jmxReporter = JmxReporter.forRegistry(metricRegistry).build();
jmxReporter.start();
}
if (jHipsterProperties.getMetrics().getLogs().isEnabled()) {
log.info("Initializing Metrics Log reporting");
Marker metricsMarker = MarkerFactory.getMarker("metrics");
final Slf4jReporter reporter = Slf4jReporter.forRegistry(metricRegistry)
.outputTo(LoggerFactory.getLogger("metrics"))
.markWith(metricsMarker)
.convertRatesTo(TimeUnit.SECONDS)
.convertDurationsTo(TimeUnit.MILLISECONDS)
.build();
reporter.start(jHipsterProperties.getMetrics().getLogs().getReportFrequency(), TimeUnit.SECONDS);
}
}
/**
* Logs the exception; on ERROR level when status is 5xx, otherwise on INFO level without stack
* trace, or DEBUG level with stack trace. The logger name is
* {@code cz.jirutka.spring.exhandler.handlers.RestExceptionHandler}.
*
* @param ex The exception to log.
* @param req The current web request.
*/
protected void logException(E ex, HttpServletRequest req) {
if (LOG.isErrorEnabled() && getStatus().value() >= 500 || LOG.isInfoEnabled()) {
Marker marker = MarkerFactory.getMarker(ex.getClass().getName());
String uri = req.getRequestURI();
if (req.getQueryString() != null) {
uri += '?' + req.getQueryString();
}
String msg = String.format("%s %s ~> %s", req.getMethod(), uri, getStatus());
if (getStatus().value() >= 500) {
LOG.error(marker, msg, ex);
} else if (LOG.isDebugEnabled()) {
LOG.debug(marker, msg, ex);
} else {
LOG.info(marker, msg);
}
}
}
@Override
public void debug(Marker marker, String format, Object arg1, Object arg2) {
if (isDebugEnabled(marker) && canDo()) {
if (locationAwareLogger != null) {
locationAwareLogger.log(marker, FQCN, DEBUG_INT, msg(format),
args(new Object[]{arg1, arg2}), null);
} else {
logger.debug(marker, msg(format), args(new Object[]{arg1, arg2}));
}
}
}
@Override
public FilterReply decide(Marker marker, Logger logger, Level level, String format, Object[] params, Throwable t) {
if (loggerName == null) {
return FilterReply.NEUTRAL;
} else if (loggerName.equals(logger.getName())) {
return FilterReply.DENY;
} else
return FilterReply.NEUTRAL;
}
@PostConstruct
public void init() {
log.debug("Registering JVM gauges");
metricRegistry.register(PROP_METRIC_REG_JVM_MEMORY, new MemoryUsageGaugeSet());
metricRegistry.register(PROP_METRIC_REG_JVM_GARBAGE, new GarbageCollectorMetricSet());
metricRegistry.register(PROP_METRIC_REG_JVM_THREADS, new ThreadStatesGaugeSet());
metricRegistry.register(PROP_METRIC_REG_JVM_FILES, new FileDescriptorRatioGauge());
metricRegistry.register(PROP_METRIC_REG_JVM_BUFFERS, new BufferPoolMetricSet(ManagementFactory.getPlatformMBeanServer()));
metricRegistry.register(PROP_METRIC_REG_JVM_ATTRIBUTE_SET, new JvmAttributeGaugeSet());
if (hikariDataSource != null) {
log.debug("Monitoring the datasource");
// remove the factory created by HikariDataSourceMetricsPostProcessor until JHipster migrate to Micrometer
hikariDataSource.setMetricsTrackerFactory(null);
hikariDataSource.setMetricRegistry(metricRegistry);
}
if (jHipsterProperties.getMetrics().getJmx().isEnabled()) {
log.debug("Initializing Metrics JMX reporting");
JmxReporter jmxReporter = JmxReporter.forRegistry(metricRegistry).build();
jmxReporter.start();
}
if (jHipsterProperties.getMetrics().getLogs().isEnabled()) {
log.info("Initializing Metrics Log reporting");
Marker metricsMarker = MarkerFactory.getMarker("metrics");
final Slf4jReporter reporter = Slf4jReporter.forRegistry(metricRegistry)
.outputTo(LoggerFactory.getLogger("metrics"))
.markWith(metricsMarker)
.convertRatesTo(TimeUnit.SECONDS)
.convertDurationsTo(TimeUnit.MILLISECONDS)
.build();
reporter.start(jHipsterProperties.getMetrics().getLogs().getReportFrequency(), TimeUnit.SECONDS);
}
}
@Override
public void doLog(Marker marker, Level level, String format, Object[] arguments, Throwable t) {
if (!LambdaLoggerUtils.isLogLevelEnabled(underlyingLogger, level, marker)) {
return;
}
if (arguments == null) {
logFormatted(marker, level, format, t);
} else {
FormattingTuple formattingTuple = MessageFormatter.arrayFormat(format, arguments, t);
logFormatted(marker, level, formattingTuple.getMessage(), formattingTuple.getThrowable());
}
}
@Override
public void info(final Marker marker, final String format, final Object... arguments) {
if (isInfoEnabled(marker)) {
putCorrelationIdToMdc();
actualSlf4jLogger.info(marker, format, arguments);
}
}
@Override
public void errorIfEnabled(Marker marker, String msg) {
if (logger.isErrorEnabled()) {
logger.error(marker, msg);
}
}
@Test
public void testLocationAwareLogger() {
LocationAwareLogger locationAwareLogger = mock(LocationAwareLogger.class);
Slf4jLogger logger = new Slf4jLogger(locationAwareLogger);
logger.error("error");
;
logger.warn("warn");
logger.info("info");
logger.debug("debug");
logger.trace("info");
verify(locationAwareLogger, times(5)).log(isNull(Marker.class), anyString(),
anyInt(), anyString(), isNull(Object[].class), isNull(Throwable.class));
logger.error(new Exception("error"));
logger.warn(new Exception("warn"));
logger.info(new Exception("info"));
logger.debug(new Exception("debug"));
logger.trace(new Exception("trace"));
logger.error("error", new Exception("error"));
logger.warn("warn", new Exception("warn"));
logger.info("info", new Exception("info"));
logger.debug("debug", new Exception("debug"));
logger.trace("trace", new Exception("trace"));
verify(locationAwareLogger, times(10)).log(isNull(Marker.class), anyString(),
anyInt(), anyString(), isNull(Object[].class), any(Throwable.class));
}
@Override
@SafeVarargs
public final void trace(Marker marker, String format, Supplier<Object>... arguments) {
if (logger.isTraceEnabled(marker)) {
logger.trace(marker, format, Arrays.stream(arguments).map(Supplier::get).toArray());
}
}
private void getMarkersRecursively(Marker marker, ArrayComposer<JSONComposer<String>> ac) throws IOException {
if (marker != null) {
ac.add(marker.getName());
Iterator<Marker> it = marker.iterator();
while (it.hasNext()) {
getMarkersRecursively(it.next(), ac);
}
}
}
@Override
public void error(Marker marker, String string, Object[] os) {
if(isErrorEnabled(marker)) {
log(string);
log(os);
}
}
@Override
public void infoIfEnabled(Marker marker, String msg, Throwable t) {
if (logger.isInfoEnabled()) {
logger.info(marker, msg, t);
}
}
private Slf4jReporter(MetricRegistry registry,
LoggerProxy loggerProxy,
Marker marker,
String prefix,
TimeUnit rateUnit,
TimeUnit durationUnit,
MetricFilter filter) {
super(registry, "logger-reporter", filter, rateUnit, durationUnit);
this.loggerProxy = loggerProxy;
this.marker = marker;
this.prefix = MetricName.build(prefix);
}
public void error(Marker marker, String s, Object[] objects) {
logger.error(marker, s, objects);
}
@Override
public void error(Marker marker, String format, Object arg1, Object arg2) {
if (orig.isErrorEnabled()) {
orig.error(format, arg1, arg2);
}
}
@Override
public void error(Marker marker, String msg, Throwable throwable) {
logger.error(marker, msg, throwable);
}
@Override
public boolean isDebugEnabled(Marker marker) {
return logger.isDebugEnabled(marker);
}
default void debug(Marker marker, String msg, Throwable t) {
doLog(marker, Level.DEBUG, msg, null, t);
}
@Override
public void info(Marker marker, String format, Object arg) {
log.info(marker, format, arg);
}
@Override
public void error(Marker marker, String string, Object o) {
logger.error(marker, string, o);
}
public void debug(Marker marker, String s, Object o) {
logger.debug(marker, s, o);
}
@Override
public void debug(Marker marker, String format, Object arg1, Object arg2) {
logger.debug(marker, format, arg1, arg2);
}
public void info(Marker marker, String s, Throwable throwable) {
logger.info(marker, s, throwable);
}
@Override
public boolean isErrorEnabled(Marker marker) {
return log.isErrorEnabled(marker);
}
@Override
public void info(Marker marker, String s, Object o) {
logger.info(marker, addPrefix(s), o);
}
@Override
public void error(Marker marker, String format, Object arg) {
getLoggerDelegator().error(marker, format, arg);
}
@Override
public boolean isWarnEnabled(Marker marker) {
return logger.isWarnEnabled(marker);
}
/**
* {@link #trace(org.slf4j.Marker, java.lang.String, java.lang.Object)} with a lambda argument supplier.
*/
default void trace(Marker marker, String format, Supplier<?> argSupplier1) {
doLog(marker, Level.TRACE, format, new Supplier<?>[]{argSupplier1}, null);
}