diff --git a/CHANGELOG.md b/CHANGELOG.md index 8fc673f..ca1fb2d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,2 +1,5 @@ +## v0.2.0 - Snapshot +* Added Log Filter + ## v0.1.0 - Snapshot Hello, World! \ No newline at end of file diff --git a/build.gradle b/build.gradle index 38121a2..c770741 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ plugins { id 'org.jetbrains.dokka' version '1.6.0' } -def projectVersion = (System.getenv("VERSION") ?: '0.1.0-SNAPSHOT').replaceFirst("v", "").replace('/', '') +def projectVersion = (System.getenv("VERSION") ?: '0.2.0-SNAPSHOT').replaceFirst("v", "").replace('/', '') group 'xyz.theprogramsrc' version projectVersion @@ -16,11 +16,15 @@ description 'Just a logger for the SimpleCore API' repositories { mavenLocal() mavenCentral() + maven { url 'https://repo.theprogramsrc.xyz/repository/maven-public/' } - maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' } maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' } maven { url 'https://oss.sonatype.org/content/repositories/releases/' } maven { url 'https://oss.sonatype.org/content/groups/public/' } + maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' } + maven { url 'https://repo.codemc.org/repository/maven-public' } + maven { url 'https://repo.codemc.org/repository/nms' } + maven { url 'https://jitpack.io' } } dependencies { @@ -29,6 +33,9 @@ dependencies { compileOnly 'net.md-5:bungeecord-api:1.17-R0.1-SNAPSHOT' compileOnly 'xyz.theprogramsrc:simplecoreapi:0.1.8-SNAPSHOT' + compileOnly 'org.apache.logging.log4j:log4j-api:2.17.0' + compileOnly 'org.apache.logging.log4j:log4j-core:2.17.0' + testImplementation 'org.junit.jupiter:junit-jupiter:5.8.2' } @@ -67,10 +74,6 @@ tasks.withType(Jar) { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } -test { - useJUnitPlatform() -} - configurations { testImplementation { extendsFrom(compileOnly) diff --git a/src/main/kotlin/xyz/theprogramsrc/loggingmodule/filter/FilterResult.kt b/src/main/kotlin/xyz/theprogramsrc/loggingmodule/filter/FilterResult.kt new file mode 100644 index 0000000..235d828 --- /dev/null +++ b/src/main/kotlin/xyz/theprogramsrc/loggingmodule/filter/FilterResult.kt @@ -0,0 +1,8 @@ +package xyz.theprogramsrc.loggingmodule.filter + +@Suppress("unused") +enum class FilterResult { + DENY, + NEUTRAL, + NONE, +} \ No newline at end of file diff --git a/src/main/kotlin/xyz/theprogramsrc/loggingmodule/filter/LogFilter.kt b/src/main/kotlin/xyz/theprogramsrc/loggingmodule/filter/LogFilter.kt new file mode 100644 index 0000000..2f5c715 --- /dev/null +++ b/src/main/kotlin/xyz/theprogramsrc/loggingmodule/filter/LogFilter.kt @@ -0,0 +1,50 @@ +package xyz.theprogramsrc.loggingmodule.filter + +import org.apache.logging.log4j.Level +import org.apache.logging.log4j.LogManager +import org.apache.logging.log4j.Marker +import org.apache.logging.log4j.core.Filter +import org.apache.logging.log4j.core.LogEvent +import org.apache.logging.log4j.core.Logger +import org.apache.logging.log4j.core.filter.AbstractFilter +import org.apache.logging.log4j.message.Message + +/** + * Representation of a LogFilter + * @param result The result to use if the filter matches + * @param filteredStrings The strings that a message must contain to be filtered + */ +open class LogFilter(val result: FilterResult = FilterResult.NEUTRAL, val filteredStrings: Array): AbstractFilter() { + + /** + * Extra requirements for a string filter to be matched + */ + open val extraRequirements = emptyArray() + + private fun process(message: String?): Filter.Result { + if(message != null){ + if(filteredStrings.any { message.lowercase().contains(it.lowercase()) } && extraRequirements.any { message.lowercase().contains(it.lowercase()) }){ + return Filter.Result.valueOf(result.name) + } + } + + return Filter.Result.NEUTRAL + } + + /** + * Registers this log filter to work with the root logger. + */ + fun register() { + val logger = LogManager.getRootLogger() as Logger + logger.addFilter(this) + } + + override fun filter(event: LogEvent?): Filter.Result = process(event?.message?.formattedMessage) + + override fun filter(logger: Logger?, level: Level?, marker: Marker?, msg: Message, t: Throwable?): Filter.Result = process(msg.formattedMessage) + + override fun filter(logger: Logger?, level: Level?, marker: Marker?, msg: Any, t: Throwable?): Filter.Result = process(msg.toString()) + + override fun filter(logger: Logger?, level: Level?, marker: Marker?, msg: String?, vararg params: Any?): Filter.Result = process(msg) + +}