読者です 読者をやめる 読者になる 読者になる

DreamerDreamのブログ

夢想家の夢です。

自作アプリのログをメールで自動送信

僕のRaspberryyPiはSDカードのアクセスを減らす為に/dev/shm領域へ自作アプリのログを残すようにしている。30秒毎に読み出すCPU温度のログなんてSDカードに書き込んでたらすぐカードがダメになっちゃいそうなのでこのような方式にした。

しかしこの場所は電源を切ると消えてしまう。

なので日付が変わると昨日のログをメールで送信して、一定量溜まると消して行くという方法をとった。

 

crontabで0:05時になると昨日のログをアプリ毎に分けてメールで送信するlog_mail.pyを、1:00に過去ログを消すdel_log.pyというアプリを起動させている。

crontab

05 0 * * * python /usr/local/lib/log_mail.py &
00 1 * * * python /usr/local/lib/del_log.py &

 

ログをメールで送信するコード。

importしているのは過去に紹介したコード。

dreamerdream.hateblo.jp

dreamerdream.hateblo.jp

-- log_mail.py --

2016/01/12 前日と当日のログデータを選択して送れるよう更新

2016/01/24 ログのバックアップデータを送ってバックアップを削除するよう更新

#!/usr/bin/python

#coding:utf-8

 

import datetime

import file_mng

import gmail

import time

 

mailadd ="送信先アドレス@gmail.com"

 

def send(day=0):

        logdir = file_mng.get_logdir()

        logfiles = file_mng.search_log(logdir, str(day))

 

        for st in logfiles:

                sp = st.rsplit("/",2)

                apl = sp[1]

                day = sp[2]

                subtitle = "LOG[" + apl + "]" + day

                file = file_mng.load(st)

                body = ""

                for s in file:

                        body += s + "\n"

                gmail.send(mailadd, subtitle, body)

                time.sleep(1)

 

def today():

        day = file_mng.get_today()

        send(day)

 

def yesterday():

        day = file_mng.get_yesterday()

        send(day)

 

def send_tmp(day = 0):

        logdir = file_mng.get_logdir_tmp()

        logfiles = file_mng.search_log(logdir, str(day))

        for st in logfiles:

                sp = st.rsplit("/",2)

                apl = sp[1]

                day = sp[2]

                subtitle = "TMP_LOG[" + apl + "]" + day

                file = file_mng.load(st)

                body = ""

                for s in file:

                        body += s + "\n"

                gmail.send(mailadd, subtitle, body)

                time.sleep(1)

 

def del_tmp():

        file_mng.del_logs_tmp()

 

def tmp_check():

        if file_mng.is_tmp_logs() is True:

                day = file_mng.get_yesterday()

                send_tmp(day)

                day = file_mng.get_today()

                send_tmp(day)

                del_tmp()

 

if __name__=='__main__':

        tmp_check()

        yesterday()

        #today()

 

ログを消すコードlog_num変数で残しておくログの数を指定してある。

-- del_log.py --

#!/usr/bin/python coding:utf-8

import file_mng

import gmail

 

logdir = file_mng.get_logdir()

log_num = 10

 

def deller():

        logdirs = file_mng.search_log(logdir)

        for dir in logdirs:

                logfiles = file_mng.search_files(dir + "/*")

                logfiles.sort()

                logfiles.reverse()

                filecount = 0

                for logfile in logfiles:

                        filecount += 1

                        if log_num < filecount:

                                file_mng.del_file(logfile)

 

if __name__=='__main__':

        deller()

 

以上。