Redmine production.log to uri log

But.. It doesn't work well. (Because the sequence of line is not arranged.)
It is better way to use 'redmine_access_logger' plugin than this

#!/bin/bash

# Setting
LOG_FILE=/redmine-3.3.3/log/production.log
#LOG_FILE=mylog.log
PIDFILE=/var/run/redmine_info_log.pid

# Program Variables
OUTPUT_LOGDIR=`dirname ${LOG_FILE}`

OPT_DEBUG=0
URI_FILTER_REGEX="(^\"/people/avatar)|(^/attachments/thumbnail/)|(^\"/issues/.*\.xml)"

function echo_log()
{
  if [ "$2" != "" ]; then
    echo "$1" >> $2
  else
    echo "$1"
  fi
}


if [ -f $PIDFILE ]
then
  PID=$(cat $PIDFILE)
  ps -p $PID > /dev/null 2>&1
  if [ $? -eq 0 ]
  then
    echo "Process already running"
    exit 1
  else
    ## Process not found assume not running
    echo $$ > $PIDFILE
    if [ $? -ne 0 ]
    then
      echo "Could not create PID file"
      exit 1
    fi
  fi
else
  echo $$ > $PIDFILE
  if [ $? -ne 0 ]
  then
    echo "Could not create PID file"
    exit 1
  fi
fi

tail -F ${LOG_FILE} 2>/dev/null |
while read MSG_LOG; do
  if [ "${OUTPUT_LOGDIR}" != "" ];then
    OUTPUT_FILE="${OUTPUT_LOGDIR}/access_uri_`date +%Y%m%d`.log"
  else
    OUTPUT_FILE=""
  fi
  let IS_PRINT=0
  MSG_ARR=( $MSG_LOG )
  if [[ "${MSG_LOG}" =~ ^"Started " ]];  then
    MSG_URI=${MSG_ARR[2]}
    MSG_TS_DATE="${MSG_ARR[6]}"
    MSG_TS_TIME="${MSG_ARR[7]}"
    MSG_USER_IP=${MSG_ARR[4]}
    let IS_PRINT=1
  elif [[ "${MSG_LOG}" =~ ^"Current user: " ]];  then
    MSG_USER_ID="${MSG_ARR[2]}${MSG_ARR[3]}"
    let IS_PRINT=2
  fi
  if [ "${OPT_DEBUG}" == "1" ]; then
    echo_log "DEBUG: ${MSG_LOG}" ${OUTPUT_FILE}
  fi
  if [ ${IS_PRINT} -eq 2 ]; then
    let IS_FILTERD=0
    OUT_MSG="${MSG_TS_DATE} ${MSG_TS_TIME} ${MSG_USER_ID} ${MSG_USER_IP} ${MSG_URI}"
    OUT_MSG_ARR=( ${OUT_MSG} )
    # URI Ignore List Check
    if [[ ${MSG_URI} =~ $URI_FILTER_REGEX ]] ; then
      let IS_FILTERD=1
    fi
    if [ ${IS_FILTERD} -eq 0 ]; then
      if [ ${#OUT_MSG_ARR[@]} -eq 5 ]; then
        echo_log "${OUT_MSG}" ${OUTPUT_FILE}
      else
        if [ "${OPT_DEBUG}" == "1" ]; then
          echo_log "DEBUG: Error ${MSG_LOG}" ${OUTPUT_FILE}
        fi
      fi
    fi
    MSG_URI=""
    MSG_TS_DATE=""
    MSG_TS_TIME=""
    MSG_USER_IP=""
    MSG_USER_ID=""
  fi
done

rm $PIDFILE
x

Comments

Popular posts from this blog

e1000e 0000:00:1f.6 eno1: Detected Hardware Unit Hang

[WordPress] Change https redirect in DB.

sanitize on in CMakeLists.txt