Skip to content

Repository files navigation

MiniLog

MiniLog is a simple logging library for Java 17+. It is designed to be simple to use and easy to integrate into your project.

Usage

Step 1. Import the library into your project

Maven

<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/dev-vince/minilog</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>dev.vince</groupId>
<artifactId>minilog</artifactId>
<version>1.0-0</version>
</dependency>
</dependencies>

or by downloading the jar from the packages page.

Step 2. Create a new logger

Here are some samples of code to help you get started creating new loggers.

Create a new logger with a custom name

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.build();

Create a new logger with a custom name and custom log level

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.build();

Create a new logger with a custom name, custom log level and custom log format

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build()) .build();

You can also add multiple custom output streams to the logger

System.out is added by default, however you can add your own output streams (for example a file)

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build())
.withOutput(newPrintStream("output.txt")) //Will now add all logs to output.txt
.build();

Step 3. Log messages

MiniLog supports the following log levels: TRACE,DEBUG, INFO, WARN, ERROR, FATAL. To log a message, simply call the appropriate method in the logger.

// Logs a messageto the output streamslogger.trace("This is a trace message");
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warning message");
logger.error("This is an error message");
logger.fatal("This is a fatal message");
// You can also use the log method to log multiple messages per call (this is useful for logging exceptions, or multi line messages)logger.trace("This is a trace message", "This is another trace message");
logger.debug("This is a debug message", "This is another debug message");
logger.info("This is an info message", "This is another info message");
logger.warn("This is a warning message", "This is another warning message");
logger.error("This is an error message", "This is another error message");
logger.fatal("This is a fatal message", "This is another fatal message");

Output

[Logging Example] LOG: This is a trace message
[Logging Example] DEBUG: This is a debug message
[Logging Example] INFO: This is an info message
[Logging Example] WARN: This is a warning message
[Logging Example] ERROR: This is an error message
[Logging Example] FATAL: This is a fatal message
[Logging Example] LOG: This is a trace message
[Logging Example] LOG: This is another trace message
[Logging Example] DEBUG: This is a debug message
[Logging Example] DEBUG: This is another debug message
[Logging Example] INFO: This is an info message
[Logging Example] INFO: This is another info message
[Logging Example] WARN: This is a warning message
[Logging Example] WARN: This is another warning message
[Logging Example] ERROR: This is an error message
[Logging Example] ERROR: This is another error message
[Logging Example] FATAL: This is a fatal message
[Logging Example] FATAL: This is another fatal message

Features

Here are a collection of some of the notable features of MiniLog.

Logging Headers

You can add a header to the start of each log message. This is useful for adding a timestamp or other information to the start of each log message.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withHeader(LoggingHeaderEnum.BRACKETED) //Adds a bracketed header to the start of each log message
.build();

Output

[Logging Example] LOG: This is a trace message

For the time being, MiniLog has a preset list of headers. However, you can create your own custom headers by implementing the LoggingHeader interface in the near future

Logging Levels

You can change the log level of the logger. This is useful for only logging certain messages to the output streams.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN) //Only logs messages with a log level of WARN or higher
.build();

Output

[Logging Example] WARN: This is a warning message
[Logging Example] ERROR: This is an error message
[Logging Example] FATAL: This is a fatal message

Only messages with a log level of WARN or higher will be logged to the output streams.

Logging Formats

You can change the format of the log messages. This is useful for changing the format of the log level or adding custom text to the start of the message.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build())
.build();

Output

[Logging Example] WARNING: This is a warning message

Hooking into the logger

MiniLog suppors a system of hooks. Hooks are used to add custom functionality to the logger. For example, you can add a hook to log to a file, or to send a message to a server.

Hooks are called with a Logger andLoggerEventEnum. The Logger is the logger that the hook is attached to, and the LoggerEventEnum is the event that the hook is being called for. LoggerEventEnum has PRE and POST as the possible values. PRE is called before the message is logged, and POST is called after the message is logged.

To create a hook, simply extend either AbstractHook or AbstractLoggerHook if you want to only have the hook called with a specific logger

The @Hook annotation is used to register the hook. Hooks are registered when the logger is built.

Example Hook

packagedev.vince;
importdev.vince.log.event.LoggerEventEnum;
importdev.vince.log.hook.Hook;
importdev.vince.log.hook.api.AbstractHook;
importdev.vince.log.logger.Logger;
@HookpublicclassHookExampleextendsAbstractHook {
publicHookExample() {
super("Example hook");
}
@Overridepublicvoidhook(finalLoggerlogger, finalLoggerEventEnumtype) {
if (type == LoggerEventEnum.PRE) {
System.out.println("This is a pre hook, it will be executed before the logger logs the message");
}
if (type == LoggerEventEnum.POST) {
System.out.println("This is a post hook, it will be executed after the logger logs the message");
}
}
}

Example Logger Hook

packagedev.vince;
importdev.vince.log.LoggerManager;
importdev.vince.log.event.LoggerEventEnum;
importdev.vince.log.hook.Hook;
importdev.vince.log.hook.api.AbstractLoggerHook;
importdev.vince.log.logger.Logger;
@HookpublicclassLoggerHookExampleextendsAbstractLoggerHook {
publicLoggerHookExample() {
super("Example hook for a specific logger");
}
@Overridepublicvoidhook(finalLoggerlogger, finalLoggerEventEnumtype) {
super.setLogger(LoggerManager.getLogger("Logger Example")); //This is the logger that will be hookedif(logger.equals(super.getLogger())){
if(type == LoggerEventEnum.PRE){
System.out.println("This is a pre hook, it will be executed before the logger logs the message");
}
if(type == LoggerEventEnum.POST){
System.out.println("This is a post hook, it will be executed after the logger logs the message");
}
}
}
}

These hooks are automatically registered when the logger is built. You can also register hooks manually by calling HookManager.addHook(AbstractHook hook)

Contributing

All contributions are welcome. If you have any suggestions or find any bugs, please create an issue or pull request.

License

MiniLog is licensed under the GPL-3.0 License. See the LICENSE file for more information.

About

A lightweight logging library for Java

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - dev-vince/minilog: A lightweight logging library for Java · GitHub
Skip to content

Repository files navigation

MiniLog

