How to configure Database Appender for logging purposes to OpenNCP
In order to easily capture the needed transaction messages from epsos-client-connector, epsos-ws-server, openncp portal you can easily configure a database appender in these components. We describe how to in the following steps:
Create a table (i.e. OpenNCP_LOGS) in one database (i.e. named LOGS) using the following script:
CREATE TABLE IF NOT EXISTS `OpenNCP_LOGS` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `component` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `logger` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `priority` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `message` longtext COLLATE utf8_unicode_ci NOT NULL, `stacktrace` text COLLATE utf8_unicode_ci, `creationTime` datetime NOT NULL, `ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`), KEY `priority` (`priority`), KEY `creationTime` (`creationTime`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
Configure epsos-client-connector log4j.properties (located under webapps/epsos-client-connector/WEB-INF/classes/log4j.properties). You can capture all XCPC, XCA, XDR messages
# Set root category priority to INFO and its only appender to CONSOLE. log4j.rootLogger=INFO, Stdout # Roll-over the log once per day log4j.appender.Stdout=org.apache.log4j.ConsoleAppender log4j.appender.Stdout.layout=org.apache.log4j.PatternLayout # Print the date in ISO 8601 format log4j.appender.Stdout.layout.conversionPattern=%d [%t] %-5p %c - %m%n # Define the DB appender log4j.appender.DB.driver=com.mysql.jdbc.Driver log4j.appender.DB=eu.epsos.log4j.appender.DatabaseAppender log4j.appender.DB.URL=jdbc:mysql://localhost:3306/LOGS log4j.appender.DB.user=<username> log4j.appender.DB.password=<password> log4j.appender.DB.sql=INSERT INTO OpenNCP_LOGS (component, creationTime, logger, \ priority, message, stacktrace, ip) VALUES ('NCP-B', \ ?{d{yyyy-MM-dd HH:mm:ss}}, ?{c}, ?{p}, ?{m}, ?{stacktrace}, ?{ip}) log4j.appender.DB.layout=org.apache.log4j.PatternLayout log4j.appender.DB.layout.ConversionPattern=%-5p [%d{yyyy-MM-dd HH:mm:ss}] %C{1}: %m (%F:%L, %t)%n # Specific log Levels log4j.logger.eu.epsos.pt.cc=DEBUG,DB log4j.logger.tr.com.srdc.epsos=DEBUG,DB log4j.logger.epsos.ccd.gnomon.configmanager=DEBUG log4j.logger.epsos.ccd.gnomon.auditmanager=DEBUG log4j.logger.epsos.ccd.posam=DEBUG log4j.logger.org.hibernate=ERROR log4j.logger.org.apache.axis2=ERROR log4j.logger.com.mchange=ERROR log4j.logger.com.spirit.epsos.cc.adc=ERROR log4j.logger.eu.epsos.pt.eadc=ERROR log4j.logger.epsos.ccd.posam=ERROR
Configure epsos-ws-server log4j.xml (located under webapps/epsos-ws-server/WEB-INF/classes/log4j.xml). You can capture all XCPC, XCA, XDR messages
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> <appender name="LOGFILE" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="${catalina.base}/logs/epsos-srdc.log" /> <param name="DatePattern" value="'.'yyyy-MM-dd"/> <param name="Append" value="true"/> <param name="Threshold" value="DEBUG"/> <param name="Encoding" value="UTF-8"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p %d %c %M.%L %x - %m\n"/> </layout> </appender> <appender name="DB" class="eu.epsos.log4j.appender.DatabaseAppender"> <param name="URL" value="jdbc:mysql://localhost/LOGS" /> <param name="driver" value="com.mysql.jdbc.Driver" /> <param name="user" value="<username>" /> <param name="password" value="<password>" /> <param name="sql" value="INSERT INTO OpenNCP_LOGS (component, creationTime, logger, \ priority, message, stacktrace, ip) VALUES ('NCP-A', \ ?{d{yyyy-MM-dd HH:mm:ss}}, ?{c}, ?{p}, ?{m}, ?{stacktrace}, ?{ip})" /> </appender> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <param name="Target" value="System.out"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-4r %-5p %c %M.%L %x - %m\n"/> </layout> </appender> <logger name="org.apache.axis2"> <level value="error"/> </logger> <logger name="org.apache.axiom"> <level value="error"/> </logger> <logger name="org.apache.xml"> <level value="error"/> </logger> <logger name="org.opensaml"> <level value="error"/> </logger> <logger name="org.springframework"> <level value="error"/> </logger> <logger name="org.hibernate"> <level value="error"/> </logger> <logger name="net.sf.ehcache"> <level value="error"/> </logger> <logger name="epsos.ccd.posam.tm"> <level value="info"/> </logger> <logger name="epsos.ccd.posam.tsam"> <level value="info"/> </logger> <logger name="de.hunsicker.jalopy.io"> <level value="fatal"/> </logger> <logger name="httpclient.wire.header"> <level value="fatal"/> </logger> <logger name="org.apache.commons.httpclient"> <level value="fatal"/> </logger> <logger name="org.apache.commons.configuration"> <level value="error"/> </logger> <logger name="com.mchange"> <level value="warn"/> </logger> <logger name="_2009.xcpd.iti.ihe"> <level value="debug"/> <appender-ref ref="DB"/> </logger> <logger name="_2007.xds_b.iti.ihe"> <level value="debug"/> <appender-ref ref="DB"/> </logger> <logger name="eu.epsos.protocolterminators.ws.server.xca.impl"> <level value="debug"/> <appender-ref ref="DB"/> </logger> <root> <priority value ="debug" /> <appender-ref ref="LOGFILE"/> </root> </log4j:configuration>
- Configure openncp portal (located under webapss/epsosportal/WEB-INF/classes/log4j.xml). You can capture:
- HCPA
- TRCA
- Consent Documents (CDA Format)
- Dispensation Documents (CDA Format)
- ePrescription Documents (CDA Format)
- Patient Summary Documents (CDA Format)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> <appender name="LOGFILE" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="${catalina.base}/logs/portal.log" /> <param name="DatePattern" value="'.'yyyy-MM-dd"/> <param name="Append" value="true"/> <param name="Threshold" value="INFO"/> <param name="Encoding" value="UTF-8"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p %d %c %M.%L %x - %m\n"/> </layout> </appender> <appender name="DB" class="eu.epsos.log4j.appender.DatabaseAppender"> <param name="URL" value="jdbc:mysql://localhost/LOGS" /> <param name="driver" value="com.mysql.jdbc.Driver" /> <param name="user" value="<username>" /> <param name="password" value="<password>" /> <param name="sql" value="INSERT INTO OpenNCP_LOGS (component, creationTime, logger, \ priority, message, stacktrace, ip) VALUES ('Portal', \ ?{d{yyyy-MM-dd HH:mm:ss}}, ?{c}, ?{p}, ?{m}, ?{stacktrace}, ?{ip})" /> </appender> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <param name="Target" value="System.out"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-4r %-5p %c %M.%L %x - %m\n"/> </layout> </appender> <logger name="com.gnomon.epsos.servlet"> <level value="INFO"/> <appender-ref ref="DB"/> </logger> <logger name="com.gnomon.epsos.service"> <level value="INFO"/> <appender-ref ref="DB"/> </logger> <root> <priority value ="debug" /> <appender-ref ref="LOGFILE"/> </root> </log4j:configuration> 70,9 Bot
You should use also different tables for each component to keep seperate the log messages. Also you can easily adapt this to any other epsos component needed.