eclipse-ee4j / angus-mail

Angus Mail
https://eclipse-ee4j.github.io/angus-mail
Other
56 stars 16 forks source link

WildFly support for MailHandler #110

Closed jmehrens closed 11 months ago

jmehrens commented 1 year ago

The MailHandler only supports setting mail properties through a properties object. Per the WildFly docs: All properties must be accessible via a setter method.

See also:

In order to support WildFly, one option would be to add a new public method that takes a string that is the path to a resource which then loads the properties file. Just need to verify that WildFly allows this. This would be the preferred option as it would be useful for loading the logging.properties as mail properties when using the standard LogManager.

Another option would be to create a new method which takes a string that can be parsed as the contents of properties file. Splitting string key/value pairs where semicolon is used to delimit the entries would be one option assuming that is not used in any other property values. Need to look at:

  1. Adding a new method setMailProperties(String). This would clear and set the new properties. Name might have to change if overloads don't work correctly..
  2. Adding a new method setMailEntries(String). This would simply add new properties without removing existing ones.
  3. Consider adding getter methods for these.
  4. Determine if the setAuthenticator(char[]) can be used in WildFly.
  5. Might need to adjust the behavior of setAuthenticator to perform a classname lookup.

Final option to consider would be adding property setters for Jakarta Mail API properties and Angus SMTP provider properties.

Things to consider before implementing this change are:

  1. This option has a lot of code smell.
  2. This will only add support for Angus SMTP even though other providers could be loaded instead.
  3. The number of public methods could grow out of hand.
  4. There would now be multiple ways to set properties.
  5. Every time a new property is defined in the API or SMTP provider we would have to consider if that property needs to be converted into a setter method.
  6. Order of when these properties are set will matter to ensure the correct protocol (smtp vs. smtps) is used. It also matters that the verify type is set last.

List of properties from API (draft):

  1. mail.debug
  2. mail.from
  3. mail.protocol.host
  4. mail.transport.protocol
  5. mail.user
  6. mail.protocol.port
  7. mail.mime.allowutf8

List of properties from Angus (draft):

  1. mail.smtp.connectiontimeout
  2. mail.smtp.timeout
  3. mail.smtp.auth
  4. mail.smtp.auth.mechanisms
  5. mail.smtp.ssl.enable
  6. mail.smtp.starttls.enable

List of properties from MailHandler (draft)

  1. authenticator
  2. mail.to
  3. mail.sender
  4. mail.bcc
  5. mail.cc
  6. mail.reply.to
  7. mail.sender
  8. verify
jmehrens commented 1 year ago

Created new WildFly module:

module add --name=org.eclipse.angus.logging-mailhandler --resources=~/logging-mailhandler-2.0.3-SNAPSHOT.jar --dependencies=jakarta.activation.api,jakarta.mail.api,org.eclipse.angus.activation,org.eclipse.angus.mail

MailHandler is unable to see org.eclipse.angus.activation:

15:00:18,149 ERROR [org.jboss.as.controller.management-operation] (External Management Request Threads -- 2) WFLYCTL0013: Operation ("add") failed - address: ([
    ("subsystem" => "logging"),
    ("custom-handler" => "MAILHANDLER")
]): java.lang.IllegalArgumentException: Failed to instantiate class "org.eclipse.angus.mail.util.logging.MailHandler" for handler "MAILHANDLER"
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$ConstructAction.lambda$validate$2(AbstractPropertyConfiguration.java:122)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.WrappedAction.execute(WrappedAction.java:47)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$ConstructAction.validate(AbstractPropertyConfiguration.java:118)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.doPrepare(LogContextConfigurationImpl.java:336)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.prepare(LogContextConfigurationImpl.java:289)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.logmanager.ConfigurationPersistence.prepare(ConfigurationPersistence.java:299)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.LoggingOperations$CommitOperationStepHandler.lambda$execute$0(LoggingOperations.java:131)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:1064)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.processStages(AbstractOperationContext.java:785)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:476)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.OperationContextImpl.executeOperation(OperationContextImpl.java:1455)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.internalExecute(ModelControllerImpl.java:449)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.lambda$executeForResponse$0(ModelControllerImpl.java:259)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:304)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:270)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.executeForResponse(ModelControllerImpl.java:259)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.executeOperation(ModelControllerImpl.java:253)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.execute(ModelControllerImpl.java:236)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.DomainApiHandler.handleRequest(DomainApiHandler.java:213)
    at io.undertow.core@2.3.7.Final//io.undertow.server.handlers.encoding.EncodingHandler.handleRequest(EncodingHandler.java:72)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.DomainApiCheckHandler.handleRequest(DomainApiCheckHandler.java:91)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.security.ElytronIdentityHandler.lambda$handleRequest$0(ElytronIdentityHandler.java:62)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:328)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:285)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:254)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:225)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.security.ElytronIdentityHandler.handleRequest(ElytronIdentityHandler.java:61)
    at io.undertow.core@2.3.7.Final//io.undertow.server.handlers.BlockingHandler.handleRequest(BlockingHandler.java:56)
    at io.undertow.core@2.3.7.Final//io.undertow.server.Connectors.executeRootHandler(Connectors.java:393)
    at io.undertow.core@2.3.7.Final//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:859)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
    at java.base/java.lang.Thread.run(Thread.java:833)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513)
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$ConstructAction.lambda$validate$2(AbstractPropertyConfiguration.java:120)
    ... 35 more
Caused by: java.lang.RuntimeException: Provider for jakarta.activation.spi.MimeTypeRegistryProvider cannot be found
    at jakarta.activation.api//jakarta.activation.FactoryFinder.find(FactoryFinder.java:95)
    at jakarta.activation.api//jakarta.activation.MimetypesFileTypeMap.getImplementation(MimetypesFileTypeMap.java:397)
    at jakarta.activation.api//jakarta.activation.MimetypesFileTypeMap.loadFile(MimetypesFileTypeMap.java:270)
    at jakarta.activation.api//jakarta.activation.MimetypesFileTypeMap.<init>(MimetypesFileTypeMap.java:107)
    at jakarta.activation.api//jakarta.activation.FileTypeMap.getDefaultFileTypeMap(FileTypeMap.java:110)
    at org.eclipse.angus.mail//org.eclipse.angus.mail.util.logging.MailHandler.init(MailHandler.java:2112)
    at org.eclipse.angus.mail//org.eclipse.angus.mail.util.logging.MailHandler.<init>(MailHandler.java:565)
    ... 41 more

I might have to add all resource jars when the module is created.

RESOLUTION: This was due to not adding the 4 jars required for the MailHandler in the module add command.

module add --name=org.eclipse.angus.logging-mailhandler --resource-delimiter=; --resources=~/jaf-api/api/target/jakarta.activation-api-2.2.0-SNAPSHOT.jar;~/mail/api/target/jakarta.mail-api-2.1.3-SNAPSHOT.jar;~/angus-activation/activation-registry/target/angus-activation-2.1.0-SNAPSHOT.jar;~/angus-mail/providers/angus-mail/target/angus-mail-2.0.3-SNAPSHOT.jar --dependencies=jakarta.activation.api,jakarta.mail.api,org.eclipse.angus.activation,org.eclipse.angus.mail,org.jboss.modules,java.logging,org.jboss.logging
jmehrens commented 1 year ago

Clearing properties uses default values 0 and null:

16:50:39,878 INFO  [org.jboss.ws.common.management] (MSC service thread 1-3) JBWS022052: Starting JBossWS 6.2.0.Final (Apache CXF 4.0.0) 
java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$2.lambda$applyPostCreate$1(AbstractPropertyConfiguration.java:302)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.WrappedAction.execute(WrappedAction.java:66)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$2.applyPostCreate(AbstractPropertyConfiguration.java:299)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$2.applyPostCreate(AbstractPropertyConfiguration.java:283)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.doApplyPostCreate(LogContextConfigurationImpl.java:313)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.doPrepare(LogContextConfigurationImpl.java:345)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.prepare(LogContextConfigurationImpl.java:289)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.logmanager.ConfigurationPersistence.prepare(ConfigurationPersistence.java:299)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.LoggingOperations$CommitOperationStepHandler.lambda$execute$0(LoggingOperations.java:131)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:1064)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.processStages(AbstractOperationContext.java:785)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:476)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.OperationContextImpl.executeOperation(OperationContextImpl.java:1455)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.boot(ModelControllerImpl.java:562)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractControllerService.boot(AbstractControllerService.java:460)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractControllerService.boot(AbstractControllerService.java:431)
    at org.jboss.as.server@21.1.1.Final//org.jboss.as.server.ServerService.boot(ServerService.java:466)
    at org.jboss.as.server@21.1.1.Final//org.jboss.as.server.ServerService.boot(ServerService.java:408)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractControllerService$1.run(AbstractControllerService.java:370)
    at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.NullPointerException
    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.setMailProperties(MailHandler.java:1442)
    ... 24 more
Failed to invoke setter setCapacity with value 0
.java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$2.lambda$applyPostCreate$1(AbstractPropertyConfiguration.java:302)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.WrappedAction.execute(WrappedAction.java:66)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$2.applyPostCreate(AbstractPropertyConfiguration.java:299)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$2.applyPostCreate(AbstractPropertyConfiguration.java:283)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.doApplyPostCreate(LogContextConfigurationImpl.java:313)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.doPrepare(LogContextConfigurationImpl.java:345)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.prepare(LogContextConfigurationImpl.java:289)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.logmanager.ConfigurationPersistence.prepare(ConfigurationPersistence.java:299)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.LoggingOperations$CommitOperationStepHandler.lambda$execute$0(LoggingOperations.java:131)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:1064)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.processStages(AbstractOperationContext.java:785)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:476)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.OperationContextImpl.executeOperation(OperationContextImpl.java:1455)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.boot(ModelControllerImpl.java:562)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractControllerService.boot(AbstractControllerService.java:460)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractControllerService.boot(AbstractControllerService.java:431)
    at org.jboss.as.server@21.1.1.Final//org.jboss.as.server.ServerService.boot(ServerService.java:466)
    at org.jboss.as.server@21.1.1.Final//org.jboss.as.server.ServerService.boot(ServerService.java:408)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractControllerService$1.run(AbstractControllerService.java:370)
    at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.IllegalArgumentException: Capacity must be greater than zero.
    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.setCapacity0(MailHandler.java:2067)
    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.setCapacity(MailHandler.java:1302)
    ... 24 more
16:50:40,059 INFO  [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0212: Resuming server
jmehrens commented 1 year ago

Need to troubleshoot the following:

java.util.logging.ErrorManager: 1: SEVERE: Not provider of jakarta.mail.util.StreamProvider was found
java.lang.IllegalStateException: Not provider of jakarta.mail.util.StreamProvider was found
    at org.eclipse.angus.logging-mailhandler//jakarta.mail.util.FactoryFinder.find(FactoryFinder.java:61)
    at org.eclipse.angus.logging-mailhandler//jakarta.mail.util.StreamProvider.provider(StreamProvider.java:199)
    at org.eclipse.angus.logging-mailhandler//jakarta.mail.Session.<init>(Session.java:256)
    at org.eclipse.angus.logging-mailhandler//jakarta.mail.Session.getInstance(Session.java:309)
    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.initSession(MailHandler.java:3726)
    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.writeLogRecords0(MailHandler.java:3096)
    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.writeLogRecords(MailHandler.java:3065)
    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.publish0(MailHandler.java:712)
    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.publish(MailHandler.java:676)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:333)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:341)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:341)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:341)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.Logger.logRaw(Logger.java:852)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.Logger.logRaw(Logger.java:862)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.Logger.log(Logger.java:395)
    at org.jboss.modules.log.JDKModuleLogger.doLog(JDKModuleLogger.java:102)
    at org.jboss.modules.log.JDKModuleLogger.greeting(JDKModuleLogger.java:175)
    at org.jboss.modules.Module.setModuleLogger(Module.java:1148)
    at org.jboss.modules.Main.main(Main.java:447)

RESOLUTION: This was due to not setting the CCL during session init.

jmehrens commented 1 year ago

Must be a test case that is not covered in the test suite for CompactFormatter:

00:32:55,819 ERROR [stderr] (MSC service thread 1-2) java.util.logging.ErrorManager: 5: SEVERE: Format specifier '%s'
00:32:55,847 ERROR [stderr] (MSC service thread 1-2) java.util.MissingFormatArgumentException: Format specifier '%s'
00:32:55,849 ERROR [stderr] (MSC service thread 1-2)    at java.base/java.util.Formatter.format(Formatter.java:2688)
00:32:55,851 ERROR [stderr] (MSC service thread 1-2)    at java.base/java.util.Formatter.format(Formatter.java:2625)
00:32:55,876 ERROR [stderr] (MSC service thread 1-2)    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.CompactFormatter$Alternate.formatTo(CompactFormatter.java:838)
00:32:55,883 ERROR [stderr] (MSC service thread 1-2)    at java.base/java.util.Formatter$FormatSpecifier.printString(Formatter.java:3049)
00:32:55,884 ERROR [stderr] (MSC service thread 1-2)    at java.base/java.util.Formatter$FormatSpecifier.print(Formatter.java:2933)
00:32:55,896 ERROR [stderr] (MSC service thread 1-2)    at java.base/java.util.Formatter.format(Formatter.java:2695)
00:32:55,900 ERROR [stderr] (MSC service thread 1-2)    at java.base/java.util.Formatter.format(Formatter.java:2625)
00:32:55,919 ERROR [stderr] (MSC service thread 1-2)    at java.base/java.lang.String.format(String.java:4141)
00:32:55,922 ERROR [stderr] (MSC service thread 1-2)    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.CompactFormatter.format(CompactFormatter.java:244)
00:32:55,926 ERROR [stderr] (MSC service thread 1-2)    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.CollectorFormatter.formatRecord(CollectorFormatter.java:441)
00:32:55,928 ERROR [stderr] (MSC service thread 1-2)    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.CollectorFormatter.getTail(CollectorFormatter.java:307)
00:32:55,930 ERROR [stderr] (MSC service thread 1-2)    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.tail(MailHandler.java:4088)
00:32:55,932 ERROR [stderr] (MSC service thread 1-2)    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.writeLogRecords0(MailHandler.java:3160)
00:32:55,934 ERROR [stderr] (MSC service thread 1-2)    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.writeLogRecords(MailHandler.java:3010)
00:32:55,936 ERROR [stderr] (MSC service thread 1-2)    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.publish0(MailHandler.java:714)
00:32:55,938 ERROR [stderr] (MSC service thread 1-2)    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.publish(MailHandler.java:678)
00:32:55,949 ERROR [stderr] (MSC service thread 1-2)    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:333)
00:32:55,952 ERROR [stderr] (MSC service thread 1-2)    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:341)
00:32:55,973 ERROR [stderr] (MSC service thread 1-2)    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:341)
00:32:55,975 ERROR [stderr] (MSC service thread 1-2)    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:341)
00:32:55,977 ERROR [stderr] (MSC service thread 1-2)    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.Logger.logRaw(Logger.java:852)
00:32:55,981 ERROR [stderr] (MSC service thread 1-2)    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.Logger.log(Logger.java:804)
00:32:55,984 ERROR [stderr] (MSC service thread 1-2)    at org.jboss.logging@3.4.3.Final//org.jboss.logging.JBossLogManagerLogger.doLogf(JBossLogManagerLogger.java:53)
00:32:55,986 ERROR [stderr] (MSC service thread 1-2)    at org.jboss.logging@3.4.3.Final//org.jboss.logging.Logger.infof(Logger.java:1136)
00:32:55,988 ERROR [stderr] (MSC service thread 1-2)    at org.jboss.remoting@5.0.27.Final//org.jboss.remoting3.EndpointImpl.<clinit>(EndpointImpl.java:99)
00:32:55,990 ERROR [stderr] (MSC service thread 1-2)    at org.jboss.remoting@5.0.27.Final//org.jboss.remoting3.EndpointBuilder.lambda$build$0(EndpointBuilder.java:162)
00:32:55,992 ERROR [stderr] (MSC service thread 1-2)    at java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
00:32:55,995 ERROR [stderr] (MSC service thread 1-2)    at org.jboss.remoting@5.0.27.Final//org.jboss.remoting3.EndpointBuilder.build(EndpointBuilder.java:162)
00:32:55,997 ERROR [stderr] (MSC service thread 1-2)    at org.jboss.as.remoting@21.1.1.Final//org.jboss.as.remoting.EndpointService.start(EndpointService.java:71)
00:32:56,000 ERROR [stderr] (MSC service thread 1-2)    at org.jboss.msc@1.5.1.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1617)
00:32:56,003 ERROR [stderr] (MSC service thread 1-2)    at org.jboss.msc@1.5.1.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1580)
00:32:56,006 ERROR [stderr] (MSC service thread 1-2)    at org.jboss.msc@1.5.1.Final//org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1438)
00:32:56,008 ERROR [stderr] (MSC service thread 1-2)    at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
00:32:56,010 ERROR [stderr] (MSC service thread 1-2)    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
00:32:56,011 ERROR [stderr] (MSC service thread 1-2)    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
00:32:56,014 ERROR [stderr] (MSC service thread 1-2)    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
00:32:56,016 ERROR [stderr] (MSC service thread 1-2)    at java.base/java.lang.Thread.run(Thread.java:833)