MiniLog is a simple logging library for Java 17+. It is designed to be simple to use and easy to integrate into your project.

Usage

Step 1. Import the library into your project

Maven

<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/dev-vince/minilog</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>dev.vince</groupId>
<artifactId>minilog</artifactId>
<version>1.0-0</version>
</dependency>
</dependencies>

or by downloading the jar from the packages page.

Step 2. Create a new logger

Here are some samples of code to help you get started creating new loggers.

Create a new logger with a custom name

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.build();

Create a new logger with a custom name and custom log level

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.build();

Create a new logger with a custom name, custom log level and custom log format

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build()) .build();

You can also add multiple custom output streams to the logger

System.out is added by default, however you can add your own output streams (for example a file)

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build())
.withOutput(newPrintStream("output.txt")) //Will now add all logs to output.txt
.build();

Step 3. Log messages

MiniLog supports the following log levels: TRACE,DEBUG, INFO, WARN, ERROR, FATAL. To log a message, simply call the appropriate method in the logger.

// Logs a messageto the output streamslogger.trace("This is a trace message");
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warning message");
logger.error("This is an error message");
logger.fatal("This is a fatal message");
// You can also use the log method to log multiple messages per call (this is useful for logging exceptions, or multi line messages)logger.trace("This is a trace message", "This is another trace message");
logger.debug("This is a debug message", "This is another debug message");
logger.info("This is an info message", "This is another info message");
logger.warn("This is a warning message", "This is another warning message");
logger.error("This is an error message", "This is another error message");
logger.fatal("This is a fatal message", "This is another fatal message");

Output

[Logging Example] LOG: This is a trace message
[Logging Example] DEBUG: This is a debug message
[Logging Example] INFO: This is an info message
[Logging Example] WARN: This is a warning message
[Logging Example] ERROR: This is an error message
[Logging Example] FATAL: This is a fatal message
[Logging Example] LOG: This is a trace message
[Logging Example] LOG: This is another trace message
[Logging Example] DEBUG: This is a debug message
[Logging Example] DEBUG: This is another debug message
[Logging Example] INFO: This is an info message
[Logging Example] INFO: This is another info message
[Logging Example] WARN: This is a warning message
[Logging Example] WARN: This is another warning message
[Logging Example] ERROR: This is an error message
[Logging Example] ERROR: This is another error message
[Logging Example] FATAL: This is a fatal message
[Logging Example] FATAL: This is another fatal message

Features

Here are a collection of some of the notable features of MiniLog.

Logging Headers

You can add a header to the start of each log message. This is useful for adding a timestamp or other information to the start of each log message.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withHeader(LoggingHeaderEnum.BRACKETED) //Adds a bracketed header to the start of each log message
.build();

Output

[Logging Example] LOG: This is a trace message

For the time being, MiniLog has a preset list of headers. However, you can create your own custom headers by implementing the LoggingHeader interface in the near future

Logging Levels

You can change the log level of the logger. This is useful for only logging certain messages to the output streams.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN) //Only logs messages with a log level of WARN or higher
.build();

Output

[Logging Example] WARN: This is a warning message
[Logging Example] ERROR: This is an error message
[Logging Example] FATAL: This is a fatal message

Only messages with a log level of WARN or higher will be logged to the output streams.

Logging Formats

You can change the format of the log messages. This is useful for changing the format of the log level or adding custom text to the start of the message.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build())
.build();

Output

[Logging Example] WARNING: This is a warning message

Hooking into the logger

MiniLog suppors a system of hooks. Hooks are used to add custom functionality to the logger. For example, you can add a hook to log to a file, or to send a message to a server.

Hooks are called with a Logger andLoggerEventEnum. The Logger is the logger that the hook is attached to, and the LoggerEventEnum is the event that the hook is being called for. LoggerEventEnum has PRE and POST as the possible values. PRE is called before the message is logged, and POST is called after the message is logged.

To create a hook, simply extend either AbstractHook or AbstractLoggerHook if you want to only have the hook called with a specific logger

The @Hook annotation is used to register the hook. Hooks are registered when the logger is built.

Example Hook

packagedev.vince;
importdev.vince.log.event.LoggerEventEnum;
importdev.vince.log.hook.Hook;
importdev.vince.log.hook.api.AbstractHook;
importdev.vince.log.logger.Logger;
@HookpublicclassHookExampleextendsAbstractHook {
publicHookExample() {
super("Example hook");
}
@Overridepublicvoidhook(finalLoggerlogger, finalLoggerEventEnumtype) {
if (type == LoggerEventEnum.PRE) {
System.out.println("This is a pre hook, it will be executed before the logger logs the message");
}
if (type == LoggerEventEnum.POST) {
System.out.println("This is a post hook, it will be executed after the logger logs the message");
}
}
}

Example Logger Hook

packagedev.vince;
importdev.vince.log.LoggerManager;
importdev.vince.log.event.LoggerEventEnum;
importdev.vince.log.hook.Hook;
importdev.vince.log.hook.api.AbstractLoggerHook;
importdev.vince.log.logger.Logger;
@HookpublicclassLoggerHookExampleextendsAbstractLoggerHook {
publicLoggerHookExample() {
super("Example hook for a specific logger");
}
@Overridepublicvoidhook(finalLoggerlogger, finalLoggerEventEnumtype) {
super.setLogger(LoggerManager.getLogger("Logger Example")); //This is the logger that will be hookedif(logger.equals(super.getLogger())){
if(type == LoggerEventEnum.PRE){
System.out.println("This is a pre hook, it will be executed before the logger logs the message");
}
if(type == LoggerEventEnum.POST){
System.out.println("This is a post hook, it will be executed after the logger logs the message");
}
}
}
}

These hooks are automatically registered when the logger is built. You can also register hooks manually by calling HookManager.addHook(AbstractHook hook)

Contributing

All contributions are welcome. If you have any suggestions or find any bugs, please create an issue or pull request.

License

MiniLog is licensed under the GPL-3.0 License. See the LICENSE file for more information.

About

A lightweight logging library for Java

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - dev-vince/minilog: A lightweight logging library for Java · GitHub
Skip to content

Repository files navigation

MiniLog

