2014-02-22 49 views
0

我有下面的C代碼,它會向我發送錯誤的電子郵件通知。在服務器上寫一個簡單的Flat文件的C代碼

現在我正在尋找,在Unix服務器本身上爲所有這些錯誤消息創建一個平面文件。

/* write the formatted message to the temp email file and close the file. 
*/ 
    fputs(szEmailMsg, fpTmpMsgFile); 
if (ferror(fpTmpMsgFile)) { 
    dce_dbgwrite(DCE_LOG_ERROR, 
     "Child %d: write to %s for email message failed: %s", iThisChild, 
     pszTmpMsgFile, strerror(errno)); 
    dce_dbgwrite(DCE_LOG_ERROR, "Child %d: email message = <%s>", 
     iThisChild, szEmailMsg); 
    return; 
} 
fclose(fpTmpMsgFile); 
/* email the message and remove the temp email file. 
*/ 
    sprintf(szCmd, 
    "/usr/bin/mail -s\"lg_a17_srvr error\" %s < %s", 
     pszSupportAddr, pszTmpMsgFile); 
     if (system(szCmd) != 0) { 
     dce_dbgwrite(DCE_LOG_ERROR, 
      "Child %d: command to email error message failed: %s", iThisChild, 
     strerror(errno)); 
    dce_dbgwrite(DCE_LOG_ERROR, "Child %d: email command = %s", iThisChild, 
     szCmd); 
    dce_dbgwrite(DCE_LOG_ERROR, "Child %d: email message = <%s>", 
     iThisChild, szEmailMsg); 
} 
remove(pszTmpMsgFile); 
} 

這pszTmpMsgFile文件包含了這些信息,希望只是它removlable之前添加代碼,以創建像>>含有該文件的所有信息,並將其發送到不同的UNIX目錄error.log中新的文件名..說:home/bin/letgen 在此先感謝!

回答

1

您還沒有提供足夠的詳細信息來明確您的代碼在做什麼(例如,dce_dbgwrite()是做什麼的?它是否寫入文件?數據庫?)。如果沒有這些信息,我不能完全回答你的問題,但我會留下下面的例子來說明我認爲你在問什麼。

如果我正確理解您的問題,您希望將錯誤字符串szEmailMsg寫入名爲error.log的錯誤文件。您還希望日誌存在於兩個位置。

以下函數會將一個字符串附加到文件中。如果該文件不存在,它將被創建。

#include <stdio.h> 

void append_data_to_file(const char* path, const char* data) 
{ 
    // Open the file to append data, creates file if it does not exist. 
    FILE f = fopen(path, "a"); 

    // Only continue if the previous statement succeeded 
    if (f != NULL) 
    { 
     // Write (append) the data to the file 
     fputs(data, f); 

     // Close the file 
     fclose(f); 
    } else { 
     printf("Failed to open file %s", path); 
    } 
} 

然後,您可以創建以下包裝函數寫日誌文件:

void log_error(const char* data) 
{ 
    // Write to the normal error log 
    append_data_to_file("error.log", data); 

    // Add a new line for formatting, to prevent logs from being bunched up together 
    // This part is optional. \n means new line. 
    append_data_to_file("error.log", "\n\n"); 

    // The second location 
    append_data_to_file("home/bin/letgen/error.log", data); 
    append_data_to_file("home/bin/letgen/error.log", "\n\n"); 
} 

記錄一個錯誤,剛纔補充一點:

log_error(szEmailMsg); 

我沒有測試了這個代碼,但你應該知道該怎麼做。