RESOLUTION: A new ticket needs to be created so the CompactFormatter doesn't call format but instead calls formatter.out().append. This is an existing bug in the CompactFormatter.

The test case that is missing is: WFLYELY00023: KeyStore file '%s' does not exist. Used blank.

There is another issue where the %s wasn't replaced with the correct file path. I think this is an issue where WildFly is not replacing tokens. The workaround is to allow CompactFormatter to replace the tokens.

jmehrens commented 1 year ago

It seems that org.jboss.logmanager.config.LogContextConfigurationImpl.getValue is unable to understand overloaded methods such as setSubject

Failed to read or configure the org.jboss.logmanager.LogManager
java.lang.IllegalArgumentException: No formatter named "Alert_from_WildFly" is defined
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.getValue(LogContextConfigurationImpl.java:420)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.lambda$validate$0(AbstractPropertyConfiguration.java:213)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.WrappedAction.execute(WrappedAction.java:47)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.validate(AbstractPropertyConfiguration.java:208)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.validate(AbstractPropertyConfiguration.java:203)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.doPrepare(LogContextConfigurationImpl.java:336)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.prepare(LogContextConfigurationImpl.java:289)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.commit(LogContextConfigurationImpl.java:298)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.PropertyConfigurator.configure(PropertyConfigurator.java:546)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.PropertyConfigurator.configure(PropertyConfigurator.java:97)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.LogManager.readConfiguration(LogManager.java:170)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.LogManager.readConfiguration(LogManager.java:132)
    at java.logging/java.util.logging.LogManager.readPrimordialConfiguration(LogManager.java:446)
    at java.logging/java.util.logging.LogManager$2.run(LogManager.java:395)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
    at java.logging/java.util.logging.LogManager.ensureLogManagerInitialized(LogManager.java:383)
    at java.logging/java.util.logging.LogManager.getLogManager(LogManager.java:431)
    at org.jboss.modules.Main.main(Main.java:444)

Need to test if a pattern formatter can be setup to create a literal subject.

RESOLUTION: A named formatter can be used to set the subject on the MailHandler. The CompactFormatter and CollectorFormatter need to be modified.

jmehrens commented 1 year ago

WildFly locates setAuthenticator(Authenticator) instead of setAuthenticator(char...) and is unable to set a password string.

https://github.com/jboss-logging/jboss-logmanager/blob/7afd61a77c4cf2ffdf9c78d06ad636d4a62efd0f/src/main/java/org/jboss/logmanager/configuration/ObjectBuilder.java#L262

21:55:35,845 ERROR [org.jboss.as.controller.management-operation] (External Management Request Threads -- 1) WFLYCTL0013: Operation ("write-attribute") failed - address: ([
    ("subsystem" => "logging"),
    ("custom-handler" => "MAIL")
]): java.lang.IllegalArgumentException: Unknown parameter type for property authenticator on class org.eclipse.angus.mail.util.logging.MailHandler
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.getValue(LogContextConfigurationImpl.java:465)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.lambda$validate$0(AbstractPropertyConfiguration.java:213)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.WrappedAction.execute(WrappedAction.java:47)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.validate(AbstractPropertyConfiguration.java:208)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.validate(AbstractPropertyConfiguration.java:203)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.doPrepare(LogContextConfigurationImpl.java:336)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.prepare(LogContextConfigurationImpl.java:289)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.logmanager.ConfigurationPersistence.prepare(ConfigurationPersistence.java:299)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.LoggingOperations$CommitOperationStepHandler.lambda$execute$0(LoggingOperations.java:131)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:1064)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.processStages(AbstractOperationContext.java:785)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:476)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.OperationContextImpl.executeOperation(OperationContextImpl.java:1455)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.internalExecute(ModelControllerImpl.java:449)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.lambda$executeForResponse$0(ModelControllerImpl.java:259)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:304)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:270)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.executeForResponse(ModelControllerImpl.java:259)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.executeOperation(ModelControllerImpl.java:253)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.execute(ModelControllerImpl.java:236)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.DomainApiHandler.handleRequest(DomainApiHandler.java:213)
    at io.undertow.core@2.3.7.Final//io.undertow.server.handlers.encoding.EncodingHandler.handleRequest(EncodingHandler.java:72)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.DomainApiCheckHandler.handleRequest(DomainApiCheckHandler.java:91)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.security.ElytronIdentityHandler.lambda$handleRequest$0(ElytronIdentityHandler.java:62)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:328)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:285)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:254)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:225)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.security.ElytronIdentityHandler.handleRequest(ElytronIdentityHandler.java:61)
    at io.undertow.core@2.3.7.Final//io.undertow.server.handlers.BlockingHandler.handleRequest(BlockingHandler.java:56)
    at io.undertow.core@2.3.7.Final//io.undertow.server.Connectors.executeRootHandler(Connectors.java:393)
    at io.undertow.core@2.3.7.Final//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:859)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1348)
    at java.base/java.lang.Thread.run(Thread.java:833)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513)

RESOLUTION: Created https://issues.redhat.com/browse/LOGMGR-340 Need to consider creating a new method in the MailHandler to accept a String for Authenticator. This should allow a literal or a classname.

TODO: need to test if POJO options can be used in WildFly to create a custom Authenticator and then set the property.

jmehrens commented 1 year ago

Comparator can not be created. Therefore must add string argument method with a unique name.

