1. 程式人生 > >輕量web伺服器開發日記09-日誌檔案的實現

輕量web伺服器開發日記09-日誌檔案的實現

主流的伺服器都標配一個日誌檔案,其檔案用於記錄伺服器執行的日常資訊,例如某個時間段的使用者請求連線數、訪問檔案統計數、成功或完成請求連線數、伺服器出錯資訊等等、該檔案主要幫助伺服器管理員更好地瞭解伺服器的執行情況。
具體操作函式實現:
(1)開啟日誌檔案:

int log_file_open(const char *pathname)
{
    int fd = 0;
    fd = open(pathname, O_WRONLY|O_APPEND|O_CREAT);
    return fd;
}

(2)往日誌檔案中寫入資訊:

int log_file_writen(char
*logfile,char *filename, int *line, const char *fmt, ...) { /* open the log_file and init it */ const char *pathname; int fd; char *path = logfile; fd = log_file_open(path); if(fd == -1) { return -1; } va_list ap; time_t timep; char *time_string = calloc
(1,256), *ptr = calloc(1,1024); char *buf1; buf1 = calloc(1, 64); int len = 0; time(&timep);//取得當地時間 struct tm *timeinfo; timeinfo = localtime(&timep); strftime(time_string, 256, "%Y年%m月%d日 %H時%M分%S秒", timeinfo); //建立字串時間戳 string_append(ptr, strlen(ptr), time_string, strlen
(time_string)); string_append(ptr, strlen(ptr), "(", strlen("(")); string_append(ptr, strlen(ptr), filename, strlen(filename)); string_append(ptr, strlen(ptr), ":", strlen(":")); int_to_string(buf1, line); string_append(ptr, strlen(ptr), buf1, strlen(buf1)); len = string_append(ptr, strlen(ptr), ")", strlen(")")); for(va_start(ap, fmt); *fmt; fmt++) { int d; char *s; char *buf; buf = calloc(1, 64); //off_t o; switch(*fmt) { /* string */ case 's': case 'S': s = va_arg(ap, char *); string_append(ptr, strlen(ptr), " ", strlen(" ")); string_append(ptr, strlen(ptr), s, strlen(s)); break; /* int(digital) */ case 'd': case 'D': d = va_arg(ap, int); int_to_string(buf, d); string_append(ptr, strlen(ptr), " ", strlen(" ")); string_append(ptr, strlen(ptr), buf, strlen(buf)); break; case '(': case ')': case '<': case '>': case ',': case ' ': *buf = *fmt; string_append(ptr, strlen(ptr), buf, strlen(buf)); break; } va_end(ap); } *(ptr + strlen(ptr)) = '\r'; *(ptr + strlen(ptr) + 1) = '\n'; *(ptr + strlen(ptr) + 2) = '\0'; writen(fd, ptr,strlen(ptr)); free(ptr); free(time_string); close(fd); return 0; }

下面是(2)中呼叫到的操作函式實現:

//將整型轉換為字元
int int_to_string(char *buf, int val)
{ 
    char swap;
    char *fin;
    int temp = val;
    if(temp < 0)
    {
        *(buf++) = '-';
        temp = -temp;
    }
    fin = buf;
    while(temp > 9)
    {
        *fin = 48 + (temp % 10);
        fin++;
        temp = temp / 10;
    }
    *(fin) = 48 + temp;
    *(fin + 1) = '\0';
    while(buf < fin)
    {
        swap = *fin;
        *fin = *buf;
        *buf = swap;
        buf++;
        fin--;
    }
    return 0;
}

//往套接字描述符中寫n個位元組
 size_t writen(int fd, const void *vptr, size_t n)
{
    size_t nleft;
    ssize_t nwritten;
    const char *ptr;
    ptr = vptr;
    nleft = n;
    while(nleft > 0)
    {
        if((nwritten = write(fd, ptr, nleft)) <= 0)
        {
            if(nwritten < 0 && errno == EINTR)
                nwritten = 0;
            else
                return -1;
        }
        nleft -= nwritten;
        ptr += nwritten;
    }
    return n;
}

//在字串a的末尾新增字串b
int string_append(char *a, size_t a_len, char *b, size_t b_len)
{   
    int i;
    for(i = 0;i <= b_len; i++)
    {
        *(a + a_len + i) = *(b + i);
    }
    return (a_len + b_len + 2);
}

效果例子:
19時35分19秒(test.c:69) head:accept has text/html

相關推薦

web伺服器開發日記09-日誌檔案實現

主流的伺服器都標配一個日誌檔案,其檔案用於記錄伺服器執行的日常資訊,例如某個時間段的使用者請求連線數、訪問檔案統計數、成功或完成請求連線數、伺服器出錯資訊等等、該檔案主要幫助伺服器管理員更好地瞭解伺服器的執行情況。 具體操作函式實現: (1)開啟日誌檔案:

web伺服器開發日記01-antweb伺服器介紹

我是一名大學生,對網路程式設計頗感興趣,以致我在此期間開發一個輕量級web伺服器來娛樂下,該伺服器是執行在Unix系統,使用C語言編寫的程式。我命名它為antweb。 大家都知道ant的中文是螞蟻,螞

web伺服器開發日記07-response結構體的實現

在日記06中介紹的request結構體是用於存放請求報文資訊的,而現在我要介紹的response結構體是用於存放伺服器分析request結構體裡的請求報文資訊後得出的響應報文。 (1)request結構體: typedef struct { //

web伺服器開發日記---HTTP請求及響應

HTTP URL (URL是一種特殊型別的URI,包含了用於查詢某個資源的足夠的資訊)的格式如下:http://host[":"port][abs_path] http表示要通過HTTP協議來定位網路資源;host表示合法的Internet主機域名或者IP地址;por

解決:阿里雲應用伺服器CentOS-7.3啟動Tomcat時很卡,一直停留在Deploying web application directory

解決:阿里雲輕量伺服器啟動Tomcat時很卡,一直停留在 Deploying web application directory /usr/tomcat/apache-tomcat-8.0.53/webapps/docs 要等7,8分鐘才能啟動一個專案,真是捉急!! 24-

初識pythonweb框架flask

引入 輸出 urn 使用 簡單 域名 主動 main return 1.使用pip安裝Python包 大多數Python包都使用pip實用工具安裝,使用pyvenv創建的虛擬環境會自動安裝pip。 1.使用pip安裝Flask(其它Python包同理) pip inst

PythonWeb框架Flask使用

執行 express ev配置 github 一個 textfield attribute dem 3.4 Python語言近些年越來越火,其特點是開發迅速,語法簡單,可移植等。本人就Python3基礎語法寫了Demo:https://github.com/tangthis

阿里雲應用伺服器debian8.9用apache多埠搭建多站點

前幾天想要再搭個網站玩玩,就用阿里的伺服器,apache本地搭建站點和伺服器相差不多,然而卻踩了大坑,差點耗死在這兒。 先進入apache這個目錄,有如下資料夾: 開啟ports.conf,  新增 Listen 埠。 然後進入,sites-available 裡邊, 將000-defau

應用伺服器 訪問jsp頁面就直接下載的問題

出現這個問題實質原因就是Tomcat伺服器就沒有起到作用,執行不了jsp檔案.這個是核心.去排查錯誤!網上查了好幾天了根本沒有解決我的我的問題. 1.網上大部分都說是這個原因 <%@ page language="java" contentType="text/html; charset=U

阿里應用伺服器 Tomcat 注意的地方 Unsupported major.minor version 52.0(unable to load class

本地編譯工程,提交到遠端服務其的tomcat上報這個錯 Unsupported major.minor version 52.0(unable to load class com.cl.business.yx.dao.AnnouncementDAO)   報錯原因 本地編譯是jdk1.8 伺服

阿里雲應用伺服器 怎麼控制怎麼上傳檔案怎麼安裝JDK和Tomcat完成JavaWeb的部署

你是否遇到過這些問題,自己的javaweb專案本地執行一切正常,但是一轉移到阿里伺服器之類的.就出現以下問題. 1 jsp無法解析java類  2 Only a type can be imported. 

應用伺服器安裝 phpMyAdmin

第一步:在phpMyAdmin官方網站http://www.phpmyadmin.net/downloads/下載原始碼包並解壓 cd /usr/local/src wget https://files.phpmyadmin.net/phpMyAdmin/4.6.0/phpMyAdmin-4.6.0-al

ubuntu伺服器搭建個人網站 ---- 阿里雲 應用伺服器配置jdk tomcat mysql

目錄 1.購買雲伺服器 進入阿里雲 www.aliyun.com 可以用支付寶賬號登入,登陸後進入賬號管理->實名認證。還可以進行學生認證。如果進行學生認證的話,可以看到 雲翼計劃。學生優惠購買雲伺服器,9.5元/月。有兩種可供選擇,差別不大

阿里雲應用伺服器mysql開啟遠端訪問

1.進入控制檯,點選防火牆按鈕 2.新增規則 3.新增mysql,埠號3306 4.登入mysql mysql -u root -p mysql 5.設定root使用者遠端連線的密碼為123456 grant all privileges on *.* 

阿里雲應用伺服器 搭建配置詳解

好久沒有更新部落格了,說來也是慚愧沒有養成記錄經驗的習慣。 有很多技術開發同學都想擁有自己的伺服器用來搭建個人網站,或者展示作品,但是怕租上不會配置或者嫌配置繁瑣難下決定。 廢話不多說直接進入正題,前兩天幫朋友配置一臺阿里雲的輕量應用伺服器(注意不是雲伺服器ECS但是大同小異)。 伺服器規格

web伺服器開發遇到的坑

1. ## 解決‘ORA-12505, TNS:listener does not currently know of SID given in connect descriptor’ ## **解決方法:** 開啟Oracle的 listener.or

大話WEB伺服器開發

本文純碎處於個人理解不可做科學依據。 前因 工作這麼多年斷斷續續看過一些有web伺服器程式設計的書,但是一直沒有把自己的理解整理起來,今天索性就做個總結,記得第一次接觸web網頁程式設計是02年,那時學校裡計算機比賽,學校有個哥們用ASP寫了一個電子商務的網站,記憶中

Windows10 進行遠端桌面連線阿里雲-應用伺服器報錯: CredSSP 加密 Oracle 修正

Win+R,輸入 mstsc。 進入遠端桌面連線,我是連線阿里雲-輕量應用伺服器的,所以填的是伺服器的公網 IP。 輸入使用者名稱和密碼。 報錯:CredSSP 加密 Oracle 修正。 解決: Win+R,輸入 gpedit.msc。 選擇 計算機配

應用伺服器MySQL遠端連線踩坑

輕量應用伺服器MySQL遠端連線踩坑 不算是給阿里雲打廣告吧,因為被阿里雲的“雲伺服器ECS” 和 “輕量應用伺服器”搞的很蛋疼。很多年前,阿里雲的學生機“雲翼計劃”預設就只有“雲伺服器ECS”,所以上個月我準備去買一年的學生機的時候,幾乎就選擇性忽略框框中的內容,選擇系統映象就直接

linux web伺服器開發技術文件

Robin(wrhttpd) is a very simple and very fast web server, it's object for ajax and Web Application ,and of course it's cross-platform,