22 novembre 2017

Le format des logs des webapps de HRaSpace

Les fichiers log4j.properties des webapps de HRaSpace donne la possibilité de personnaliser le format des messages affichés. Ce fichier est stocké dans le répertoire WEB-INF/conf de chaque webapp.

Si vous complétez ainsi le paramètre "fileappender.layout.conversionPattern" vous obtiendrez en plus de l'adresse IP le code de l'utilisateur. Ex :
log4j.appender.fileappender.layout.conversionPattern = %d [%15X{ip.address}][%25X{user.id}] %-5p %c{1} - %m%n

En ajoutant [%64X{virtual.session.id}] vous afficherez l'identifiant de session HRAccess - que l'on peut retrouver dans la table MX10 et dans le fichier stop_watch.log de openhr... Pour avoir l'équivalent sous Apache, ajoutez %{com.hraccess.portal.connection.id}C au LogFormat.

Avec ce paramètre le fichier log est réinitialisé à chaque démarrage de l'application :
log4j.appender.fileappender.append = false

En le modifiant comme ceci il n'est plus écrasé mais daté (pensez a purger les fichiers les plus anciens) :
log4j.appender.fileappender.append = true
log4j.appender.fileappender.datePattern = '.' yyyy-MM-dd

En modifiant le "consoleappender.layout.consoleappender" ce sont les messages renvoyés dans le log général "catalina.out" qui seront concernés :
log4j.appender.consoleappender.layout.conversionPattern=...

Y ajouter  ${com.hraccess.webapp.basename} permet d'afficher le nom de l'application source.

En supprimant la sortie "console" les messages de la webapp ne seront plus envoyés dans le catalina.out :
log4j.logger.com.hraccess = info, consoleappender, fileappender


Attention : en cas de mise à jour de la politique de journalisation via la console d'administration, le fichier est écrasé et vos mises à jour sont perdues ...

2 commentaires:

  1. Hi, thanks for the post. I think you should mention that the settings for each log4j.properties are gone when you use the "hr-admin-console" and increase/decrease the log level.

    Kind regards and thanks for the blog :-)

    RépondreSupprimer
  2. Thanks for mention my comment... I have another hint for the logs....

    We create a little shell script to have in all webapps the same kind of log file.
    The idea is to have INFO to the console so it will available in catalina.out and DEBUG to a separate file.

    To achieve this, we deleted all definitions of consoleappend and fileappender, and changed the default to DEBUG.

    #!/bin/sh
    rm -Rf ../logs/* ../work/* ../webapps/*/WEB-INF/work/* ../webapps/*/WEB-INF/logs/*
    dos2unix ../webapps/*/WEB-INF/conf/log4j* > /dev/null 2>&1


    # delete all Consoleappender and Fileappender definitions
    sed -i '/log4j.appender.consoleappender.*/d' ../webapps/*/WEB-INF/conf/log4j*
    sed -i '/log4j.appender.fileappender*/d' ../webapps/*/WEB-INF/conf/log4j*

    # Add the consoleappender
    sed -i -e "\$alog4j.appender.consoleappender = org.apache.log4j.ConsoleAppender" ../webapps/*/WEB-INF/conf/log4j*
    sed -i -e "\$alog4j.appender.consoleappender.layout = org.apache.log4j.PatternLayout" ../webapps/*/WEB-INF/conf/log4j*
    sed -i -e "\$alog4j.appender.consoleappender.Threshold = INFO " ../webapps/*/WEB-INF/conf/log4j*
    sed -i -e "\$alog4j.appender.consoleappender.layout.conversionPattern = %d [%-5p] (\${com.hraccess.webapp.basename}) %C{1} %M:%L %m%n" ../webapps/*/WEB-INF/conf/log4j*

    # add the fileappender with a DailyROllingFileAppender
    sed -i -e "\$alog4j.appender.fileappender = org.apache.log4j.DailyRollingFileAppender" ../webapps/*/WEB-INF/conf/log4j*
    sed -i -e "\$alog4j.appender.fileappender.File = \${catalina.home}/webapps/\${com.hraccess.webapp.basename}/WEB-INF/logs/\${com.hraccess.webapp.basename}.log" ../webapps/*/WEB-INF/conf/log4j*
    sed -i -e "\$alog4j.appender.fileappender.MaxFileSize = 20MB" ../webapps/*/WEB-INF/conf/log4j*
    sed -i -e "\$alog4j.appender.fileappender.MaxBackupIndex = 9" ../webapps/*/WEB-INF/conf/log4j*
    sed -i -e "\$alog4j.appender.fileappender.DatePattern = '_'yyyy-MM-dd'.log'" ../webapps/*/WEB-INF/conf/log4j*
    sed -i -e "\$alog4j.appender.fileappender.layout = org.apache.log4j.PatternLayout" ../webapps/*/WEB-INF/conf/log4j*
    sed -i -e "\$alog4j.appender.fileappender.Threshold = DEBUG " ../webapps/*/WEB-INF/conf/log4j*
    sed -i -e "\$alog4j.appender.fileappender.layout.conversionPattern = %d [%-5p] (\${com.hraccess.webapp.basename}) %C{1} %M:%L %m%n" ../webapps/*/WEB-INF/conf/log4j*

    sed -i 's/log4j.logger.com.hraccess *=.*/log4j.logger.com.hraccess = DEBUG, consoleappender, fileappender/g' ../webapps/*/WEB-INF/conf/log4j*

    Now we have the following format in catalina.out:
    Date Time [LEVEL] (webapp.basename) Class Method:Line Message

    e.g.:
    2017-12-02 14:42:19,069 [INFO ] (hr-rich-client) com.hraccess.log.ophrc.connection info:220 OPHRC1018 Listing available features ...


    This kind of log is only useful on a DEV environment because of performance issues using %C and %L for the PatternLayout!

    kind regards
    Andreas

    RépondreSupprimer