12:53:47,457 ERROR [org.jboss.as.controller.management-operation] (External Management Request Threads -- 2) WFLYCTL0013: Operation ("write-attribute") failed - address: ([
    ("subsystem" => "logging"),
    ("custom-handler" => "MAIL")
]): java.lang.IllegalArgumentException: Unknown parameter type for property comparator on class org.eclipse.angus.mail.util.logging.MailHandler
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.getValue(LogContextConfigurationImpl.java:465)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.lambda$validate$0(AbstractPropertyConfiguration.java:213)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.WrappedAction.execute(WrappedAction.java:47)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.validate(AbstractPropertyConfiguration.java:208)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.validate(AbstractPropertyConfiguration.java:203)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.doPrepare(LogContextConfigurationImpl.java:336)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.prepare(LogContextConfigurationImpl.java:289)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.logmanager.ConfigurationPersistence.prepare(ConfigurationPersistence.java:299)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.LoggingOperations$CommitOperationStepHandler.lambda$execute$0(LoggingOperations.java:131)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:1064)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.processStages(AbstractOperationContext.java:785)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:476)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.OperationContextImpl.executeOperation(OperationContextImpl.java:1455)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.internalExecute(ModelControllerImpl.java:449)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.lambda$executeForResponse$0(ModelControllerImpl.java:259)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:304)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:270)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.executeForResponse(ModelControllerImpl.java:259)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.executeOperation(ModelControllerImpl.java:253)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.execute(ModelControllerImpl.java:236)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.DomainApiHandler.handleRequest(DomainApiHandler.java:213)
    at io.undertow.core@2.3.7.Final//io.undertow.server.handlers.encoding.EncodingHandler.handleRequest(EncodingHandler.java:72)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.DomainApiCheckHandler.handleRequest(DomainApiCheckHandler.java:91)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.security.ElytronIdentityHandler.lambda$handleRequest$0(ElytronIdentityHandler.java:62)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:328)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:285)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:254)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:225)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.security.ElytronIdentityHandler.handleRequest(ElytronIdentityHandler.java:61)
    at io.undertow.core@2.3.7.Final//io.undertow.server.handlers.BlockingHandler.handleRequest(BlockingHandler.java:56)
    at io.undertow.core@2.3.7.Final//io.undertow.server.Connectors.executeRootHandler(Connectors.java:393)
    at io.undertow.core@2.3.7.Final//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:859)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
    at java.base/java.lang.Thread.run(Thread.java:833)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513)

This needs to be a ticket of its own. It would be nice to support a syntax like method references to build comparator chain on the MailHandler and the CollectorFormatter.

jmehrens commented 1 year ago

Push filter can't be set either. However, I should be able to create a named filter and assign that.

13:16:07,341 ERROR [org.jboss.as.controller.management-operation] (External Management Request Threads -- 2) WFLYCTL0013: Operation ("write-attribute") failed - address: ([
    ("subsystem" => "logging"),
    ("custom-handler" => "MAIL")
]): java.lang.IllegalArgumentException: No filter named "org" is defined
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.parseFilterExpression(LogContextConfigurationImpl.java:668)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.resolveFilter(LogContextConfigurationImpl.java:731)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.getValue(LogContextConfigurationImpl.java:417)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.lambda$validate$0(AbstractPropertyConfiguration.java:213)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.WrappedAction.execute(WrappedAction.java:47)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.validate(AbstractPropertyConfiguration.java:208)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.validate(AbstractPropertyConfiguration.java:203)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.doPrepare(LogContextConfigurationImpl.java:336)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.prepare(LogContextConfigurationImpl.java:289)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.logmanager.ConfigurationPersistence.prepare(ConfigurationPersistence.java:299)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.LoggingOperations$CommitOperationStepHandler.lambda$execute$0(LoggingOperations.java:131)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:1064)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.processStages(AbstractOperationContext.java:785)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:476)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.OperationContextImpl.executeOperation(OperationContextImpl.java:1455)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.internalExecute(ModelControllerImpl.java:449)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.lambda$executeForResponse$0(ModelControllerImpl.java:259)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:304)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:270)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.executeForResponse(ModelControllerImpl.java:259)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.executeOperation(ModelControllerImpl.java:253)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.execute(ModelControllerImpl.java:236)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.DomainApiHandler.handleRequest(DomainApiHandler.java:213)
    at io.undertow.core@2.3.7.Final//io.undertow.server.handlers.encoding.EncodingHandler.handleRequest(EncodingHandler.java:72)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.DomainApiCheckHandler.handleRequest(DomainApiCheckHandler.java:91)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.security.ElytronIdentityHandler.lambda$handleRequest$0(ElytronIdentityHandler.java:62)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:328)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:285)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:254)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:225)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.security.ElytronIdentityHandler.handleRequest(ElytronIdentityHandler.java:61)
    at io.undertow.core@2.3.7.Final//io.undertow.server.handlers.BlockingHandler.handleRequest(BlockingHandler.java:56)
    at io.undertow.core@2.3.7.Final//io.undertow.server.Connectors.executeRootHandler(Connectors.java:393)
    at io.undertow.core@2.3.7.Final//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:859)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
    at java.base/java.lang.Thread.run(Thread.java:833)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513)

RESOLUTION: Creating a named filter using jboss-cli allows installing a pushFilter.

/subsystem=logging/filter=DURATION_FILTER:add(module=org.eclipse.angus.mail, class=org.eclipse.angus.mail.util.logging.DurationFilter)

Then in the web console I added a MailHandler property `pushLevel=ALL` and `pushFilter=DURATION_FILTER` which installs.

I tried adding constructor-properties={records=1000,duration=120000} but this fails as the WildFly still attempts to set normal properties which don't exist. Perhaps this is due to org.jboss.logmanager 2.1.19.Final being used in WildFly?

jmehrens commented 1 year ago

WildFly doesn't understand Formatter arrays as method parameters and MailHandler needs to treat null as zero length:

20:26:45,277 ERROR [org.jboss.as.controller.management-operation] (External Management Request Threads -- 1) WFLYCTL0013: Operation ("write-attribute") failed - address: ([
    ("subsystem" => "logging"),
    ("custom-handler" => "MAIL")
]): java.lang.IllegalArgumentException: Unknown parameter type for property attachmentFormatters on class org.eclipse.angus.mail.util.logging.MailHandler
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.getValue(LogContextConfigurationImpl.java:465)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.lambda$validate$0(AbstractPropertyConfiguration.java:213)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.WrappedAction.execute(WrappedAction.java:47)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.validate(AbstractPropertyConfiguration.java:208)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.validate(AbstractPropertyConfiguration.java:203)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.doPrepare(LogContextConfigurationImpl.java:336)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.prepare(LogContextConfigurationImpl.java:289)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.logmanager.ConfigurationPersistence.prepare(ConfigurationPersistence.java:299)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.LoggingOperations$CommitOperationStepHandler.lambda$execute$0(LoggingOperations.java:131)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:1064)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.processStages(AbstractOperationContext.java:785)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:476)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.OperationContextImpl.executeOperation(OperationContextImpl.java:1455)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.internalExecute(ModelControllerImpl.java:449)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.lambda$executeForResponse$0(ModelControllerImpl.java:259)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:304)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:270)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.executeForResponse(ModelControllerImpl.java:259)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.executeOperation(ModelControllerImpl.java:253)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.execute(ModelControllerImpl.java:236)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.DomainApiHandler.handleRequest(DomainApiHandler.java:213)
    at io.undertow.core@2.3.7.Final//io.undertow.server.handlers.encoding.EncodingHandler.handleRequest(EncodingHandler.java:72)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.DomainApiCheckHandler.handleRequest(DomainApiCheckHandler.java:91)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.security.ElytronIdentityHandler.lambda$handleRequest$0(ElytronIdentityHandler.java:62)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:328)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:285)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:254)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:225)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.security.ElytronIdentityHandler.handleRequest(ElytronIdentityHandler.java:61)
    at io.undertow.core@2.3.7.Final//io.undertow.server.handlers.BlockingHandler.handleRequest(BlockingHandler.java:56)
    at io.undertow.core@2.3.7.Final//io.undertow.server.Connectors.executeRootHandler(Connectors.java:393)
    at io.undertow.core@2.3.7.Final//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:859)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
    at java.base/java.lang.Thread.run(Thread.java:833)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513)