MiniLog is a simple logging library for Java 17+. It is designed to be simple to use and easy to integrate into your project.

Usage

Step 1. Import the library into your project

Maven

<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/dev-vince/minilog</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>dev.vince</groupId>
<artifactId>minilog</artifactId>
<version>1.0-0</version>
</dependency>
</dependencies>

or by downloading the jar from the packages page.

Step 2. Create a new logger

Here are some samples of code to help you get started creating new loggers.

Create a new logger with a custom name

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.build();

Create a new logger with a custom name and custom log level

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.build();

Create a new logger with a custom name, custom log level and custom log format

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build()) .build();

You can also add multiple custom output streams to the logger

System.out is added by default, however you can add your own output streams (for example a file)

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build())
.withOutput(newPrintStream("output.txt")) //Will now add all logs to output.txt
.build();

Step 3. Log messages

MiniLog supports the following log levels: TRACE,DEBUG, INFO, WARN, ERROR, FATAL. To log a message, simply call the appropriate method in the logger.

// Logs a messageto the output streamslogger.trace("This is a trace message");
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warning message");
logger.error("This is an error message");
logger.fatal("This is a fatal message");
// You can also use the log method to log multiple messages per call (this is useful for logging exceptions, or multi line messages)logger.trace("This is a trace message", "This is another trace message");
logger.debug("This is a debug message", "This is another debug message");
logger.info("This is an info message", "This is another info message");
logger.warn("This is a warning message", "This is another warning message");
logger.error("This is an error message", "This is another error message");
logger.fatal("This is a fatal message", "This is another fatal message");

Output

[Logging Example] LOG: This is a trace message
[Logging Example] DEBUG: This is a debug message
[Logging Example] INFO: This is an info message
[Logging Example] WARN: This is a warning message
[Logging Example] ERROR: This is an error message
[Logging Example] FATAL: This is a fatal message
[Logging Example] LOG: This is a trace message
[Logging Example] LOG: This is another trace message
[Logging Example] DEBUG: This is a debug message
[Logging Example] DEBUG: This is another debug message
[Logging Example] INFO: This is an info message
[Logging Example] INFO: This is another info message
[Logging Example] WARN: This is a warning message
[Logging Example] WARN: This is another warning message
[Logging Example] ERROR: This is an error message
[Logging Example] ERROR: This is another error message
[Logging Example] FATAL: This is a fatal message
[Logging Example] FATAL: This is another fatal message

Features

Here are a collection of some of the notable features of MiniLog.

Logging Headers

You can add a header to the start of each log message. This is useful for adding a timestamp or other information to the start of each log message.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withHeader(LoggingHeaderEnum.BRACKETED) //Adds a bracketed header to the start of each log message
.build();

Output

[Logging Example] LOG: This is a trace message

For the time being, MiniLog has a preset list of headers. However, you can create your own custom headers by implementing the LoggingHeader interface in the near future

Logging Levels

You can change the log level of the logger. This is useful for only logging certain messages to the output streams.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN) //Only logs messages with a log level of WARN or higher
.build();

Output

[Logging Example] WARN: This is a warning message
[Logging Example] ERROR: This is an error message
[Logging Example] FATAL: This is a fatal message

Only messages with a log level of WARN or higher will be logged to the output streams.

Logging Formats

You can change the format of the log messages. This is useful for changing the format of the log level or adding custom text to the start of the message.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build())
.build();

Output

[Logging Example] WARNING: This is a warning message

Hooking into the logger

MiniLog suppors a system of hooks. Hooks are used to add custom functionality to the logger. For example, you can add a hook to log to a file, or to send a message to a server.

Hooks are called with a Logger andLoggerEventEnum. The Logger is the logger that the hook is attached to, and the LoggerEventEnum is the event that the hook is being called for. LoggerEventEnum has PRE and POST as the possible values. PRE is called before the message is logged, and POST is called after the message is logged.

To create a hook, simply extend either AbstractHook or AbstractLoggerHook if you want to only have the hook called with a specific logger

The @Hook annotation is used to register the hook. Hooks are registered when the logger is built.

Example Hook

packagedev.vince;
importdev.vince.log.event.LoggerEventEnum;
importdev.vince.log.hook.Hook;
importdev.vince.log.hook.api.AbstractHook;
importdev.vince.log.logger.Logger;
@HookpublicclassHookExampleextendsAbstractHook {
publicHookExample() {
super("Example hook");
}
@Overridepublicvoidhook(finalLoggerlogger, finalLoggerEventEnumtype) {
if (type == LoggerEventEnum.PRE) {
System.out.println("This is a pre hook, it will be executed before the logger logs the message");
}
if (type == LoggerEventEnum.POST) {
System.out.println("This is a post hook, it will be executed after the logger logs the message");
}
}
}

Example Logger Hook

packagedev.vince;
importdev.vince.log.LoggerManager;
importdev.vince.log.event.LoggerEventEnum;
importdev.vince.log.hook.Hook;
importdev.vince.log.hook.api.AbstractLoggerHook;
importdev.vince.log.logger.Logger;
@HookpublicclassLoggerHookExampleextendsAbstractLoggerHook {
publicLoggerHookExample() {
super("Example hook for a specific logger");
}
@Overridepublicvoidhook(finalLoggerlogger, finalLoggerEventEnumtype) {
super.setLogger(LoggerManager.getLogger("Logger Example")); //This is the logger that will be hookedif(logger.equals(super.getLogger())){
if(type == LoggerEventEnum.PRE){
System.out.println("This is a pre hook, it will be executed before the logger logs the message");
}
if(type == LoggerEventEnum.POST){
System.out.println("This is a post hook, it will be executed after the logger logs the message");
}
}
}
}

These hooks are automatically registered when the logger is built. You can also register hooks manually by calling HookManager.addHook(AbstractHook hook)

Contributing

All contributions are welcome. If you have any suggestions or find any bugs, please create an issue or pull request.

License

MiniLog is licensed under the GPL-3.0 License. See the LICENSE file for more information.

About

A lightweight logging library for Java

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - dev-vince/minilog: A lightweight logging library for Java · GitHub
Skip to content

Repository files navigation

MiniLog

MiniLog is a simple logging library for Java 17+. It is designed to be simple to use and easy to integrate into your project.

