Skip to main content

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

[scapy] Linux-Cooked pcap to ethernet

# The pcap file formatted by "Linux cooked" # tcpdump -r myfile.pcap -nn reading from file event1.pcap, link-type LINUX_SLL (Linux cooked) ... ... # step1. read myfile.pcap pkts = rdpcap("myfile.pcap"); # step2. read myfile.pcap pkts = [Ether(src='00:11:22:33:44:55', dst='22:33:44:55:66:77')/pkt[1:] for pkt in pkts] # step3. modify IP address and recalculate chksum for pkt in pkts:  pkt[1].dst='192.168.1.10';  pkt[1].src='192.168.1.1';  del pkt[IP].chksum  del pkt[UDP].chksum # step4. packet send sendp(pkts[0]); # step5. save pcap  wrpcap("output.pcap",pkts); # tcpdump -r output.pcap -nn reading from file output.pcap, link-type EN10MB (Ethernet) ... ... # pkt[1:] : It means IP layer 1) Before: Linux cooked / IP / UDP / UDP-Data 2) After: Ethernet / IP / UDP / UDP-Data

[WordPress] Change https redirect in DB.

If you make an https redirect without thinking about SSL configuration: Check DB SELECT * from wp_options where option_name IN ('siteurl', 'home'); Update UPDATE wp_options SET option_value = REPLACE(option_value, 'https://your_domain', 'http://your_domain') WHERE option_name IN ('siteurl', 'home');

[bash-script/gcc] check warning of make within git-diff of commit

When you need check "make warning" in specific commits, you can use this script to check just in some commits. This script takes some steps. step1. You must know your commit hash. : like abcd1234 step2. Checkout to your commit.  Like this, git checkout abcd1234. step3. You need output file that run make.  Try to run command "make &> myoutput" step4. Then run this. ./new_warning.sh abcd1234 myoutput You can download this script :  new_warning.sh