Failed to invoke setter setAttachmentFormatters with value null
.java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.lambda$rollback$2(AbstractPropertyConfiguration.java:255)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.WrappedAction.execute(WrappedAction.java:66)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.rollback(AbstractPropertyConfiguration.java:235)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.doForget(LogContextConfigurationImpl.java:355)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.forget(LogContextConfigurationImpl.java:318)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.logmanager.ConfigurationPersistence.forget(ConfigurationPersistence.java:341)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.LoggingOperations$LoggingWriteAttributeHandler.revertUpdateToRuntime(LoggingOperations.java:472)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.LoggingOperations$LoggingWriteAttributeHandler.revertUpdateToRuntime(LoggingOperations.java:411)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractWriteAttributeHandler$1$1.handleRollback(AbstractWriteAttributeHandler.java:123)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext$RollbackDelegatingResultHandler.handleResult(AbstractOperationContext.java:1736)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext$Step.invokeResultHandler(AbstractOperationContext.java:1657)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext$Step.handleResult(AbstractOperationContext.java:1639)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext$Step.finalizeStep(AbstractOperationContext.java:1600)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext$Step.finalizeStep(AbstractOperationContext.java:1583)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeResultHandlerPhase(AbstractOperationContext.java:925)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.processStages(AbstractOperationContext.java:798)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:476)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.OperationContextImpl.executeOperation(OperationContextImpl.java:1455)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.internalExecute(ModelControllerImpl.java:449)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.lambda$executeForResponse$0(ModelControllerImpl.java:259)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:304)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:270)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.executeForResponse(ModelControllerImpl.java:259)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.executeOperation(ModelControllerImpl.java:253)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.execute(ModelControllerImpl.java:236)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.DomainApiHandler.handleRequest(DomainApiHandler.java:213)
    at io.undertow.core@2.3.7.Final//io.undertow.server.handlers.encoding.EncodingHandler.handleRequest(EncodingHandler.java:72)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.DomainApiCheckHandler.handleRequest(DomainApiCheckHandler.java:91)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.security.ElytronIdentityHandler.lambda$handleRequest$0(ElytronIdentityHandler.java:62)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:328)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:285)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:254)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:225)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.security.ElytronIdentityHandler.handleRequest(ElytronIdentityHandler.java:61)
    at io.undertow.core@2.3.7.Final//io.undertow.server.handlers.BlockingHandler.handleRequest(BlockingHandler.java:56)
    at io.undertow.core@2.3.7.Final//io.undertow.server.Connectors.executeRootHandler(Connectors.java:393)
    at io.undertow.core@2.3.7.Final//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:859)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
    at java.base/java.lang.Thread.run(Thread.java:833)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513)
Caused by: java.lang.NullPointerException: Cannot read the array length because "formatters" is null
    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.setAttachmentFormatters(MailHandler.java:1547)
    ... 47 more
jmehrens commented 1 year ago

WildFly doesn't understand string arrays https://github.com/jboss-logging/jboss-logmanager/blob/main/src/main/java/org/jboss/logmanager/configuration/ObjectBuilder.java#L270

20:42:39,658 ERROR [org.jboss.as.controller.management-operation] (External Management Request Threads -- 1) WFLYCTL0013: Operation ("write-attribute") failed - address: ([
    ("subsystem" => "logging"),
    ("custom-handler" => "MAIL")
]): java.lang.IllegalArgumentException: Unknown parameter type for property attachmentNames on class org.eclipse.angus.mail.util.logging.MailHandler
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.getValue(LogContextConfigurationImpl.java:465)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.lambda$validate$0(AbstractPropertyConfiguration.java:213)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.WrappedAction.execute(WrappedAction.java:47)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.validate(AbstractPropertyConfiguration.java:208)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.validate(AbstractPropertyConfiguration.java:203)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.doPrepare(LogContextConfigurationImpl.java:336)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.prepare(LogContextConfigurationImpl.java:289)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.logmanager.ConfigurationPersistence.prepare(ConfigurationPersistence.java:299)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.LoggingOperations$CommitOperationStepHandler.lambda$execute$0(LoggingOperations.java:131)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:1064)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.processStages(AbstractOperationContext.java:785)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:476)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.OperationContextImpl.executeOperation(OperationContextImpl.java:1455)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.internalExecute(ModelControllerImpl.java:449)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.lambda$executeForResponse$0(ModelControllerImpl.java:259)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:304)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:270)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.executeForResponse(ModelControllerImpl.java:259)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.executeOperation(ModelControllerImpl.java:253)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.execute(ModelControllerImpl.java:236)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.DomainApiHandler.handleRequest(DomainApiHandler.java:213)
    at io.undertow.core@2.3.7.Final//io.undertow.server.handlers.encoding.EncodingHandler.handleRequest(EncodingHandler.java:72)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.DomainApiCheckHandler.handleRequest(DomainApiCheckHandler.java:91)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.security.ElytronIdentityHandler.lambda$handleRequest$0(ElytronIdentityHandler.java:62)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:328)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:285)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:254)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:225)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.security.ElytronIdentityHandler.handleRequest(ElytronIdentityHandler.java:61)
    at io.undertow.core@2.3.7.Final//io.undertow.server.handlers.BlockingHandler.handleRequest(BlockingHandler.java:56)
    at io.undertow.core@2.3.7.Final//io.undertow.server.Connectors.executeRootHandler(Connectors.java:393)
    at io.undertow.core@2.3.7.Final//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:859)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
    at java.base/java.lang.Thread.run(Thread.java:833)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513)

Failed to invoke setter setAttachmentNames with value null
.java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.lambda$rollback$2(AbstractPropertyConfiguration.java:255)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.WrappedAction.execute(WrappedAction.java:66)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.AbstractPropertyConfiguration$1.rollback(AbstractPropertyConfiguration.java:235)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.doForget(LogContextConfigurationImpl.java:355)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.config.LogContextConfigurationImpl.forget(LogContextConfigurationImpl.java:318)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.logmanager.ConfigurationPersistence.forget(ConfigurationPersistence.java:341)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.LoggingOperations$LoggingWriteAttributeHandler.revertUpdateToRuntime(LoggingOperations.java:472)
    at org.jboss.as.logging@21.1.1.Final//org.jboss.as.logging.LoggingOperations$LoggingWriteAttributeHandler.revertUpdateToRuntime(LoggingOperations.java:411)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractWriteAttributeHandler$1$1.handleRollback(AbstractWriteAttributeHandler.java:123)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext$RollbackDelegatingResultHandler.handleResult(AbstractOperationContext.java:1736)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext$Step.invokeResultHandler(AbstractOperationContext.java:1657)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext$Step.handleResult(AbstractOperationContext.java:1639)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext$Step.finalizeStep(AbstractOperationContext.java:1600)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext$Step.finalizeStep(AbstractOperationContext.java:1583)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeResultHandlerPhase(AbstractOperationContext.java:925)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.processStages(AbstractOperationContext.java:798)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:476)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.OperationContextImpl.executeOperation(OperationContextImpl.java:1455)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.internalExecute(ModelControllerImpl.java:449)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.lambda$executeForResponse$0(ModelControllerImpl.java:259)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:304)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:270)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.executeForResponse(ModelControllerImpl.java:259)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.executeOperation(ModelControllerImpl.java:253)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.ModelControllerImpl.execute(ModelControllerImpl.java:236)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.DomainApiHandler.handleRequest(DomainApiHandler.java:213)
    at io.undertow.core@2.3.7.Final//io.undertow.server.handlers.encoding.EncodingHandler.handleRequest(EncodingHandler.java:72)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.DomainApiCheckHandler.handleRequest(DomainApiCheckHandler.java:91)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.security.ElytronIdentityHandler.lambda$handleRequest$0(ElytronIdentityHandler.java:62)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:328)
    at org.wildfly.security.elytron-base@2.2.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:285)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:254)
    at org.jboss.as.controller@21.1.1.Final//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:225)
    at org.jboss.as.domain-http-interface@21.1.1.Final//org.jboss.as.domain.http.server.security.ElytronIdentityHandler.handleRequest(ElytronIdentityHandler.java:61)
    at io.undertow.core@2.3.7.Final//io.undertow.server.handlers.BlockingHandler.handleRequest(BlockingHandler.java:56)
    at io.undertow.core@2.3.7.Final//io.undertow.server.Connectors.executeRootHandler(Connectors.java:393)
    at io.undertow.core@2.3.7.Final//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:859)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
    at java.base/java.lang.Thread.run(Thread.java:833)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513)