Usage

Step 1. Import the library into your project

Maven

<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/dev-vince/minilog</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>dev.vince</groupId>
<artifactId>minilog</artifactId>
<version>1.0-0</version>
</dependency>
</dependencies>

or by downloading the jar from the packages page.

Step 2. Create a new logger

Here are some samples of code to help you get started creating new loggers.

Create a new logger with a custom name

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.build();

Create a new logger with a custom name and custom log level

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.build();

Create a new logger with a custom name, custom log level and custom log format

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build()) .build();

You can also add multiple custom output streams to the logger

System.out is added by default, however you can add your own output streams (for example a file)

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build())
.withOutput(newPrintStream("output.txt")) //Will now add all logs to output.txt
.build();

Step 3. Log messages

MiniLog supports the following log levels: TRACE,DEBUG, INFO, WARN, ERROR, FATAL. To log a message, simply call the appropriate method in the logger.

// Logs a messageto the output streamslogger.trace("This is a trace message");
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warning message");
logger.error("This is an error message");
logger.fatal("This is a fatal message");
// You can also use the log method to log multiple messages per call (this is useful for logging exceptions, or multi line messages)logger.trace("This is a trace message", "This is another trace message");
logger.debug("This is a debug message", "This is another debug message");
logger.info("This is an info message", "This is another info message");
logger.warn("This is a warning message", "This is another warning message");
logger.error("This is an error message", "This is another error message");
logger.fatal("This is a fatal message", "This is another fatal message");

Output

[Logging Example] LOG: This is a trace message
[Logging Example] DEBUG: This is a debug message
[Logging Example] INFO: This is an info message
[Logging Example] WARN: This is a warning message
[Logging Example] ERROR: This is an error message
[Logging Example] FATAL: This is a fatal message
[Logging Example] LOG: This is a trace message
[Logging Example] LOG: This is another trace message
[Logging Example] DEBUG: This is a debug message
[Logging Example] DEBUG: This is another debug message
[Logging Example] INFO: This is an info message
[Logging Example] INFO: This is another info message
[Logging Example] WARN: This is a warning message
[Logging Example] WARN: This is another warning message
[Logging Example] ERROR: This is an error message
[Logging Example] ERROR: This is another error message
[Logging Example] FATAL: This is a fatal message
[Logging Example] FATAL: This is another fatal message

Features

Here are a collection of some of the notable features of MiniLog.

Logging Headers

You can add a header to the start of each log message. This is useful for adding a timestamp or other information to the start of each log message.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withHeader(LoggingHeaderEnum.BRACKETED) //Adds a bracketed header to the start of each log message
.build();

Output

[Logging Example] LOG: This is a trace message

For the time being, MiniLog has a preset list of headers. However, you can create your own custom headers by implementing the LoggingHeader interface in the near future

Logging Levels

You can change the log level of the logger. This is useful for only logging certain messages to the output streams.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN) //Only logs messages with a log level of WARN or higher
.build();

Output

[Logging Example] WARN: This is a warning message
[Logging Example] ERROR: This is an error message
[Logging Example] FATAL: This is a fatal message

Only messages with a log level of WARN or higher will be logged to the output streams.

Logging Formats

You can change the format of the log messages. This is useful for changing the format of the log level or adding custom text to the start of the message.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build())
.build();

Output

[Logging Example] WARNING: This is a warning message

Hooking into the logger

MiniLog suppors a system of hooks. Hooks are used to add custom functionality to the logger. For example, you can add a hook to log to a file, or to send a message to a server.

Hooks are called with a Logger andLoggerEventEnum. The Logger is the logger that the hook is attached to, and the LoggerEventEnum is the event that the hook is being called for. LoggerEventEnum has PRE and POST as the possible values. PRE is called before the message is logged, and POST is called after the message is logged.

To create a hook, simply extend either AbstractHook or AbstractLoggerHook if you want to only have the hook called with a specific logger

The @Hook annotation is used to register the hook. Hooks are registered when the logger is built.

Example Hook

packagedev.vince;
importdev.vince.log.event.LoggerEventEnum;
importdev.vince.log.hook.Hook;
importdev.vince.log.hook.api.AbstractHook;
importdev.vince.log.logger.Logger;
@HookpublicclassHookExampleextendsAbstractHook {
publicHookExample() {
super("Example hook");
}
@Overridepublicvoidhook(finalLoggerlogger, finalLoggerEventEnumtype) {
if (type == LoggerEventEnum.PRE) {
System.out.println("This is a pre hook, it will be executed before the logger logs the message");
}
if (type == LoggerEventEnum.POST) {
System.out.println("This is a post hook, it will be executed after the logger logs the message");
}
}
}

Example Logger Hook

packagedev.vince;
importdev.vince.log.LoggerManager;
importdev.vince.log.event.LoggerEventEnum;
importdev.vince.log.hook.Hook;
importdev.vince.log.hook.api.AbstractLoggerHook;
importdev.vince.log.logger.Logger;
@HookpublicclassLoggerHookExampleextendsAbstractLoggerHook {
publicLoggerHookExample() {
super("Example hook for a specific logger");
}
@Overridepublicvoidhook(finalLoggerlogger, finalLoggerEventEnumtype) {
super.setLogger(LoggerManager.getLogger("Logger Example")); //This is the logger that will be hookedif(logger.equals(super.getLogger())){
if(type == LoggerEventEnum.PRE){
System.out.println("This is a pre hook, it will be executed before the logger logs the message");
}
if(type == LoggerEventEnum.POST){
System.out.println("This is a post hook, it will be executed after the logger logs the message");
}
}
}
}

These hooks are automatically registered when the logger is built. You can also register hooks manually by calling HookManager.addHook(AbstractHook hook)

Contributing

All contributions are welcome. If you have any suggestions or find any bugs, please create an issue or pull request.

License

MiniLog is licensed under the GPL-3.0 License. See the LICENSE file for more information.

About

A lightweight logging library for Java

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - dev-vince/minilog: A lightweight logging library for Java · GitHub
Skip to content

Repository files navigation

MiniLog

MiniLog is a simple logging library for Java 17+. It is designed to be simple to use and easy to integrate into your project.

Usage

