How to configure Database Appender for logging purposes to OpenNCP

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:

  1. 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 ;
  2. 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
  3. 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>
  4. Configure openncp portal (located under webapss/epsosportal/WEB-INF/classes/log4j.xml). You can capture:

    1. HCPA

    2. TRCA

    3. Consent Documents (CDA Format)

    4. Dispensation Documents (CDA Format)

    5. ePrescription Documents (CDA Format)

    6. 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.