Caused by: java.lang.NullPointerException: Cannot read the array length because "names" is null
    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.setAttachmentNames(MailHandler.java:1607)
    ... 47 more
jmehrens commented 1 year ago

Setting the root logger to FINEST with an attached AsyncHandler targeting the MailHandler results in a logging feedback loop. I think there are a few issues here:

  1. AsyncHandler doesn't have a ThreadLocal re-entrance check or a check that the current thread is the task thread.
  2. AsyncHandler needs to guard against sibling handler logging feedback loops. Meaning the re-entrance check could/should be expanded to check if the calling thread is a worker from any AsyncHandler.
  3. The ThreadLocal check in the MailHandler only works when there is no thread handoff which is not ideal.
  4. MailHandler needs to deal with async sibling handler logging feedback loops. I think the best action is to create a new public filter that checks if the given logger names start with the known activation/mail logger names and then does a stackwalk to see if the MailHandler::publish is a stackframe. This filter could be installed on any logger or handler to break the cycle.

In testing setting root logger to FINEST, the capacity of the AsyncHandler to 5000, and a policy of BLOCK resulted in stalled boot of WildFly. This is because the worker thread itself gets parked when the queue is full along with all other threads that attempt to log. Progress is never made because the worker itself is parked. This means the policy should always be DISCARD.

Here is an example where main thread (number 1) is blocked by put and the AsyncHandler worker (pool-1-thread-1 number 16) is also blocked by put.

2023-09-27 22:08:04
Full thread dump OpenJDK 64-Bit Server VM (17.0.7+7-Ubuntu-0ubuntu118.04 mixed mode, sharing):

Threads class SMR info:
_java_thread_list=0x0000564b040111e0, length=14, elements={
0x0000564b033677e0, 0x0000564b03412c20, 0x0000564b03414550, 0x0000564b0341a290,
0x0000564b0341b910, 0x0000564b0341d130, 0x0000564b0341eef0, 0x0000564b03420830,
0x0000564b0347e4a0, 0x0000564b03556f20, 0x0000564b03559700, 0x0000564b035fa640,
0x0000564b04239f10, 0x0000564b05024db0
}

"main" #1 prio=5 os_prio=0 cpu=2134.93ms elapsed=36.55s tid=0x0000564b033677e0 nid=0xade waiting on condition  [0x00007fbe685d3000]
   java.lang.Thread.State: WAITING (parking)
    at jdk.internal.misc.Unsafe.park(java.base@17.0.7/Native Method)
    - parking to wait for  <0x00000000e06307c8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(java.base@17.0.7/LockSupport.java:341)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@17.0.7/AbstractQueuedSynchronizer.java:506)
    at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@17.0.7/ForkJoinPool.java:3463)
    at java.util.concurrent.ForkJoinPool.managedBlock(java.base@17.0.7/ForkJoinPool.java:3434)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@17.0.7/AbstractQueuedSynchronizer.java:1623)
    at java.util.concurrent.ArrayBlockingQueue.put(java.base@17.0.7/ArrayBlockingQueue.java:370)
    at org.jboss.logmanager.handlers.AsyncHandler.doPublish(AsyncHandler.java:155)
    at org.jboss.logmanager.ExtHandler.publish(ExtHandler.java:77)
    at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:333)
    at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:341)
    at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:341)
    at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:341)
    at org.jboss.logmanager.Logger.logRaw(Logger.java:852)
    at org.jboss.logmanager.Logger.logRaw(Logger.java:862)
    at org.jboss.logmanager.Logger.log(Logger.java:395)
    at org.jboss.modules.log.JDKModuleLogger.doLog(JDKModuleLogger.java:102)
    at org.jboss.modules.log.JDKModuleLogger.moduleDefined(JDKModuleLogger.java:181)
    at org.jboss.modules.ModuleLoader$3.run(ModuleLoader.java:736)
    at org.jboss.modules.ModuleLoader$3.run(ModuleLoader.java:728)
    at java.security.AccessController.executePrivileged(java.base@17.0.7/AccessController.java:807)
    at java.security.AccessController.doPrivileged(java.base@17.0.7/AccessController.java:569)
    at org.jboss.modules.ModuleLoader.defineModule(ModuleLoader.java:728)
    at org.jboss.modules.ModuleLoader.loadModuleLocal(ModuleLoader.java:535)
    at org.jboss.modules.DelegatingModuleLoader.preloadModule(DelegatingModuleLoader.java:57)
    at org.jboss.modules.Module.addPaths(Module.java:1257)
    at org.jboss.modules.Module.link(Module.java:1627)
    at org.jboss.modules.Module.getPaths(Module.java:1588)
    at org.jboss.modules.Module.getPathsUnchecked(Module.java:1611)
    at org.jboss.modules.Module.loadModuleClass(Module.java:760)
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:192)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
    at java.lang.ClassLoader.defineClass1(java.base@17.0.7/Native Method)
    at java.lang.ClassLoader.defineClass(java.base@17.0.7/ClassLoader.java:1012)
    at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:350)
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:482)
    at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:276)
    at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:79)
    at org.jboss.modules.Module.loadModuleClass(Module.java:765)
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:192)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
    at java.lang.ClassLoader.defineClass1(java.base@17.0.7/Native Method)
    at java.lang.ClassLoader.defineClass(java.base@17.0.7/ClassLoader.java:1012)
    at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:350)
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:482)
    at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:276)
    at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:79)
    at org.jboss.modules.Module.loadModuleClass(Module.java:765)
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:192)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
    at org.jboss.as.jmx.PluggableMBeanServerBuilder.newMBeanServer(PluggableMBeanServerBuilder.java:49)
    at javax.management.MBeanServerFactory.newMBeanServer(java.management@17.0.7/MBeanServerFactory.java:329)
    - locked <0x00000000e1e0b580> (a org.jboss.as.jmx.PluggableMBeanServerBuilder)
    at javax.management.MBeanServerFactory.createMBeanServer(java.management@17.0.7/MBeanServerFactory.java:231)
    at javax.management.MBeanServerFactory.createMBeanServer(java.management@17.0.7/MBeanServerFactory.java:192)
    at java.lang.management.ManagementFactory.getPlatformMBeanServer(java.management@17.0.7/ManagementFactory.java:484)
    - locked <0x00000000e06ea1b0> (a java.lang.Class for java.lang.management.ManagementFactory)
    at org.jboss.modules.Main.main(Main.java:545)