Step 1. Import the library into your project

Maven

<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/dev-vince/minilog</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>dev.vince</groupId>
<artifactId>minilog</artifactId>
<version>1.0-0</version>
</dependency>
</dependencies>

or by downloading the jar from the packages page.

Step 2. Create a new logger

Here are some samples of code to help you get started creating new loggers.

Create a new logger with a custom name

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.build();

Create a new logger with a custom name and custom log level

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.build();

Create a new logger with a custom name, custom log level and custom log format

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build()) .build();

You can also add multiple custom output streams to the logger

System.out is added by default, however you can add your own output streams (for example a file)

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build())
.withOutput(newPrintStream("output.txt")) //Will now add all logs to output.txt
.build();

Step 3. Log messages

MiniLog supports the following log levels: TRACE,DEBUG, INFO, WARN, ERROR, FATAL. To log a message, simply call the appropriate method in the logger.

// Logs a messageto the output streamslogger.trace("This is a trace message");
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warning message");
logger.error("This is an error message");
logger.fatal("This is a fatal message");
// You can also use the log method to log multiple messages per call (this is useful for logging exceptions, or multi line messages)logger.trace("This is a trace message", "This is another trace message");
logger.debug("This is a debug message", "This is another debug message");
logger.info("This is an info message", "This is another info message");
logger.warn("This is a warning message", "This is another warning message");
logger.error("This is an error message", "This is another error message");
logger.fatal("This is a fatal message", "This is another fatal message");

Output

[Logging Example] LOG: This is a trace message
[Logging Example] DEBUG: This is a debug message
[Logging Example] INFO: This is an info message
[Logging Example] WARN: This is a warning message
[Logging Example] ERROR: This is an error message
[Logging Example] FATAL: This is a fatal message
[Logging Example] LOG: This is a trace message
[Logging Example] LOG: This is another trace message
[Logging Example] DEBUG: This is a debug message
[Logging Example] DEBUG: This is another debug message
[Logging Example] INFO: This is an info message
[Logging Example] INFO: This is another info message
[Logging Example] WARN: This is a warning message
[Logging Example] WARN: This is another warning message
[Logging Example] ERROR: This is an error message
[Logging Example] ERROR: This is another error message
[Logging Example] FATAL: This is a fatal message
[Logging Example] FATAL: This is another fatal message

Features

Here are a collection of some of the notable features of MiniLog.

Logging Headers

You can add a header to the start of each log message. This is useful for adding a timestamp or other information to the start of each log message.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withHeader(LoggingHeaderEnum.BRACKETED) //Adds a bracketed header to the start of each log message
.build();

Output

[Logging Example] LOG: This is a trace message

For the time being, MiniLog has a preset list of headers. However, you can create your own custom headers by implementing the LoggingHeader interface in the near future

Logging Levels

You can change the log level of the logger. This is useful for only logging certain messages to the output streams.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN) //Only logs messages with a log level of WARN or higher
.build();

Output

[Logging Example] WARN: This is a warning message
[Logging Example] ERROR: This is an error message
[Logging Example] FATAL: This is a fatal message

Only messages with a log level of WARN or higher will be logged to the output streams.

Logging Formats

You can change the format of the log messages. This is useful for changing the format of the log level or adding custom text to the start of the message.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build())
.build();

Output

[Logging Example] WARNING: This is a warning message

Hooking into the logger

MiniLog suppors a system of hooks. Hooks are used to add custom functionality to the logger. For example, you can add a hook to log to a file, or to send a message to a server.

Hooks are called with a Logger andLoggerEventEnum. The Logger is the logger that the hook is attached to, and the LoggerEventEnum is the event that the hook is being called for. LoggerEventEnum has PRE and POST as the possible values. PRE is called before the message is logged, and POST is called after the message is logged.

To create a hook, simply extend either AbstractHook or AbstractLoggerHook if you want to only have the hook called with a specific logger

The @Hook annotation is used to register the hook. Hooks are registered when the logger is built.

Example Hook

packagedev.vince;
importdev.vince.log.event.LoggerEventEnum;
importdev.vince.log.hook.Hook;
importdev.vince.log.hook.api.AbstractHook;
importdev.vince.log.logger.Logger;
@HookpublicclassHookExampleextendsAbstractHook {
publicHookExample() {
super("Example hook");
}
@Overridepublicvoidhook(finalLoggerlogger, finalLoggerEventEnumtype) {
if (type == LoggerEventEnum.PRE) {
System.out.println("This is a pre hook, it will be executed before the logger logs the message");
}
if (type == LoggerEventEnum.POST) {
System.out.println("This is a post hook, it will be executed after the logger logs the message");
}
}
}

Example Logger Hook

packagedev.vince;
importdev.vince.log.LoggerManager;
importdev.vince.log.event.LoggerEventEnum;
importdev.vince.log.hook.Hook;
importdev.vince.log.hook.api.AbstractLoggerHook;
importdev.vince.log.logger.Logger;
@HookpublicclassLoggerHookExampleextendsAbstractLoggerHook {
publicLoggerHookExample() {
super("Example hook for a specific logger");
}
@Overridepublicvoidhook(finalLoggerlogger, finalLoggerEventEnumtype) {
super.setLogger(LoggerManager.getLogger("Logger Example")); //This is the logger that will be hookedif(logger.equals(super.getLogger())){
if(type == LoggerEventEnum.PRE){
System.out.println("This is a pre hook, it will be executed before the logger logs the message");
}
if(type == LoggerEventEnum.POST){
System.out.println("This is a post hook, it will be executed after the logger logs the message");
}
}
}
}

These hooks are automatically registered when the logger is built. You can also register hooks manually by calling HookManager.addHook(AbstractHook hook)

Contributing

All contributions are welcome. If you have any suggestions or find any bugs, please create an issue or pull request.

License

MiniLog is licensed under the GPL-3.0 License. See the LICENSE file for more information.

About

A lightweight logging library for Java

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - dev-vince/minilog: A lightweight logging library for Java · GitHub
Skip to content

Repository files navigation

MiniLog

MiniLog is a simple logging library for Java 17+. It is designed to be simple to use and easy to integrate into your project.

Usage

Step 1. Import the library into your project

Maven

