Please do open an issue. Otherwise, this will probably get lost in the mailing lists.
On 10 November 2016 at 18:33, Benjamin Jaton <benjamin.ja...@gmail.com> wrote: > I have a weird problem where using a global script seems to cause log4j to > not be able to resolve my properties any more: > > Log4j2 2.7 > > The code: > System.setProperty("log4j.configurationFile", > "/usr/local/apps/test.json"); > LogManager.getLogger(Test.class).error("test"); > > The conf: > { > "configuration" : { > "status" : "warn", > "scripts": { > "ScriptFile": { "name":"test.filter", "path": "/tmp/test.groovy" } > }, > "properties" : { > "property" : [ { > "name" : "server.log.level", > "value" : "INFO" > } ] > }, > "appenders" : { > "appender" : [ { > "type" : "Console", > "name" : "STDOUT", > "PatternLayout" : { > "pattern" : "%m (Logger log level = ${server.log.level})%n" > } > } ] > }, > "loggers" : { > "root" : { > "level" : "${server.log.level}", > "AppenderRef" : { > "ref" : "STDOUT" > } > } > } > } > } > > The output without the highlighted section: > test (Logger log level = INFO) > > The output with the highlighted section: > 2016-11-10 16:30:25,351 main WARN Error while converting string > [${server.log.level}] to type [class org.apache.logging.log4j.Level]. > Using > default value [null]. > test (Logger log level = ${server.log.level}) > > The script /tmp/test.groovy only contains "return true" > > I think I'll open a bug for this if you're ok with it. > > Thanks > Ben > > > On Thu, Nov 10, 2016 at 3:59 PM, Benjamin Jaton <benjamin.ja...@gmail.com> > wrote: > > > Ah, indeed, I have access to a variable named "logger", excellent. > > > > Here is the script I am trying to use: > > > > ------- > > import java.security.MessageDigest > > import org.apache.logging.log4j.ThreadContext > > > > def genmd5(String s) { > > MessageDigest.getInstance("MD5").digest(s.bytes). > > encodeHex().toString() > > } > > > > ThreadContext.put("md5message", genmd5(message.getFormattedMessage())) > > return true > > ------- > > > > Another question: is there a was to put the script in the JSON > > configuration file directly? > > The doc uses XML format with CDATA, but I'm not sure how that would > > translate in JSON. > > > > Thanks! > > Ben > > > > On Thu, Nov 10, 2016 at 3:49 PM, Remko Popma <remko.po...@gmail.com> > > wrote: > > > >> Can you show your script? > >> > >> Looking at the code, the documentation is wrong and the Logger object is > >> bound to variable "logger" instead. > >> > >> Which variables are available depends on which filter method is called. > >> This depends on where the filter is configured. The LogEvent is not > >> available for global filters. "logger" should be available for global > >> filters. > >> > >> https://github.com/apache/logging-log4j2/blob/master/log4j- > >> core/src/main/java/org/apache/logging/log4j/core/filter/ > ScriptFilter.java > >> > >> > >> > >> > >> Sent from my iPhone > >> > >> > On 11 Nov 2016, at 7:15, Benjamin Jaton <benjamin.ja...@gmail.com> > >> wrote: > >> > > >> > Sure, here it is: > >> > > >> > { > >> > "configuration" : { > >> > "status" : "warn", > >> > "scripts": { > >> > "ScriptFile": { "name":"test.filter", "path": > >> > "/usr/local/apps/test.groovy" } > >> > }, > >> > "ScriptFilter": { > >> > "onMatch": "ACCEPT", > >> > "onMisMatch": "DENY", > >> > "ScriptRef": { "ref": "test.filter" } > >> > }, > >> > "appenders" : { > >> > "appender" : [ { > >> > "type" : "Console", > >> > "name" : "STDOUT", > >> > "PatternLayout" : { > >> > "pattern" : "%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1.}:%L - > >> > [%X{md5message}] %m%n" > >> > } > >> > } ] > >> > }, > >> > "loggers" : { > >> > "root" : { > >> > "level" : "INFO", > >> > "additivity" : "false", > >> > "includeLocation" : "true", > >> > "AppenderRef" : { > >> > "ref" : "STDOUT" > >> > } > >> > } > >> > } > >> > } > >> > } > >> > > >> >> On Thu, Nov 10, 2016 at 9:01 AM, Remko Popma <remko.po...@gmail.com> > >> wrote: > >> >> > >> >> Can you show your configuration? > >> >> > >> >> Sent from my iPhone > >> >> > >> >>>> On 11 Nov 2016, at 1:56, Benjamin Jaton <benjamin.ja...@gmail.com> > >> >>> wrote: > >> >>> > >> >>> I tried all the variables in the doc, no luck: > >> >>> > >> >>> Caused by: groovy.lang.MissingPropertyException: No such property: > >> >>> loggerName for class: Script2 > >> >>> at > >> >>> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap( > >> >> ScriptBytecodeAdapter.java:53) > >> >>> at > >> >>> org.codehaus.groovy.runtime.callsite.PogoGetPropertySite. > getProperty( > >> >> PogoGetPropertySite.java:52) > >> >>> at > >> >>> org.codehaus.groovy.runtime.callsite.AbstractCallSite. > >> >> callGroovyObjectGetProperty(AbstractCallSite.java:307) > >> >>> at Script2.run(Script2.groovy:8) > >> >>> at > >> >>> org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval( > >> >> GroovyScriptEngineImpl.java:343) > >> >>> ... 12 more > >> >>> > >> >>>> On Wed, Nov 9, 2016 at 10:54 PM, Remko Popma < > remko.po...@gmail.com> > >> >> wrote: > >> >>>> > >> >>>> According to this https://logging.apache.org/ > >> >>>> log4j/2.x/manual/filters.html#Script you should be able to use the > >> >>>> variable named loggerName in global script filters. > >> >>>> > >> >>>> Sent from my iPhone > >> >>>> > >> >>>>>> On 10 Nov 2016, at 4:31, Benjamin Jaton < > benjamin.ja...@gmail.com> > >> >>>>> wrote: > >> >>>>> > >> >>>>> Hmm, I'm not sure, I tried to do this in groovy: > >> >>>>> > >> >>>>> println(args[0]) > >> >>>>> > >> >>>>> But I get: > >> >>>>> Caused by: groovy.lang.MissingPropertyException: No such > property: > >> >> args > >> >>>> for > >> >>>>> class: Script2 > >> >>>>> at > >> >>>>> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap( > >> >>>> ScriptBytecodeAdapter.java:53) > >> >>>>> at > >> >>>>> org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.get > >> Property( > >> >>>> PogoGetPropertySite.java:52) > >> >>>>> at > >> >>>>> org.codehaus.groovy.runtime.callsite.AbstractCallSite. > >> >>>> callGroovyObjectGetProperty(AbstractCallSite.java:307) > >> >>>>> at Script2.run(Script2.groovy:8) > >> >>>>> at > >> >>>>> org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval( > >> >>>> GroovyScriptEngineImpl.java:343) > >> >>>>> ... 12 more > >> >>>>> > >> >>>>> Then I tried: > >> >>>>> > >> >>>>> println(parameters) > >> >>>>> > >> >>>>> But it returns 'null' > >> >>>>> > >> >>>>>> On Tue, Nov 8, 2016 at 5:18 PM, Remko Popma < > remko.po...@gmail.com > >> > > >> >>>> wrote: > >> >>>>>> > >> >>>>>> All filter methods have a Logger object as the first parameter. > Can > >> >> you > >> >>>>>> use that? > >> >>>>>> > >> >>>>>> Sent from my iPhone > >> >>>>>> > >> >>>>>>> On 9 Nov 2016, at 9:45, Benjamin Jaton < > benjamin.ja...@gmail.com> > >> >>>> wrote: > >> >>>>>>> > >> >>>>>>> As far as I know, there is no way for a global filter to know > >> which > >> >>>>>> logger > >> >>>>>>> we're working it for. > >> >>>>>>> Which in my case is not the best since I would compute a hash > for > >> all > >> >>>> the > >> >>>>>>> messages of all my loggers, instead of just the one I need them > >> for. > >> >>>>>>> > >> >>>>>>> On Tue, Nov 8, 2016 at 4:30 PM, Benjamin Jaton < > >> >>>> benjamin.ja...@gmail.com > >> >>>>>>> > >> >>>>>>> wrote: > >> >>>>>>> > >> >>>>>>>> Ah, I can't use 'logEvent' but I can use 'message', perfect, > >> thank > >> >>>> you! > >> >>>>>>>> > >> >>>>>>>>> On Tue, Nov 8, 2016 at 4:21 PM, Remko Popma < > >> remko.po...@gmail.com > >> >>> > >> >>>>>> wrote: > >> >>>>>>>>> > >> >>>>>>>>> Yes Filters can be applied at different stages of the logging > >> >>>> pipeline. > >> >>>>>>>>> The Filter interface has separate methods for these stages. > >> >> Different > >> >>>>>>>>> parameters are passed to these methods. > >> >>>>>>>>> > >> >>>>>>>>> Sent from my iPhone > >> >>>>>>>>> > >> >>>>>>>>>>> On 9 Nov 2016, at 8:57, Benjamin Jaton < > >> benjamin.ja...@gmail.com> > >> >>>>>>>>>> wrote: > >> >>>>>>>>>> > >> >>>>>>>>>> Ah, interesting. I seem to be able to make modification using > >> this > >> >>>>>>>>> global > >> >>>>>>>>>> filter. > >> >>>>>>>>>> > >> >>>>>>>>>> However I don't seem to have access to the log event that > way? > >> >>>>>>>>>> > >> >>>>>>>>>> Caused by: groovy.lang.MissingPropertyException: No such > >> >> property: > >> >>>>>>>>> logEvent > >> >>>>>>>>>> for class: Script2 > >> >>>>>>>>>> at > >> >>>>>>>>>> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(Scr > >> >>>>>>>>> iptBytecodeAdapter.java:53) > >> >>>>>>>>>> at > >> >>>>>>>>>> org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.get > >> >>>>>>>>> Property(PogoGetPropertySite.java:52) > >> >>>>>>>>>> at > >> >>>>>>>>>> org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGr > >> >>>>>>>>> oovyObjectGetProperty(AbstractCallSite.java:307) > >> >>>>>>>>>> at Script2.run(Script2.groovy:8) > >> >>>>>>>>>> at > >> >>>>>>>>>> org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(Groov > >> >>>>>>>>> yScriptEngineImpl.java:343) > >> >>>>>>>>>> ... 12 more > >> >>>>>>>>>> > >> >>>>>>>>>>> On Tue, Nov 8, 2016 at 3:47 PM, Remko Popma < > >> >> remko.po...@gmail.com > >> >>>>> > >> >>>>>>>>> wrote: > >> >>>>>>>>>>> > >> >>>>>>>>>>> If you make it a global filter it will get applied before > the > >> >>>>>> LogEvent > >> >>>>>>>>> is > >> >>>>>>>>>>> constructed. Please try that. > >> >>>>>>>>>>> > >> >>>>>>>>>>> Remko > >> >>>>>>>>>>> > >> >>>>>>>>>>> Sent from my iPhone > >> >>>>>>>>>>> > >> >>>>>>>>>>>> On 9 Nov 2016, at 7:02, Benjamin Jaton < > >> >> benjamin.ja...@gmail.com> > >> >>>>>>>>> wrote: > >> >>>>>>>>>>>> > >> >>>>>>>>>>>> I am applying it on the root logger. > >> >>>>>>>>>>>> > >> >>>>>>>>>>>>> On Tue, Nov 8, 2016 at 12:47 PM, Matt Sicker < > >> boa...@gmail.com > >> >>> > >> >>>>>>>>> wrote: > >> >>>>>>>>>>>>> > >> >>>>>>>>>>>>> Where are you applying the filter? On the appender or > >> somewhere > >> >>>>>> else? > >> >>>>>>>>>>>>> > >> >>>>>>>>>>>>> On 8 November 2016 at 13:13, Benjamin Jaton < > >> >>>>>>>>> benjamin.ja...@gmail.com> > >> >>>>>>>>>>>>> wrote: > >> >>>>>>>>>>>>> > >> >>>>>>>>>>>>>> hello, > >> >>>>>>>>>>>>>> > >> >>>>>>>>>>>>>> I was playing with log4j2 filters to generate a hash in > >> groovy > >> >>>>>> that > >> >>>>>>>>> I > >> >>>>>>>>>>>>> would > >> >>>>>>>>>>>>>> put in the threadcontext map, and then use in my log > >> pattern: > >> >>>>>>>>>>>>>> > >> >>>>>>>>>>>>>> %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1.}:%L - %m [%X{myhash}] > >> >>>>>>>>>>>>>> > >> >>>>>>>>>>>>>> But the hash is printed on the NEXT log message. > >> >>>>>>>>>>>>>> My understanding is that at this point the log message is > >> >>>> already > >> >>>>>>>>>>>>> formatted > >> >>>>>>>>>>>>>> and final. > >> >>>>>>>>>>>>>> > >> >>>>>>>>>>>>>> Is there another way I can use a custom script where the > >> log > >> >>>> event > >> >>>>>>>>> can > >> >>>>>>>>>>>>>> actually be modified? > >> >>>>>>>>>>>>>> > >> >>>>>>>>>>>>>> Thanks, > >> >>>>>>>>>>>>>> Ben > >> >>>>>>>>>>>>> > >> >>>>>>>>>>>>> > >> >>>>>>>>>>>>> > >> >>>>>>>>>>>>> -- > >> >>>>>>>>>>>>> Matt Sicker <boa...@gmail.com> > >> >>>>>>>>>>> > >> >>>>>>>>>>> ------------------------------ > ------------------------------ > >> >>>>>> --------- > >> >>>>>>>>>>> To unsubscribe, e-mail: log4j-user-unsubscribe@ > >> >> logging.apache.org > >> >>>>>>>>>>> For additional commands, e-mail: log4j-user-help@logging. > >> >>>> apache.org > >> >>>>>>>>> > >> >>>>>>>>> ------------------------------------------------------------ > >> >>>> --------- > >> >>>>>>>>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging > >> .apache.org > >> >>>>>>>>> For additional commands, e-mail: log4j-user-help@logging. > >> >> apache.org > >> >>>>>> > >> >>>>>> ------------------------------------------------------------ > >> --------- > >> >>>>>> To unsubscribe, e-mail: log4j-user-unsubscribe@ > logging.apache.org > >> >>>>>> For additional commands, e-mail: log4j-user-help@logging.apache > >> .org > >> >> > >> >> ------------------------------------------------------------ > --------- > >> >> To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org > >> >> For additional commands, e-mail: log4j-user-h...@logging.apache.org > >> >> > >> >> > >> > > > > > -- Matt Sicker <boa...@gmail.com>