Media is too big
VIEW IN TELEGRAM
I thought that watching how the dragon just flies through blocks looks strange, so I made this mod
https://redd.it/1ugiwwe
@MinecraftModded
https://redd.it/1ugiwwe
@MinecraftModded
I added async log filtering to my optimization mod, AsyncLogger - filtering runs off your game threads with minimal overhead
Hi everyone,
I've been working on an optimization mod called AsyncLogger, which makes use of log4j2's asynchronous loggers capability, moving logging operations to a dedicated thread. In the latest update, I've added a new filtering functionality with a focus on minimal performance overhead, aiming to resolve the problems that exist in current log filtering mods.
Many popular log filtering mods work by simply adding a filter to the logger. This way, the filter runs on the logging thread (the thread that is logging information), creating a constant, albeit small, lag source that accumulates. Additionally, some of these mods perform filtering rather inefficiently, e.g. using
AsyncLogger, thanks to its optimization of asynchronous loggers, resolves the issue by completely moving the filtering overhead off the caller thread. Be it render thread, server thread or worker thread that log spam happens on, it no longer blocks that thread, and instead, all filtering and (if filters passed) logging are done on the dedicated async logger thread. This way, it saves CPU time on any thread that prints logs intensively, while offering the capability of filtering the logs to keep them clean.
For those wanting a sneak peek, here's the default config file (with unrelated options omitted for brevity):
The default config does not enable filtering, which means AsyncLogger remains a purely optimization mod for those who do not need the feature. To use filtering, simply set
-
-
-
If log spam ever causes lag, extends launch time, or just clutters your console, AsyncLogger should be worth trying. Let me know how it goes!
Available on Forge (1.18.2 ~ 1.20.1), NeoForge (1.21.1+), and Fabric (1.18.2+)
Project Page: CurseForge | Modrinth | GitHub
https://redd.it/1ugmv2t
@MinecraftModded
Hi everyone,
I've been working on an optimization mod called AsyncLogger, which makes use of log4j2's asynchronous loggers capability, moving logging operations to a dedicated thread. In the latest update, I've added a new filtering functionality with a focus on minimal performance overhead, aiming to resolve the problems that exist in current log filtering mods.
Many popular log filtering mods work by simply adding a filter to the logger. This way, the filter runs on the logging thread (the thread that is logging information), creating a constant, albeit small, lag source that accumulates. Additionally, some of these mods perform filtering rather inefficiently, e.g. using
String#matches instead of pre-compiling the regex. And many are no longer maintained.AsyncLogger, thanks to its optimization of asynchronous loggers, resolves the issue by completely moving the filtering overhead off the caller thread. Be it render thread, server thread or worker thread that log spam happens on, it no longer blocks that thread, and instead, all filtering and (if filters passed) logging are done on the dedicated async logger thread. This way, it saves CPU time on any thread that prints logs intensively, while offering the capability of filtering the logs to keep them clean.
For those wanting a sneak peek, here's the default config file (with unrelated options omitted for brevity):
#Specifies whether System.out and System.err should be redirected to the logger
wrapSysOutSysErr = false
#Forge/NeoForge-only: disables writing to `debug.log`
noDebugLog = false
[filtering]
#Specifies whether to enable filtering for logs.
#Unless "global" is set to true, filtering happens on the dedicated async thread, with no overhead for the caller.
enabled = false
#When set to true, filtering would happen globally instead of at the logger stage.
#This can avoid creating the LogEvent, at the cost of performing filtering on the caller thread, and not being able to process placeholders properly.
global = false
#Specifies whether to apply filtering to System.out (treated as INFO level) and System.err (treated as ERROR level.)
#Note that if `wrapSysOutSysErr` is disabled, filtering would happen on the caller thread.
sysout = false
#The specified logging levels will be filtered out and not logged. Valid values: TRACE, DEBUG, INFO, WARN, ERROR, FATAL
levels = []
#Messages logged by loggers with the specified names will be filtered out and not logged.
loggers = []
#Messages containing the specified substrings will be filtered out and not logged.
strings = []
#Messages that match the specified regexes will be filtered out and not logged.
regexes = []
The default config does not enable filtering, which means AsyncLogger remains a purely optimization mod for those who do not need the feature. To use filtering, simply set
enabled = true and edit one or more of the filters. For example:-
levels = ["INFO", "WARN"] - removes all logs at the INFO and WARN level (don't do this in production)-
strings = ["Force-disabling mixin", "is missing mods.toml file"] - removes logs containing any of the specified strings-
regexes = ["[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"] - removes logs that match the specified regexIf log spam ever causes lag, extends launch time, or just clutters your console, AsyncLogger should be worth trying. Let me know how it goes!
Available on Forge (1.18.2 ~ 1.20.1), NeoForge (1.21.1+), and Fabric (1.18.2+)
Project Page: CurseForge | Modrinth | GitHub
https://redd.it/1ugmv2t
@MinecraftModded