Apache 自定义日志格式

Apache 自定义日志格式

我正在尝试编写一个奖励系统,如果用户下载完整的文件,他们将获得奖励积分,那么我的日志格式应该是什么。

经过大量搜索后,我明白了这是我第一次做并且以前没有做过自定义日志。

首先我应该编辑哪个文件对于自定义日志,因为我找不到这个东西。我使用的是 ubuntu 服务器,默认安装了 apache、php5 和 mysql

# I use this commands and they work fine  
nano /etc/apache2/apache2.conf
/etc/init.d/apache2 restart

我认为这就是我需要为我的目的做的事情

LogLevel notice
LogFormat "%f %u %x %o" rewards
CustomLog /var/www/logs/rewards_log rewards

这是命令吗?还是缺少了什么?我需要在哪个特定位置添加它?

还有一件事%o是关于发送的文件大小,是否可以只记录特定目录中的文件?或者大小超过 10mb 的文件。

谢谢。

答案1

Apache 服务器文档是你的朋友:http://httpd.apache.org/docs/2.1/mod/mod_log_config.html#customlog

CustomLog 条目要么在全局范围内,要么在虚拟主机中。在 Ubuntu 中,您应该有一个 sites-available 和 sites-enabled 目录。如果您不使用虚拟主机,则应将其放在 /etc/apache2/sites-availabe/default 文件中

据我所知,您无法针对每个目录执行自定义日志,但对于您用来解析 apache 日志的任何内容来说,这应该不难做到

您是否考虑过使用 Web 平台来处理下载并将这些下载记录到数据库?Apache 在这方面似乎很麻烦。

以下是一个例子八哥但你可以在 PHP、ColdFusion 等中做类似的事情:

示例链接:

    <a href="/myna/download.sjs?f=somefile.pdf">

download.sjs页面:

    // assumes a table a called "downloads" in the database "my_app" 
    // also assumes that the user has authenticated and has auth cookie

    var downloads = new Myna.DataManager("my_app").getManager("downloads")

    //clean the filename
    var filename = $req.rawData.f.replace(/\.\.\//g,"");
    //get the data...should really check for failure here
    var data = new Myna.File("file:/var/files/" + filename).readBinary();

    //log the download to the DB
    downloads.create({
        userid:$cookie.getAuthUserId(),
        filename:f,
        ts:new Date()
    })

    //send the binary data to the browser
    $res.prinBinary(data,"application/octet-stream",filename);

相关内容