ユーザ用ツール

サイト用ツール


Sidebar

ミドルウェア系:apacheモジュール:pipedlogの実装

PipedLogの実装

こんな感じでかけば良い。

conf内での記述を決定

まずは、

LogPath "| hoge.pl"

or

LogPath "/tmp/hoge.log"

''LogPath''に渡された引数の処理を書く

みたいな実装を想定して、そこの処理を以下のように書く。

ファイルポインタの作成

static int resource_checker_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *server)
{
    RESOURCE_CHECKER_CONF *conf = ap_get_module_config(server->module_config, &resource_checker_module);
 
    if (*conf->log_filename == '|') {
        piped_log *pl;
 
        pl = ap_open_piped_log(p, conf->log_filename + 1);
        if (pl == NULL) {
            ap_log_error(APLOG_MARK
                , APLOG_ERR
                , 0
                , NULL
                , "%s ERROR %s: rchecker pipe log oepn failed: %s"
                , MODULE_NAME
                , __func__
                , conf->log_filename
            );
 
            return OK;
        }
 
        mod_resource_checker_log_fp = ap_piped_log_write_fd(pl);
 
    } else {
        if(apr_file_open(&mod_resource_checker_log_fp, conf->log_filename, APR_WRITE|APR_APPEND|APR_CREATE,
               APR_OS_DEFAULT, p) != APR_SUCCESS){
            ap_log_error(APLOG_MARK
                , APLOG_ERR
                , 0
                , NULL
                , "%s ERROR %s: rchecker log file oepn failed: %s"
                , MODULE_NAME
                , __func__
                , conf->log_filename
            );
 
            return OK;
        }
    }
 
    ap_log_perror(APLOG_MARK
        , APLOG_NOTICE
        , 0
        , p
        , "%s %s: %s / %s mechanism enabled."
        , MODULE_NAME
        , __func__
        , MODULE_NAME
        , MODULE_VERSION
    );
 
    resource_checker_initialized = 1;
 
    return OK;
}

bufをファイルポインタに書き出し

で、あとはファイル書き出しと同様にbufに何かいれておいて、以下のようにfpに書き出してやればよい。ちゃんとラッパーされたAPIになっている。

        apr_file_puts(mod_resource_checker_log_buf, mod_resource_checker_log_fp);
        apr_file_flush(mod_resource_checker_log_fp);
ミドルウェア系/apacheモジュール/pipedlogの実装.txt · 最終更新: 2013/04/29 12:16 by matsumoto_r