Configuring standalone.xml file
You need to go to your standalone.xml and add as below to the end of file.
<logging-profiles>
<logging-profile name="concurrency.apps"> <console-handler name="CONSOLE-1">
<level name="INFO"/>
<formatter>
<named-formatter name="COLOR-PATTERN-1"/>
</formatter>
</console-handler>
<size-rotating-file-handler name="FILE-1" autoflush="true">
<level name="INFO"/>
<formatter>
<named-formatter name="PATTERN-1"/>
</formatter>
<file relative-to="jboss.server.log.dir" path="concurrency.apps.log"/>
<append value="true"/>
</size-rotating-file-handler>
<logger category="pro.itstikk" use-parent-handlers="false">
<level name="INFO"/>
<handlers>
<handler name="FILE-1"/>
<handler name="CONSOLE-1"/>
</handlers>
</logger>
<formatter name="COLOR-PATTERN-1">
<pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
</formatter>
<formatter name="PATTERN-1">
<pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
</formatter>
<root-logger>
<level name="INFO"/>
<handlers>
<handler name="CONSOLE-1"/>
<handler name="FILE-1"/>
</handlers>
</root-logger>
</logging-profile>
</logging-profiles>
Create Class to test
To test the logging configuration service, you just create a simple projectpackage pro.itstikk.wildfly;
import java.util.logging.Level;
import java.util.logging.Logger;
public class SampleTask implements Runnable {
private static Logger logger = Logger.getLogger(SampleTask.class.getName());
@Override
public void run() {
while (true) {
logger.log(Level.INFO, "New thread running...");
try {
logger.log(Level.INFO,"------- Hello World --------");
Thread.sleep(5000);
} catch (InterruptedException e) {
logger.log(Level.SEVERE, "Thread interrupted", e);
}
}
}
}
Create class to run the thread
import javax.annotation.Resource;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.enterprise.concurrent.ManagedThreadFactory;
/**
* Session Bean implementation class SampleBean
*/
@Stateless(mappedName = "sampleBean")
@LocalBean
public class SampleBean {
/**
* Default constructor.
*/
@Resource(lookup="java:jboss/ee/concurrency/factory/MyManagedThreadFactory")
private ManagedThreadFactory threadFactory;
public SampleBean() {
super();
}
public void runReports() {
SampleTask sampleTask = new SampleTask();
Thread thread = threadFactory.newThread(sampleTask);
thread.start();
}
}
<subsystem xmlns="urn:jboss:domain:ee:4.0">
<spec-descriptor-property-replacement>false</spec-descriptor-property-replacement><concurrent>
<context-services>
<context-service name="default" jndi-name="java:jboss/ee/concurrency/context/default" use-transaction-setup-provider="true"/>
</context-services>
<managed-thread-factories>
<managed-thread-factory name="default" jndi-name="java:jboss/ee/concurrency/factory/default" context-service="default"/>
<managed-thread-factory name="myManagedThreadFactory" jndi-name="java:jboss/ee/concurrency/factory/MyManagedThreadFactory" context-service="default" priority="1"/>
</managed-thread-factories>
<managed-executor-services>
<managed-executor-service name="default" jndi-name="java:jboss/ee/concurrency/executor/default" context-service="default" hung-task-threshold="60000" keepalive-time="5000"/>
</managed-executor-services>
<managed-scheduled-executor-services>
<managed-scheduled-executor-service name="default" jndi-name="java:jboss/ee/concurrency/scheduler/default" context-service="default" hung-task-threshold="60000" keepalive-time="3000"/>
</managed-scheduled-executor-services>
</concurrent>
<default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/ExampleDS" jms-connection-factory="java:jboss/DefaultJMSConnectionFactory" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
</subsystem>
Finally, you need to edit MANIFET.MF in the META-INF folder.
Manifest-Version: 1.0
Class-Path: Logging-Profile: concurrency.apps
![]() |
Fig 01 Edit MANIFEST.MF file |
15:19:27,649 INFO [pro.itstikk.wildfly.SampleTask] (EE-ManagedThreadFactory-myManagedThreadFactory-Thread-1) ------- Hello World --------
15:19:32,651 INFO [pro.itstikk.wildfly.SampleTask] (EE-ManagedThreadFactory-myManagedThreadFactory-Thread-1) New thread running...15:19:32,653 INFO [pro.itstikk.wildfly.SampleTask] (EE-ManagedThreadFactory-myManagedThreadFactory-Thread-1) ------- Hello World --------
15:19:37,654 INFO [pro.itstikk.wildfly.SampleTask] (EE-ManagedThreadFactory-myManagedThreadFactory-Thread-1) New thread running...
15:19:37,654 INFO [pro.itstikk.wildfly.SampleTask] (EE-ManagedThreadFactory-myManagedThreadFactory-Thread-1) ------- Hello World --------
15:19:42,655 INFO [pro.itstikk.wildfly.SampleTask] (EE-ManagedThreadFactory-myManagedThreadFactory-Thread-1) New thread running...
15:19:42,655 INFO [pro.itstikk.wildfly.SampleTask] (EE-ManagedThreadFactory-myManagedThreadFactory-Thread-1) ------- Hello World --------
For the log file, it will be generated under $JBOSS_HOME/standalone/log folder as you have specified in the configuration.
Checking Generated Log File |
In case you convert your project to maven project, you need to configure logging profile your pom.xml file
<plugin>
<artifactid>maven-war-plugin</artifactid>
<version>3.0.0</version>
<configuration>
<warsourcedirectory>webapps</warsourcedirectory>
<archive>
<manifestentries>
<Logging-Profile>concurrency.apps</Logging-Profile>
</manifestentries>
</archive>
</configuration>
</plugin>
Integrate Log4j logging service
integrate EJB with log4j is very simple. Just create log4j.xml or log4j.properites in META-INF. And add log4j dependency to pom.xml.
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
Then create log4j.xml in META-INFO
<?xml version="1.0" encoding="UTF-8"?>
<log4j:configuration debug="true"
xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="console"
class="org.apache.log4j.ConsoleAppender">
<param
name="Target" value="System.out"/>
<layout
class="org.apache.log4j.PatternLayout">
<param
name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L -
%m%n" />
</layout>
</appender>
<appender name="fileAppender"
class="org.apache.log4j.RollingFileAppender">
<param name="append" value="false" />
<param name="file"
value="${jboss.server.log.dir}/application.log" />
<layout
class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{ABSOLUTE} %-5p [%c{1}] %m%n" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="console" />
<appender-ref ref="fileAppender" />
</root>
</log4j:configuration>
Fig 03. log4j.xml |
Then creata EJB class as below.
package pro.itstikk.java.ee;
import javax.ejb.LocalBean;
import javax.ejb.Schedule;
import javax.ejb.Singleton;
import org.apache.log4j.Logger;
/**
* Session Bean implementation class MainApp
*/
@Singleton
@LocalBean
public class MainApp {
private static Logger logger = Logger.getLogger(MainApp.class);
/**
* Default constructor.
*/
public MainApp() {
// TODO Auto-generated constructor stub
}
@Schedule(second="*/10",minute="*",hour="*")
public void run() {
logger.debug("hello world");
}
}
No comments:
Post a Comment