<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/dev-vince/minilog</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>dev.vince</groupId>
<artifactId>minilog</artifactId>
<version>1.0-0</version>
</dependency>
</dependencies>

or by downloading the jar from the packages page.

Step 2. Create a new logger

Here are some samples of code to help you get started creating new loggers.

Create a new logger with a custom name

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.build();

Create a new logger with a custom name and custom log level

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.build();

Create a new logger with a custom name, custom log level and custom log format

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build()) .build();

You can also add multiple custom output streams to the logger

System.out is added by default, however you can add your own output streams (for example a file)

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build())
.withOutput(newPrintStream("output.txt")) //Will now add all logs to output.txt
.build();

Step 3. Log messages

MiniLog supports the following log levels: TRACE,DEBUG, INFO, WARN, ERROR, FATAL. To log a message, simply call the appropriate method in the logger.

// Logs a messageto the output streamslogger.trace("This is a trace message");
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warning message");
logger.error("This is an error message");
logger.fatal("This is a fatal message");
// You can also use the log method to log multiple messages per call (this is useful for logging exceptions, or multi line messages)logger.trace("This is a trace message", "This is another trace message");
logger.debug("This is a debug message", "This is another debug message");
logger.info("This is an info message", "This is another info message");
logger.warn("This is a warning message", "This is another warning message");
logger.error("This is an error message", "This is another error message");
logger.fatal("This is a fatal message", "This is another fatal message");

Output

[Logging Example] LOG: This is a trace message
[Logging Example] DEBUG: This is a debug message
[Logging Example] INFO: This is an info message
[Logging Example] WARN: This is a warning message
[Logging Example] ERROR: This is an error message
[Logging Example] FATAL: This is a fatal message
[Logging Example] LOG: This is a trace message
[Logging Example] LOG: This is another trace message
[Logging Example] DEBUG: This is a debug message
[Logging Example] DEBUG: This is another debug message
[Logging Example] INFO: This is an info message
[Logging Example] INFO: This is another info message
[Logging Example] WARN: This is a warning message
[Logging Example] WARN: This is another warning message
[Logging Example] ERROR: This is an error message
[Logging Example] ERROR: This is another error message
[Logging Example] FATAL: This is a fatal message
[Logging Example] FATAL: This is another fatal message

Features

Here are a collection of some of the notable features of MiniLog.

Logging Headers

You can add a header to the start of each log message. This is useful for adding a timestamp or other information to the start of each log message.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withHeader(LoggingHeaderEnum.BRACKETED) //Adds a bracketed header to the start of each log message
.build();

Output

[Logging Example] LOG: This is a trace message

For the time being, MiniLog has a preset list of headers. However, you can create your own custom headers by implementing the LoggingHeader interface in the near future

Logging Levels

You can change the log level of the logger. This is useful for only logging certain messages to the output streams.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN) //Only logs messages with a log level of WARN or higher
.build();

Output

[Logging Example] WARN: This is a warning message
[Logging Example] ERROR: This is an error message
[Logging Example] FATAL: This is a fatal message

Only messages with a log level of WARN or higher will be logged to the output streams.

Logging Formats

You can change the format of the log messages. This is useful for changing the format of the log level or adding custom text to the start of the message.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build())
.build();

Output

[Logging Example] WARNING: This is a warning message

Hooking into the logger

MiniLog suppors a system of hooks. Hooks are used to add custom functionality to the logger. For example, you can add a hook to log to a file, or to send a message to a server.

Hooks are called with a Logger andLoggerEventEnum. The Logger is the logger that the hook is attached to, and the LoggerEventEnum is the event that the hook is being called for. LoggerEventEnum has PRE and POST as the possible values. PRE is called before the message is logged, and POST is called after the message is logged.

To create a hook, simply extend either AbstractHook or AbstractLoggerHook if you want to only have the hook called with a specific logger

The @Hook annotation is used to register the hook. Hooks are registered when the logger is built.

Example Hook

packagedev.vince;
importdev.vince.log.event.LoggerEventEnum;
importdev.vince.log.hook.Hook;
importdev.vince.log.hook.api.AbstractHook;
importdev.vince.log.logger.Logger;
@HookpublicclassHookExampleextendsAbstractHook {
publicHookExample() {
super("Example hook");
}
@Overridepublicvoidhook(finalLoggerlogger, finalLoggerEventEnumtype) {
if (type == LoggerEventEnum.PRE) {
System.out.println("This is a pre hook, it will be executed before the logger logs the message");
}
if (type == LoggerEventEnum.POST) {
System.out.println("This is a post hook, it will be executed after the logger logs the message");
}
}
}

Example Logger Hook

packagedev.vince;
importdev.vince.log.LoggerManager;
importdev.vince.log.event.LoggerEventEnum;
importdev.vince.log.hook.Hook;
importdev.vince.log.hook.api.AbstractLoggerHook;
importdev.vince.log.logger.Logger;
@HookpublicclassLoggerHookExampleextendsAbstractLoggerHook {
publicLoggerHookExample() {
super("Example hook for a specific logger");
}
@Overridepublicvoidhook(finalLoggerlogger, finalLoggerEventEnumtype) {
super.setLogger(LoggerManager.getLogger("Logger Example")); //This is the logger that will be hookedif(logger.equals(super.getLogger())){
if(type == LoggerEventEnum.PRE){
System.out.println("This is a pre hook, it will be executed before the logger logs the message");
}
if(type == LoggerEventEnum.POST){
System.out.println("This is a post hook, it will be executed after the logger logs the message");
}
}
}
}

These hooks are automatically registered when the logger is built. You can also register hooks manually by calling HookManager.addHook(AbstractHook hook)

Contributing

All contributions are welcome. If you have any suggestions or find any bugs, please create an issue or pull request.

License

MiniLog is licensed under the GPL-3.0 License. See the LICENSE file for more information.

About

A lightweight logging library for Java

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - dev-vince/minilog: A lightweight logging library for Java · GitHub
Skip to content

Repository files navigation

MiniLog

MiniLog is a simple logging library for Java 17+. It is designed to be simple to use and easy to integrate into your project.

Usage

Step 1. Import the library into your project

Maven

