jeudi 21 mars 2013

Mettre en place les logs sous DataStax Entreprise

Datastax entreprise nous permet de stoker les logs de notre application dans cassandra.

Pour cela, On commence par activer le service sur le cluster en se rendant dans le repertoire contenant le script d'init:

\>cd /usr/share/dse-demos/log_search
\>./1-add-schema.sh


Dans le projet sous eclipse, il faut ajouter les librairies suivantes au projet:
Ajouter le fichier de configuration de log4j, dans l'arborescence du projet comme ceci:


Le contenu du fichier est le suivant:

<?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="CONSOLE" class="org.apache.log4j.ConsoleAppender">
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss}] %5p %c : %m%n" />
  </layout>
 </appender>

 <appender name="Cassandra" class="com.datastax.logging.appender.CassandraAppender">
  <param name="hosts" value="localhost" />
  <param name="port" value="9160" />
  <param name="appName" value="price" />
  <param name="keyspaceName" value="Logging" />
  <param name="columnFamily" value="log_entries" />
  <param name="placementStrategy" value="org.apache.cassandra.locator.SimpleStrategy" />
  <param name="replicationFactor" value="1" />
  <param name="consistencyLevelWrite" value="ONE" />
  <param name="maxBufferedRows" value="256" />

  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss}] %5p %c{6}: %m%n" />
  </layout>
 </appender>

 <logger name="it.example">
  <param name="additivity" value="false" />
  <level value="debug" />
  <appender-ref ref="CONSOLE" />
  <appender-ref ref="Cassandra" />
 </logger>

 <root>
  <level value="error" />
  <appender-ref ref="CONSOLE" />
  <appender-ref ref="Cassandra" />
 </root>
</log4j:configuration>

Dans le cas ou vous utilisez un serveur d'application JBoss, il faut dire à JBoss de ne pas utiliser sont propre module log4j. Pour cela, on ajoute un fichier d'exclusion dans l'arborescence projet comme ceci:


Le fichier contient le code suivant:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
 <deployment>
  <!-- Exclusions allow you to prevent the server from automatically adding some dependencies -->
  <exclusions>
   <module name="org.apache.log4j" />
  </exclusions>
 </deployment>
</jboss-deployment-structure>

Ensuite il ne reste plus qu'a inserer des logs aux endroits stratégique du code de la manière suivante:

public class Dao {
 private static Logger mLogger = Logger.getLogger(Dao.class);
 private static Dao dao = null;

 public static Dao getInstance() {
  if (Dao.dao == null)
   Dao.dao = new Dao();
  return Dao.dao;
 }
...
public void insertImage(String imageUrl, byte[] image) {
  mLogger.debug("Insertion d'une image: " + imageUrl);
  Connection con = getConnection();
  try {
...

Enfin, on peux aller consulter les logs grace à l'interface de consultation mise en place dans le DSE:

http://localhost:8983/demos/log_search/


(Pour que l'interface fonctionne, il faut suivre les instructions suivantes: http://www.datastax.com/docs/datastax_enterprise3.0/solutions/log4j_logging )

Enjoy :)

Aucun commentaire:

Enregistrer un commentaire