"Reference Handler" #2 daemon prio=10 os_prio=0 cpu=1.73ms elapsed=36.52s tid=0x0000564b03412c20 nid=0xae5 waiting on condition  [0x00007fbe4921b000]
   java.lang.Thread.State: RUNNABLE
    at java.lang.ref.Reference.waitForReferencePendingList(java.base@17.0.7/Native Method)
    at java.lang.ref.Reference.processPendingReferences(java.base@17.0.7/Reference.java:253)
    at java.lang.ref.Reference$ReferenceHandler.run(java.base@17.0.7/Reference.java:215)

"Finalizer" #3 daemon prio=8 os_prio=0 cpu=1.26ms elapsed=36.52s tid=0x0000564b03414550 nid=0xae6 in Object.wait()  [0x00007fbe4911a000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(java.base@17.0.7/Native Method)
    - waiting on <0x00000000e013bfe8> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(java.base@17.0.7/ReferenceQueue.java:155)
    - locked <0x00000000e013bfe8> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(java.base@17.0.7/ReferenceQueue.java:176)
    at java.lang.ref.Finalizer$FinalizerThread.run(java.base@17.0.7/Finalizer.java:172)

"Signal Dispatcher" #4 daemon prio=9 os_prio=0 cpu=1.17ms elapsed=36.51s tid=0x0000564b0341a290 nid=0xae7 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Service Thread" #5 daemon prio=9 os_prio=0 cpu=1.18ms elapsed=36.51s tid=0x0000564b0341b910 nid=0xae8 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Monitor Deflation Thread" #6 daemon prio=9 os_prio=0 cpu=3.57ms elapsed=36.51s tid=0x0000564b0341d130 nid=0xae9 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" #7 daemon prio=9 os_prio=0 cpu=3316.31ms elapsed=36.51s tid=0x0000564b0341eef0 nid=0xaea waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   No compile task

"C1 CompilerThread0" #10 daemon prio=9 os_prio=0 cpu=1703.23ms elapsed=36.51s tid=0x0000564b03420830 nid=0xaeb waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   No compile task

"Sweeper thread" #11 daemon prio=9 os_prio=0 cpu=0.68ms elapsed=36.51s tid=0x0000564b0347e4a0 nid=0xaec runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Common-Cleaner" #12 daemon prio=8 os_prio=0 cpu=1.25ms elapsed=36.46s tid=0x0000564b03556f20 nid=0xaed in Object.wait()  [0x00007fbe4471a000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
    at java.lang.Object.wait(java.base@17.0.7/Native Method)
    - waiting on <0x00000000e013c1f8> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(java.base@17.0.7/ReferenceQueue.java:155)
    - locked <0x00000000e013c1f8> (a java.lang.ref.ReferenceQueue$Lock)
    at jdk.internal.ref.CleanerImpl.run(java.base@17.0.7/CleanerImpl.java:140)
    at java.lang.Thread.run(java.base@17.0.7/Thread.java:833)
    at jdk.internal.misc.InnocuousThread.run(java.base@17.0.7/InnocuousThread.java:162)

"Notification Thread" #13 daemon prio=9 os_prio=0 cpu=0.29ms elapsed=36.45s tid=0x0000564b03559700 nid=0xaee runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Reference Reaper" #14 daemon prio=5 os_prio=0 cpu=0.43ms elapsed=36.19s tid=0x0000564b035fa640 nid=0xaf0 in Object.wait()  [0x00007fbe43de6000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(java.base@17.0.7/Native Method)
    - waiting on <0x00000000e013c3b0> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(java.base@17.0.7/ReferenceQueue.java:155)
    - locked <0x00000000e013c3b0> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(java.base@17.0.7/ReferenceQueue.java:176)
    at org.jboss.modules.ref.References$ReaperThread.run(References.java:64)

"pool-1-thread-1" #16 daemon prio=5 os_prio=0 cpu=2218.46ms elapsed=32.32s tid=0x0000564b04239f10 nid=0xaf2 waiting on condition  [0x00007fbe43ce4000]
   java.lang.Thread.State: WAITING (parking)
    at jdk.internal.misc.Unsafe.park(java.base@17.0.7/Native Method)
    - parking to wait for  <0x00000000e06307c8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(java.base@17.0.7/LockSupport.java:341)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@17.0.7/AbstractQueuedSynchronizer.java:506)
    at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@17.0.7/ForkJoinPool.java:3463)
    at java.util.concurrent.ForkJoinPool.managedBlock(java.base@17.0.7/ForkJoinPool.java:3434)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@17.0.7/AbstractQueuedSynchronizer.java:1623)
    at java.util.concurrent.ArrayBlockingQueue.put(java.base@17.0.7/ArrayBlockingQueue.java:370)
    at org.jboss.logmanager.handlers.AsyncHandler.doPublish(AsyncHandler.java:155)
    at org.jboss.logmanager.ExtHandler.publish(ExtHandler.java:77)
    at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:333)
    at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:341)
    at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:341)
    at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:341)
    at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:341)
    at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:341)
    at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:341)
    at org.jboss.logmanager.Logger.logRaw(Logger.java:852)
    at org.jboss.logmanager.Logger.logp(Logger.java:659)
    at org.eclipse.angus.mail.util.MailLogger.log(MailLogger.java:218)
    at org.eclipse.angus.mail.util.LogOutputStream.log(LogOutputStream.java:105)
    at org.eclipse.angus.mail.util.LogOutputStream.logBuf(LogOutputStream.java:114)
    at org.eclipse.angus.mail.util.LogOutputStream.write(LogOutputStream.java:78)
    at org.eclipse.angus.mail.util.TraceOutputStream.write(TraceOutputStream.java:118)
    at java.io.BufferedOutputStream.flushBuffer(java.base@17.0.7/BufferedOutputStream.java:81)
    at java.io.BufferedOutputStream.write(java.base@17.0.7/BufferedOutputStream.java:95)
    - locked <0x00000000e1e30d90> (a java.io.BufferedOutputStream)
    at org.eclipse.angus.mail.util.CRLFOutputStream.write(CRLFOutputStream.java:47)
    at org.eclipse.angus.mail.smtp.SMTPOutputStream.write(SMTPOutputStream.java:46)
    at org.eclipse.angus.mail.util.QPEncoderStream.output(QPEncoderStream.java:188)
    at org.eclipse.angus.mail.util.QPEncoderStream.write(QPEncoderStream.java:125)
    at java.io.FilterOutputStream.write(java.base@17.0.7/FilterOutputStream.java:87)
    at java.io.FilterOutputStream.write(java.base@17.0.7/FilterOutputStream.java:137)
    at sun.nio.cs.StreamEncoder.writeBytes(java.base@17.0.7/StreamEncoder.java:234)
    at sun.nio.cs.StreamEncoder.implWrite(java.base@17.0.7/StreamEncoder.java:304)
    at sun.nio.cs.StreamEncoder.implWrite(java.base@17.0.7/StreamEncoder.java:282)
    at sun.nio.cs.StreamEncoder.write(java.base@17.0.7/StreamEncoder.java:132)
    - locked <0x00000000e1e32e98> (a java.io.OutputStreamWriter)
    at sun.nio.cs.StreamEncoder.write(java.base@17.0.7/StreamEncoder.java:142)
    at java.io.OutputStreamWriter.write(java.base@17.0.7/OutputStreamWriter.java:223)
    at org.eclipse.angus.mail.handlers.text_plain.writeTo(text_plain.java:139)
    at jakarta.activation.ObjectDataContentHandler.writeTo(DataHandler.java:866)
    at jakarta.activation.DataHandler.writeTo(DataHandler.java:291)
    at jakarta.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1683)
    at jakarta.mail.internet.MimeMessage.writeTo(MimeMessage.java:1911)
    at org.eclipse.angus.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1305)
    - locked <0x00000000e1e330b8> (a org.eclipse.angus.mail.smtp.SMTPTransport)
    at jakarta.mail.Transport.send0(Transport.java:233)
    at jakarta.mail.Transport.send(Transport.java:102)
    at org.eclipse.angus.mail.util.logging.MailHandler.send(MailHandler.java:2965)
    at org.eclipse.angus.mail.util.logging.MailHandler.publish0(MailHandler.java:725)
    at org.eclipse.angus.mail.util.logging.MailHandler.publish(MailHandler.java:678)
    at org.jboss.logmanager.handlers.AsyncHandler$AsyncTask.run(AsyncHandler.java:206)
    at java.lang.Thread.run(java.base@17.0.7/Thread.java:833)