<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/dev-vince/minilog</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>dev.vince</groupId>
<artifactId>minilog</artifactId>
<version>1.0-0</version>
</dependency>
</dependencies>

or by downloading the jar from the packages page.

Step 2. Create a new logger

Here are some samples of code to help you get started creating new loggers.

Create a new logger with a custom name

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.build();

Create a new logger with a custom name and custom log level

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.build();

Create a new logger with a custom name, custom log level and custom log format

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build()) .build();

You can also add multiple custom output streams to the logger

System.out is added by default, however you can add your own output streams (for example a file)

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build())
.withOutput(newPrintStream("output.txt")) //Will now add all logs to output.txt
.build();

Step 3. Log messages

MiniLog supports the following log levels: TRACE,DEBUG, INFO, WARN, ERROR, FATAL. To log a message, simply call the appropriate method in the logger.

// Logs a messageto the output streamslogger.trace("This is a trace message");
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warning message");
logger.error("This is an error message");
logger.fatal("This is a fatal message");
// You can also use the log method to log multiple messages per call (this is useful for logging exceptions, or multi line messages)logger.trace("This is a trace message", "This is another trace message");
logger.debug("This is a debug message", "This is another debug message");
logger.info("This is an info message", "This is another info message");
logger.warn("This is a warning message", "This is another warning message");
logger.error("This is an error message", "This is another error message");
logger.fatal("This is a fatal message", "This is another fatal message");

Output

[Logging Example] LOG: This is a trace message
[Logging Example] DEBUG: This is a debug message
[Logging Example] INFO: This is an info message
[Logging Example] WARN: This is a warning message
[Logging Example] ERROR: This is an error message
[Logging Example] FATAL: This is a fatal message
[Logging Example] LOG: This is a trace message
[Logging Example] LOG: This is another trace message
[Logging Example] DEBUG: This is a debug message
[Logging Example] DEBUG: This is another debug message
[Logging Example] INFO: This is an info message
[Logging Example] INFO: This is another info message
[Logging Example] WARN: This is a warning message
[Logging Example] WARN: This is another warning message
[Logging Example] ERROR: This is an error message
[Logging Example] ERROR: This is another error message
[Logging Example] FATAL: This is a fatal message
[Logging Example] FATAL: This is another fatal message

Features

Here are a collection of some of the notable features of MiniLog.

Logging Headers

You can add a header to the start of each log message. This is useful for adding a timestamp or other information to the start of each log message.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withHeader(LoggingHeaderEnum.BRACKETED) //Adds a bracketed header to the start of each log message
.build();

Output

[Logging Example] LOG: This is a trace message

For the time being, MiniLog has a preset list of headers. However, you can create your own custom headers by implementing the LoggingHeader interface in the near future

Logging Levels

You can change the log level of the logger. This is useful for only logging certain messages to the output streams.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN) //Only logs messages with a log level of WARN or higher
.build();

Output

[Logging Example] WARN: This is a warning message
[Logging Example] ERROR: This is an error message
[Logging Example] FATAL: This is a fatal message

Only messages with a log level of WARN or higher will be logged to the output streams.

Logging Formats

You can change the format of the log messages. This is useful for changing the format of the log level or adding custom text to the start of the message.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build())
.build();

Output

[Logging Example] WARNING: This is a warning message

Hooking into the logger

MiniLog suppors a system of hooks. Hooks are used to add custom functionality to the logger. For example, you can add a hook to log to a file, or to send a message to a server.

Hooks are called with a Logger andLoggerEventEnum. The Logger is the logger that the hook is attached to, and the LoggerEventEnum is the event that the hook is being called for. LoggerEventEnum has PRE and POST as the possible values. PRE is called before the message is logged, and POST is called after the message is logged.

To create a hook, simply extend either AbstractHook or AbstractLoggerHook if you want to only have the hook called with a specific logger

The @Hook annotation is used to register the hook. Hooks are registered when the logger is built.

Example Hook

packagedev.vince;
importdev.vince.log.event.LoggerEventEnum;
importdev.vince.log.hook.Hook;
importdev.vince.log.hook.api.AbstractHook;
importdev.vince.log.logger.Logger;
@HookpublicclassHookExampleextendsAbstractHook {
publicHookExample() {
super("Example hook");
}
@Overridepublicvoidhook(finalLoggerlogger, finalLoggerEventEnumtype) {
if (type == LoggerEventEnum.PRE) {
System.out.println("This is a pre hook, it will be executed before the logger logs the message");
}
if (type == LoggerEventEnum.POST) {
System.out.println("This is a post hook, it will be executed after the logger logs the message");
}
}
}

Example Logger Hook

packagedev.vince;
importdev.vince.log.LoggerManager;
importdev.vince.log.event.LoggerEventEnum;
importdev.vince.log.hook.Hook;
importdev.vince.log.hook.api.AbstractLoggerHook;
importdev.vince.log.logger.Logger;
@HookpublicclassLoggerHookExampleextendsAbstractLoggerHook {
publicLoggerHookExample() {
super("Example hook for a specific logger");
}
@Overridepublicvoidhook(finalLoggerlogger, finalLoggerEventEnumtype) {
super.setLogger(LoggerManager.getLogger("Logger Example")); //This is the logger that will be hookedif(logger.equals(super.getLogger())){
if(type == LoggerEventEnum.PRE){
System.out.println("This is a pre hook, it will be executed before the logger logs the message");
}
if(type == LoggerEventEnum.POST){
System.out.println("This is a post hook, it will be executed after the logger logs the message");
}
}
}
}

These hooks are automatically registered when the logger is built. You can also register hooks manually by calling HookManager.addHook(AbstractHook hook)

Contributing

All contributions are welcome. If you have any suggestions or find any bugs, please create an issue or pull request.

License

MiniLog is licensed under the GPL-3.0 License. See the LICENSE file for more information.

About

A lightweight logging library for Java

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - dev-vince/minilog: A lightweight logging library for Java · GitHub
Skip to content

Repository files navigation

MiniLog

MiniLog is a simple logging library for Java 17+. It is designed to be simple to use and easy to integrate into your project.

Usage

Step 1. Import the library into your project

Maven

<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/dev-vince/minilog</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>dev.vince</groupId>
<artifactId>minilog</artifactId>
<version>1.0-0</version>
</dependency>
</dependencies>

