|
| 1 | +package xyz.theprogramsrc.loggingmodule.filter |
| 2 | + |
| 3 | +import org.apache.logging.log4j.Level |
| 4 | +import org.apache.logging.log4j.LogManager |
| 5 | +import org.apache.logging.log4j.Marker |
| 6 | +import org.apache.logging.log4j.core.Filter |
| 7 | +import org.apache.logging.log4j.core.LogEvent |
| 8 | +import org.apache.logging.log4j.core.Logger |
| 9 | +import org.apache.logging.log4j.core.filter.AbstractFilter |
| 10 | +import org.apache.logging.log4j.message.Message |
| 11 | + |
| 12 | +/** |
| 13 | + * Representation of a LogFilter |
| 14 | + * @param result The result to use if the filter matches |
| 15 | + * @param filteredStrings The strings that a message must contain to be filtered |
| 16 | + */ |
| 17 | +open class LogFilter(val result: FilterResult = FilterResult.NEUTRAL, val filteredStrings: Array<String>): AbstractFilter() { |
| 18 | + |
| 19 | + /** |
| 20 | + * Extra requirements for a string filter to be matched |
| 21 | + */ |
| 22 | + open val extraRequirements = emptyArray<String>() |
| 23 | + |
| 24 | + private fun process(message: String?): Filter.Result { |
| 25 | + if(message != null){ |
| 26 | + if(filteredStrings.any { message.lowercase().contains(it.lowercase()) } && extraRequirements.any { message.lowercase().contains(it.lowercase()) }){ |
| 27 | + return Filter.Result.valueOf(result.name) |
| 28 | + } |
| 29 | + } |
| 30 | + |
| 31 | + return Filter.Result.NEUTRAL |
| 32 | + } |
| 33 | + |
| 34 | + /** |
| 35 | + * Registers this log filter to work with the root logger. |
| 36 | + */ |
| 37 | + fun register() { |
| 38 | + val logger = LogManager.getRootLogger() as Logger |
| 39 | + logger.addFilter(this) |
| 40 | + } |
| 41 | + |
| 42 | + override fun filter(event: LogEvent?): Filter.Result = process(event?.message?.formattedMessage) |
| 43 | + |
| 44 | + override fun filter(logger: Logger?, level: Level?, marker: Marker?, msg: Message, t: Throwable?): Filter.Result = process(msg.formattedMessage) |
| 45 | + |
| 46 | + override fun filter(logger: Logger?, level: Level?, marker: Marker?, msg: Any, t: Throwable?): Filter.Result = process(msg.toString()) |
| 47 | + |
| 48 | + override fun filter(logger: Logger?, level: Level?, marker: Marker?, msg: String?, vararg params: Any?): Filter.Result = process(msg) |
| 49 | + |
| 50 | +} |
0 commit comments