"Attach Listener" #17 daemon prio=9 os_prio=0 cpu=0.73ms elapsed=0.11s tid=0x0000564b05024db0 nid=0xb2e waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"VM Thread" os_prio=0 cpu=18.09ms elapsed=36.53s tid=0x0000564b0340e7b0 nid=0xae4 runnable  

"GC Thread#0" os_prio=0 cpu=58.18ms elapsed=36.55s tid=0x0000564b033955b0 nid=0xadf runnable  

"GC Thread#1" os_prio=0 cpu=108.51ms elapsed=31.18s tid=0x0000564b03e50760 nid=0xaf3 runnable  

"GC Thread#2" os_prio=0 cpu=53.24ms elapsed=31.15s tid=0x0000564b03f0f730 nid=0xaf4 runnable  

"GC Thread#3" os_prio=0 cpu=4.80ms elapsed=31.15s tid=0x0000564b03f10400 nid=0xaf5 runnable  

"G1 Main Marker" os_prio=0 cpu=0.44ms elapsed=36.55s tid=0x0000564b0339ae80 nid=0xae0 runnable  

"G1 Conc#0" os_prio=0 cpu=0.37ms elapsed=36.55s tid=0x0000564b0339c0b0 nid=0xae1 runnable  

"G1 Refine#0" os_prio=0 cpu=0.34ms elapsed=36.54s tid=0x0000564b033ea0d0 nid=0xae2 runnable  

"G1 Service" os_prio=0 cpu=16.73ms elapsed=36.54s tid=0x0000564b033eb290 nid=0xae3 runnable  

"VM Periodic Task Thread" os_prio=0 cpu=46.99ms elapsed=36.45s tid=0x0000564b0355b310 nid=0xaef waiting on condition  

JNI global refs: 17, weak refs: 0

RESOLUTION: Created RedHat issue https://issues.redhat.com/browse/LOGMGR-339

jmehrens commented 1 year ago

MessageFormat tokens are not allowed passed the field validations in the web UI.

Invalid format. Add new properties as key=value pairs, the special character allowed in the value are: - . : @ ; = ? ! # $ % & [ ] ( ) * _

This includes {}, ,, and | in the example: These {3} messages occurred between {9,choice,86400000#{7,date} {7,time} and {8,time}|86400000<{7,date} and {8,date}}

This means that there is no way to set the CollectorFormatter pattern. One option would be to allow printf style formats but that will disable choice style formatting.

Manually editing the files seems to work.

jmehrens commented 1 year ago

Adding an attachment yields:

java.util.logging.ErrorManager: 1: SEVERE: Not provider of jakarta.mail.util.StreamProvider was found
java.lang.IllegalStateException: Not provider of jakarta.mail.util.StreamProvider was found
    at org.eclipse.angus.logging-mailhandler//jakarta.mail.util.FactoryFinder.find(FactoryFinder.java:61)
    at org.eclipse.angus.logging-mailhandler//jakarta.mail.util.StreamProvider.provider(StreamProvider.java:199)
    at org.eclipse.angus.logging-mailhandler//jakarta.mail.BodyPart.<init>(BodyPart.java:47)
    at org.eclipse.angus.logging-mailhandler//jakarta.mail.internet.MimeBodyPart.<init>(MimeBodyPart.java:159)
    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.createBodyPart(MailHandler.java:3772)
    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.writeLogRecords0(MailHandler.java:3118)
    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.writeLogRecords(MailHandler.java:3063)
    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.publish0(MailHandler.java:712)
    at org.eclipse.angus.logging-mailhandler//org.eclipse.angus.mail.util.logging.MailHandler.publish(MailHandler.java:676)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:333)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:341)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:341)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:341)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.Logger.logRaw(Logger.java:852)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.Logger.logRaw(Logger.java:862)
    at org.jboss.logmanager@2.1.19.Final//org.jboss.logmanager.Logger.log(Logger.java:395)
    at org.jboss.modules.log.JDKModuleLogger.doLog(JDKModuleLogger.java:102)
    at org.jboss.modules.log.JDKModuleLogger.greeting(JDKModuleLogger.java:175)
    at org.jboss.modules.Module.setModuleLogger(Module.java:1148)
    at org.jboss.modules.Main.main(Main.java:447)

RESOLUTION: modified the factory methods to set the CCL.

jmehrens commented 12 months ago

The AsyncHandler has auto-flush as always on which overrides the cool-down of the MailHandler push filter. There doesn't seem to be a way in the UI or the JBoss-CLI to turn auto-flush off. Might work to manually edit the logging.properties but there is no way to manually edit the standalone.xml to add such a property.

  1. On the WildFly side this should be a configurable property.
  2. On the MailHandler I might need to look at adding adding a predicate for the MailHandler::flush. This will have to be split into a new issue.
jmehrens commented 11 months ago

WildFly web UI validation doesn't allow for setting mail.smtp.auth.mechanisms=LOGIN PLAIN DIGEST-MD5 NTLM due to space not being allowed.

lukasj commented 11 months ago

sometimes using " helps to bypass validation (mail.smtp.auth.mechanisms="LOGIN PLAIN DIGEST-MD5 NTLM") - not sure that is the case here

jmehrens commented 11 months ago

@lukasj Thanks for the tip. It looks like that is rejected too: Screenshot 2023-11-01 no spaces

The error message is:

Invalid format. Add new properties as key=value pairs, the special character allowed in the value are: - . : @ ; = ? ! # $ % & [ ] ( ) * _

It is not a blocker for this ticket. I've been working around the web UI validation by entering underscore instead of spaces and then just edit the backing logging.properties and standalone.xml to convert them back to spaces. I'll file a RFE against WildFly to consider allowing more characters.

On the MailHandler side I'll consider adding a support for a transformer function on the setMailEntries but it will be a future project.

RESOLUTION: Use the jbosscli instead of the Web UI. See: https://issues.redhat.com/browse/WFLY-18724

jmehrens commented 11 months ago

Committed as: https://github.com/eclipse-ee4j/angus-mail/commit/76fde654a8de98df813ad53396d90c37f0c50977

Final approach was to:

  1. Add new method to parse and assign mail properties from a string.
  2. Add new method to parse an authenticator or password from a string.
  3. Relax API to not be null hostile in places.
  4. Add unique method names for use in WildFly.
  5. Add public get/set methods to Formatters and Filters.
  6. Defer remaining work to other tickets (Comparator and attachments).
jmehrens commented 11 months ago

Created WildFly issues: https://issues.redhat.com/browse/WFLY-18720 https://issues.redhat.com/browse/WFLY-18721 https://issues.redhat.com/browse/WFLY-18722 https://issues.redhat.com/browse/WFLY-18724