or by downloading the jar from the packages page.

Step 2. Create a new logger

Here are some samples of code to help you get started creating new loggers.

Create a new logger with a custom name

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.build();

Create a new logger with a custom name and custom log level

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.build();

Create a new logger with a custom name, custom log level and custom log format

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build()) .build();

You can also add multiple custom output streams to the logger

System.out is added by default, however you can add your own output streams (for example a file)

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build())
.withOutput(newPrintStream("output.txt")) //Will now add all logs to output.txt
.build();

Step 3. Log messages

MiniLog supports the following log levels: TRACE,DEBUG, INFO, WARN, ERROR, FATAL. To log a message, simply call the appropriate method in the logger.

// Logs a messageto the output streamslogger.trace("This is a trace message");
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warning message");
logger.error("This is an error message");
logger.fatal("This is a fatal message");
// You can also use the log method to log multiple messages per call (this is useful for logging exceptions, or multi line messages)logger.trace("This is a trace message", "This is another trace message");
logger.debug("This is a debug message", "This is another debug message");
logger.info("This is an info message", "This is another info message");
logger.warn("This is a warning message", "This is another warning message");
logger.error("This is an error message", "This is another error message");
logger.fatal("This is a fatal message", "This is another fatal message");

Output

[Logging Example] LOG: This is a trace message
[Logging Example] DEBUG: This is a debug message
[Logging Example] INFO: This is an info message
[Logging Example] WARN: This is a warning message
[Logging Example] ERROR: This is an error message
[Logging Example] FATAL: This is a fatal message
[Logging Example] LOG: This is a trace message
[Logging Example] LOG: This is another trace message
[Logging Example] DEBUG: This is a debug message
[Logging Example] DEBUG: This is another debug message
[Logging Example] INFO: This is an info message
[Logging Example] INFO: This is another info message
[Logging Example] WARN: This is a warning message
[Logging Example] WARN: This is another warning message
[Logging Example] ERROR: This is an error message
[Logging Example] ERROR: This is another error message
[Logging Example] FATAL: This is a fatal message
[Logging Example] FATAL: This is another fatal message

Features

Here are a collection of some of the notable features of MiniLog.

Logging Headers

You can add a header to the start of each log message. This is useful for adding a timestamp or other information to the start of each log message.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withHeader(LoggingHeaderEnum.BRACKETED) //Adds a bracketed header to the start of each log message
.build();

Output

[Logging Example] LOG: This is a trace message

For the time being, MiniLog has a preset list of headers. However, you can create your own custom headers by implementing the LoggingHeader interface in the near future

Logging Levels

You can change the log level of the logger. This is useful for only logging certain messages to the output streams.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN) //Only logs messages with a log level of WARN or higher
.build();

Output

[Logging Example] WARN: This is a warning message
[Logging Example] ERROR: This is an error message
[Logging Example] FATAL: This is a fatal message

Only messages with a log level of WARN or higher will be logged to the output streams.

Logging Formats

You can change the format of the log messages. This is useful for changing the format of the log level or adding custom text to the start of the message.

finalLoggerlogger = Logger.createLogger()
.withName("Logging Example")
.withLogLevel(LogLevel.WARN)
.withFormat(newLoggerFormat.Builder()
.withLogFormat("(%s): %s")// The first %s is the log level and the second is the message, The default format is "%s: %s"
.withLevelFormat(LoggingLevelEnum.WARN, "WARNING") //Changes the format of the log level to WARNING (by default WARN)
.build())
.build();

Output

[Logging Example] WARNING: This is a warning message

Hooking into the logger

MiniLog suppors a system of hooks. Hooks are used to add custom functionality to the logger. For example, you can add a hook to log to a file, or to send a message to a server.

Hooks are called with a Logger andLoggerEventEnum. The Logger is the logger that the hook is attached to, and the LoggerEventEnum is the event that the hook is being called for. LoggerEventEnum has PRE and POST as the possible values. PRE is called before the message is logged, and POST is called after the message is logged.

To create a hook, simply extend either AbstractHook or AbstractLoggerHook if you want to only have the hook called with a specific logger

The @Hook annotation is used to register the hook. Hooks are registered when the logger is built.

Example Hook

packagedev.vince;
importdev.vince.log.event.LoggerEventEnum;
importdev.vince.log.hook.Hook;
importdev.vince.log.hook.api.AbstractHook;
importdev.vince.log.logger.Logger;
@HookpublicclassHookExampleextendsAbstractHook {
publicHookExample() {
super("Example hook");
}
@Overridepublicvoidhook(finalLoggerlogger, finalLoggerEventEnumtype) {
if (type == LoggerEventEnum.PRE) {
System.out.println("This is a pre hook, it will be executed before the logger logs the message");
}
if (type == LoggerEventEnum.POST) {
System.out.println("This is a post hook, it will be executed after the logger logs the message");
}
}
}

Example Logger Hook

packagedev.vince;
importdev.vince.log.LoggerManager;
importdev.vince.log.event.LoggerEventEnum;
importdev.vince.log.hook.Hook;
importdev.vince.log.hook.api.AbstractLoggerHook;
importdev.vince.log.logger.Logger;
@HookpublicclassLoggerHookExampleextendsAbstractLoggerHook {
publicLoggerHookExample() {
super("Example hook for a specific logger");
}
@Overridepublicvoidhook(finalLoggerlogger, finalLoggerEventEnumtype) {
super.setLogger(LoggerManager.getLogger("Logger Example")); //This is the logger that will be hookedif(logger.equals(super.getLogger())){
if(type == LoggerEventEnum.PRE){
System.out.println("This is a pre hook, it will be executed before the logger logs the message");
}
if(type == LoggerEventEnum.POST){
System.out.println("This is a post hook, it will be executed after the logger logs the message");
}
}
}
}

These hooks are automatically registered when the logger is built. You can also register hooks manually by calling HookManager.addHook(AbstractHook hook)

Contributing

All contributions are welcome. If you have any suggestions or find any bugs, please create an issue or pull request.

License

MiniLog is licensed under the GPL-3.0 License. See the LICENSE file for more information.

About

A lightweight logging library for Java

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages