
org.tinylog.jsl.TinylogLogger Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jsl-tinylog Show documentation
Show all versions of jsl-tinylog Show documentation
Java System.Logger binding that uses tinylog
The newest version!
/*
* Copyright 2021 Gerrit Rode
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package org.tinylog.jsl;
import java.util.Objects;
import java.util.ResourceBundle;
import java.util.function.Supplier;
import org.tinylog.configuration.Configuration;
import org.tinylog.format.JavaTextMessageFormatFormatter;
import org.tinylog.format.MessageFormatter;
import org.tinylog.provider.LoggingProvider;
import org.tinylog.provider.ProviderRegistry;
/**
* Java System.Logger compatible logger that uses tinylog's {@link LoggingProvider}.
*/
public class TinylogLogger implements System.Logger {
private static final int STACKTRACE_DEPTH = 2;
private static final int ENABLED_STACKTRACE_DEPTH = 3;
private static final MessageFormatter MESSAGE_FORMATTER = new JavaTextMessageFormatFormatter(Configuration.getLocale());
private static final LoggingProvider LOGGING_PROVIDER = ProviderRegistry.getLoggingProvider();
private final String name;
/**
* @param name the name of the logger
*/
public TinylogLogger(final String name) {
this.name = Objects.requireNonNull(name);
}
@Override
public String getName() {
return name;
}
@Override
public boolean isLoggable(final Level level) {
Objects.requireNonNull(level);
// Setting the log level of a message to OFF makes little sense and should result in the message not being logged.
if (level == Level.OFF) {
return false;
} else {
return LOGGING_PROVIDER.isEnabled(STACKTRACE_DEPTH, null, translate(level));
}
}
@Override
public void log(final Level level, final String msg) {
Objects.requireNonNull(level);
if (enabled(level)) {
LOGGING_PROVIDER.log(STACKTRACE_DEPTH, null, translate(level), null, null, msg, (Object[]) null);
}
}
@Override
public void log(final Level level, final Supplier msgSupplier) {
Objects.requireNonNull(level);
Objects.requireNonNull(msgSupplier);
if (enabled(level)) {
LOGGING_PROVIDER.log(
STACKTRACE_DEPTH, null, translate(level), null, null, msgSupplier, (Object[]) null
);
}
}
@Override
public void log(final Level level, final Object obj) {
Objects.requireNonNull(level);
Objects.requireNonNull(obj);
if (enabled(level)) {
LOGGING_PROVIDER.log(STACKTRACE_DEPTH, null, translate(level), null, null, obj, (Object[]) null);
}
}
@Override
public void log(final Level level, final String msg, final Throwable thrown) {
Objects.requireNonNull(level);
if (enabled(level)) {
LOGGING_PROVIDER.log(STACKTRACE_DEPTH, null, translate(level), thrown, null, msg, (Object[]) null);
}
}
@Override
public void log(final Level level, final Supplier msgSupplier, final Throwable thrown) {
Objects.requireNonNull(level);
Objects.requireNonNull(msgSupplier);
if (enabled(level)) {
LOGGING_PROVIDER.log(STACKTRACE_DEPTH, null, translate(level), thrown, null, msgSupplier, (Object[]) null);
}
}
@Override
public void log(final Level level, final String format, final Object... params) {
Objects.requireNonNull(level);
if (enabled(level)) {
LOGGING_PROVIDER.log(STACKTRACE_DEPTH, null, translate(level), null, MESSAGE_FORMATTER, format, params);
}
}
@Override
public void log(final Level level, final ResourceBundle bundle, final String msg, final Throwable thrown) {
Objects.requireNonNull(level);
if (enabled(level)) {
if (bundle != null && msg != null) {
LOGGING_PROVIDER.log(
STACKTRACE_DEPTH, null, translate(level), thrown, null, bundle.getString(msg), (Object[]) null);
} else {
LOGGING_PROVIDER.log(
STACKTRACE_DEPTH, null, translate(level), thrown, null, msg, (Object[]) null);
}
}
}
@Override
public void log(final Level level, final ResourceBundle bundle, final String format, final Object... params) {
Objects.requireNonNull(level);
if (enabled(level)) {
if (bundle != null && format != null) {
LOGGING_PROVIDER.log(
STACKTRACE_DEPTH, null, translate(level), null, MESSAGE_FORMATTER, bundle.getString(format), params);
} else {
LOGGING_PROVIDER.log(
STACKTRACE_DEPTH, null, translate(level), null, MESSAGE_FORMATTER, format, params);
}
}
}
/**
* Checks if a message of the given level would be logged by this logger
This method differs from {@link #isLoggable(Level)} in
* that a different {@link #ENABLED_STACKTRACE_DEPTH stacktrace depth} is required.
*
* @param level Severity level from Java System.Logger
* @return {@code true} if the given log message level is currently being logged
*/
private boolean enabled(final Level level) {
return level != Level.OFF && LOGGING_PROVIDER.isEnabled(ENABLED_STACKTRACE_DEPTH, null, translate(level));
}
/**
* Translate Java System.Logger severity levels.
*
* @param level Severity level from Java System.Logger
* @return Responding severity level of tinylog
* @throws IllegalArgumentException Unknown Java System.Logger Logging severity level
*/
private static org.tinylog.Level translate(final System.Logger.Level level) {
switch (level) {
case ALL:
case TRACE:
return org.tinylog.Level.TRACE;
case DEBUG:
return org.tinylog.Level.DEBUG;
case INFO:
return org.tinylog.Level.INFO;
case WARNING:
return org.tinylog.Level.WARN;
case ERROR:
return org.tinylog.Level.ERROR;
case OFF:
return org.tinylog.Level.OFF;
default:
throw new IllegalArgumentException("Unknown Java System.Logger severity level \"" + level + "\"");
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy