導航:首頁 > 操作系統 > linuxc日誌類

linuxc日誌類

發布時間:2022-08-21 18:57:56

A. linux下C語言編程怎麼列印日誌

我們的程序一般都會產生輸出信息。但是伺服器程序一般卻不希望輸出信息到屏幕上,因為沒有人盯著你的程序執行。所以我們要把一些信息寫成日誌文件,正常情況下運行程序的人不用關心日誌里的內容,只有在出現問題的時候才會查看日誌文件里的內容以確定問題所在。
但如果我們的程序要自己生成一個文件來保存日誌卻不是好主意,因為這一方面增加了維護程序運行的人的負擔,另一方面自己維護起系統來也多有不便。
在Linux系統中有一個系統日誌,通常放在/var/log目錄下,比如文件名是syslog的,系統中的一些程序產生的日誌信息都會存放到這個文件里。日誌文件有固定的格式,比如第1列是消息產生的時間,第2列是機器名(因為日誌記錄程序支持遠程連接),第3列是標記信息(一般就是程序名稱)等。而且對應的有一些工具來對這個日誌進行維護,比如通過輪回機制保證日誌文件大小不會把磁碟空間占盡。所以我們把自己程序的信息也寫到這個系統日誌里是比較好的想法。
在GNU C語言庫提供的內容中,有介面可以用來做這件事。用下面的命令查看:

nm -D /lib/libc.so.6 | grep log

可以看到一些調用:

000b9410Tcloselog
0008b870Tgetlogin
0008b960Tgetlogin_r
000d0180T__getlogin_r_chk
000bd190Tklogctl
00027450T__open_catalog
000b9380Topenlog
0008bae0Tsetlogin
000b8b80Tsetlogmask
000b9350Tsyslog
000b9320T__syslog_chk
000b92f0Tvsyslog
000b8da0T__vsyslog_chk

這裡面的三個函數openlog, syslog, closelog是一套系統日誌寫入介面。另外那個vsyslog和syslog功能一樣,只是參數格式不同。
程序的用法示例代碼如下:

#include<syslog.h>
intmain(intargc,char**argv)
{
openlog("MyMsgMARK",LOG_CONS|LOG_PID,0);
syslog(LOG_DEBUG,
"'%s' ",
argv[0]);
closelog();
return0;
}

編譯生成可執行程序後,運行一次程序將向/var/log/syslog文件添加一行信息如下:

Feb1208:48:38localhostMyMsgMARK[7085]:'./a.out'

Feb 12 08:48:38 localhost MyMsgMARK[7085]: This is a syslog test message generated by program './a.out'

LOG_CONS
.

LOG_NDELAY
Opentheconnectionimmediately(normally,).

LOG_NOWAIT
Don』.(TheGNUClibrarydoesnotcreatea
childprocess,.)

LOG_ODELAY
TheconverseofLOG_NDELAY;()iscalled.(Thisisthedefault,andneed
notbespecified.)

LOG_PERROR
(NotinSUSv3.)Printtostderraswell.

LOG_PID
IncludePIDwitheachmessage.

第三個參數指明記錄日誌的程序的類型。

syslog函數及參數
syslog函數用於把日誌消息發給系統程序syslogd去記錄,此函數原型是:
void syslog(int priority, const char *format, ...);
第一個參數是消息的緊急級別,第二個參數是消息的格式,之後是格式對應的參數。就是printf函數一樣使用。

如果我們的程序要使用系統日誌功能,只需要在程序啟動時使用openlog函數來連接syslogd程序,後面隨時用syslog函數寫日誌就行了。

另外,作為syslog的替代程序的新一代工具是syslog-ng,syslog-ng具有很強的網路功能,可以方便地把多台機器上的日誌保存到一台中心日誌伺服器上。

B. 查看linux日誌的工具有哪些

linux 日誌查看
tail、head、 cat、tac、sed、less、echo
1、命令格式: tail [必要參數] [選擇參數] [文件]
-f 循環讀取
-q 不顯示處理信息
-v 顯示詳細的處理信息
-c<數目> 顯示的位元組數
-n<行數> 顯示行數
-q, --quiet, --silent 從不輸出給出文件名的首部
-s, --sleep-interval=S 與-f合用,表示在每次反復的間隔休眠S秒
tail -n 100 catalina.out 查詢日誌尾部最後100行的日誌;
tail -n +100 catalina.out 查詢100行之後的所有日誌;
tail -fn 100 catalina.out 循環實時查看最後100行記錄(最常用的)
配合著grep用, 例如 : tail -fn 100 catalina.out | grep -- '關鍵字'
如果一次性查詢的數據量太大,可以進行翻頁查看,
例如:tail -n 6000 catalina.out |more -100 可以進行多屏顯示(ctrl + f 或者 空格鍵可以快捷鍵)
--------------------------------------------------------------------------------------------------------------------------

2、head
head -n 1000 catalina.out //查詢日誌文件中的頭10行日誌;head -n -1000 catalina.out //查詢日誌文件除了最後10行的其他所有日誌;

head其他參數與tail 類似
-----------------------------------------------------------------------------------------------------

3、cat

cat 是由第一行到最後一行連續顯示在屏幕上

$ cat filename // 一次顯示整個文件
$ cat > filename //從鍵盤創建一個文件
$cat file1 file2 > file //將幾個文件合並為一個文件,只能創建新文件,不能編輯已有文件.
$cat -n textfile1 > textfile2 //將一個日誌文件的內容追加到另外一個 :
$cat : >textfile2 // 清空一個日誌文件
注意: >意思是創建, >>是追加。
cat其他參數與tail 類似
----------------------------------------------------------------------------------------------------------------------------------------

4.tac

tac 則是由最後一行到第一行反向在螢幕上顯示出來
--------------------------------------------------------------------------------------------------------------------------------------
5.sed

這個命令可以查找日誌文件特定的一段 , 也可以根據時間的一個范圍查詢

//按照行號
sed -n '2,100p'catalina.out
//這樣你就可以只查看文件的第5行到第10行。
//按照時間段
sed -n '/2019-01-17 10:07:10/,/2019-02-14 16:54:01/p'catalina.out

-------------------------------------------------------------------------------------------------

6.less

less log.log

shift + G 命令到文件尾部 然後輸入 ?加上你要搜索的關鍵字例如 ?1213shift+n 關鍵字之間進行切換

----------------------------------------------------------------------------------------------

附錄1history // 所有的歷史記錄history | grep XXX // 歷史記錄中包含某些指令的記錄history | more // 分頁查看記錄history -c // 清空所有的歷史記錄!! 重復執行上一個命令

查詢出來記錄後選中 :!323

-------------------------------------------------------------------------------------------------------------

7、echo

輸出 echo "12345"

---------------------------------------------------------------------------------------------------------

附錄2

linux日誌文件說明
/var/log/message 系統啟動後的信息和錯誤日誌,是Red Hat Linux中最常用的日誌之一
/var/log/secure 與安全相關的日誌信息
/var/log/maillog 與郵件相關的日誌信息
/var/log/cron 與定時任務相關的日誌信息
/var/log/spooler 與UUCP和news設備相關的日誌信息
/var/log/boot.log 守護進程啟動和停止相關的日誌消息
/var/log/wtmp 該日誌文件永久記錄每個用戶登錄、注銷及系統的啟動、停機的事件

---------------------------------------------------------------------------------------------------------------------

附錄3

tomcat運行日誌
1、先切換到:cd usr/local/tomcat3/logs
2、tail -f catalina.out
3、這樣運行時就可以實時查看運行日誌了

Ctrl+c 是退出tail命令。 alt+E+R重置

C. linux如何看系統日誌

last
-a 把從何處登入系統的主機名稱或ip地址,顯示在最後一行。
-d 指定記錄文件。指定記錄文件。將IP地址轉換成主機名稱。
-f <記錄文件> 指定記錄文件。
-n <顯示列數>或-<顯示列數> 設置列出名單的顯示列數。
-R 不顯示登入系統的主機名稱或IP地址。
-x 顯示系統關機,重新開機,以及執行等級的改變等信息

以下看所有的重啟、關機記錄

last | grep reboot
last | grep shutdown
history
列出所有的歷史記錄:

[zzs@Linux] # history
只列出最近10條記錄:

[zzs@linux] # history 10 (注,history和10中間有空格)
使用命令記錄號碼執行命令,執行歷史清單中的第99條命令

[zzs@linux] #!99 (!和99中間沒有空格)
重復執行上一個命令

[zzs@linux] #!!
執行最後一次以rpm開頭的命令(!? ?代表的是字元串,這個String可以隨便輸,Shell會從最後一條歷史命令向前搜索,最先匹配的一條命令將會得到執行。)

[zzs@linux] #!rpm
逐屏列出所有的歷史記錄:

[zzs@linux]# history | more
立即清空history當前所有歷史命令的記錄

[zzs@linux] #history -c
cat, tail 和 watch
系統所有的日誌都在 /var/log 下面自己看(具體用途可以自己查,附錄列出一些常用的日誌)

cat /var/log/syslog 等
cat /var/log/*.log
tail -f
如果日誌在更新,如何實時查看 tail -f /var/log/messages

還可以使用 watch -d -n 1 cat /var/log/messages

-d表示高亮不同的地方,-n表示多少秒刷新一次。

該指令,不會直接返回命令行,而是實時列印日誌文件中新增加的內容,
這一特性,對於查看日誌是非常有效的。如果想終止輸出,按 Ctrl+C 即可。

除此之外還有more, less ,dmesg|more,這里就不作一一列舉了,因為命令太多了,關鍵看個人喜好和業務需求.個人常用的就是以上那些

linux日誌文件說明
/var/log/message 系統啟動後的信息和錯誤日誌,是Red Hat Linux中最常用的日誌之一
/var/log/secure 與安全相關的日誌信息
/var/log/maillog 與郵件相關的日誌信息
/var/log/cron 與定時任務相關的日誌信息
/var/log/spooler 與UUCP和news設備相關的日誌信息
/var/log/boot.log 守護進程啟動和停止相關的日誌消息
/var/log/wtmp 該日誌文件永久記錄每個用戶登錄、注銷及系統的啟動、停機的事件

D. 配置Linux日誌文件

不要低估日誌文件對網路安全的重要作用,因為日誌文件能夠詳細記錄系統每天發生的各種各樣的事件,用戶可以通過日誌文件檢查錯誤產生的原因,或者在受到攻擊、被入侵時追蹤攻擊者的蹤跡。日誌的兩個比較重要的作用是審核和監測。配置好的Linux的日誌非常強大。對於Linux系統而言,所有的日誌文件在/var/log下。默認情況下,Linux的日誌文件沒有記錄FTP的活動。用戶可以通過修改/etc/ftpacess讓系統記錄FTP的一切活動。

/etc/syslog.conf的格式

Linux系統的日誌文件是可以配置的,在前面的章節中已經介紹了如何定製Apache、wu-ftpd、Sendmail的日誌文件。Linux系統的日誌文件是由/etc/syslog.conf決定的,用戶有必要花時間仔細配置一下/etc/syslog.conf.下面是/etc/syslog.conf的範例:


# Log all kernel messages to the kernlog.
# Logging much else clutters up the screen.
kern.*/var/log/kernlog
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;news.none;authpriv.none;cron.none
/var/log/messages
*.warning/var/log/syslog
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.*/var/log/maillog
# Log cron stuff
cron.*/var/log/cron
# Everybody gets emergency messages, plus log them on another
# machine.
*.emerg
# Save mail and news errors of level err and higher in a
# special file.
uucp,news.crit/var/log/spooler
# Save boot messages also to boot.log
local7.*/var/log/boot.log
# INN
news.=crit /var/log/news/news.crit
news.=err /var/log/news/news.err
news.notice /var/log/news/news.notice

.

可以看出,該配置文件的每一行的第一個欄位列出要被記錄的信息種類,第二個欄位則列出被記錄的位置。第一個欄位使用下面的格式:facility.level[;facility.level…]

此處的faciity是產生信息的系統應用程序或工具,level則是這個信息的重要程度。level的重要程度由低到高依次是:debug(調試消息)、info(一般消息)、notice(值得注意的消息)、warning(警告)、err(一般性錯誤)、crit(嚴重錯誤)、alert(或emerg,緊急情況)。

facility包含有:auth(認證系統,如login或su,即詢問用戶名和口令)、cron(系統執行定時任務時發出的信息)、daemon(某些系統的守護程序的syslog,如由in.ftpd產生的log)、kern(內核的信息)、lpr(列印機的信息)、mail(處理郵件的守護進程發出的信息)、mark(定時發送消息的時標程序)、news(新聞組的守護進程的信息)、user(本地用戶的應用程序的信息)、uucp(uucp子系統的信息)和「*」(表示所有可能的facility)。

將日誌文件記錄到遠程主機

如果有另一個Linux或UNIX系統,那麼可以配置日誌文件,讓其把消息發到另外一個系統並記錄下來。這也是為什麼上面的所有日誌文件都記錄了主機名的原因。要實現這個功能,在該配置文件中,指定一個記錄動作,後面接一個由「@」開頭的遠程系統的主機名,如下例:*.warn;authpriv.notice;auth.notice @bright.hacker.com.cn

同時,還要將接受消息的目的系統設置為允許這種操作。此例主機bright.hacker.com.cn的syslogd守護進程要用-r參數啟動。如果不使用-r參數,則目標主機的syslogd將丟棄這個消息以避免DoS攻擊使硬碟塞滿虛假消息。並且確保目標主機的/etc/service文件必須設置syslog服務所使用的UDP埠514(這也是RedHat Linux默認的設置)。如果syslogd守護進程用了-r和-h參數,那麼,參數-h將允許轉發消息。也就是說,如果系統B的syslogd用了-h參數,這樣,當系統A把消息轉發到系統B後,系統B就把來自系統A和它自己的消息轉發到系統C.

將警告信息發送到控制台

syslogd可以將任何從內核發出的重要程度為emerg或alert的信息發送到控制台。控制台是指虛擬控制台或啟動時加-C參數的xterm.要實現這一功能,在/etc/syslog.conf文件中加上下面一行:kern.emerg /dev/console

這樣,當系統內核發生錯誤而發出消息時,用戶能夠馬上知道並且進行處理。如果用了「*」,就是一旦內核發生錯誤,就將消息發送給所有在線用戶,但只有這個用戶正在登錄的時候才能看到。修改了/etc/syslog.conf文件後,必須重新啟動syslogd守護進程以使配置更改生效,請執行下面的命令:#/etc/rc.d/init.d/syslog restart

E. 請教linux c多線程系統日誌系統的實現

同步和非同步的區別:
1、同步就是說多個任務之間是有先後關系的,一個任務需要等待另一個任務執行完畢才能繼續執行。
2、非同步就是說多個任務之間沒有先後關系,不需要相互等待各做各的事。

同步編程方法:
1、信號量
2、互斥量

非同步無需考慮資源沖突,不需特別處理。

F. 關於Linux下生成運行日誌 的C程序

不知道具體要做什麼。

top > cpu.txt 可以獲得進程內存.cpu的情況

再就是整理cpu.txt裡面的數據

你可以用 grerp 和cut來完成過濾數據。。這只是在一個時段下的

最好寫成一個sh。 因為 top > cpu.txt不會停止

路過

需要每個時段的這些信息。就用循環控制吧。。最後過濾的數據都是txt的

你要穿送到你指定的地方 你可以用socket 。要是用作系統管理可以用mail這個命令傳出去//

txt 怎麼生成xml 我也不知道。 不過linux沒有文件後綴這個概念

到時候 cp cpu.txt cpu.xml 你試試可以不

G. linux c寫入日誌文件系統時間的問題

用我寫的吧 實測過了的 可以直接使用
void WriteSysLog(char *str)
{
char buf[512];
long MAXLEN = 10*1024*1024;//10MB
time_t timep;
FILE *fp = NULL;
struct tm *p;

time(&timep);
p = localtime(&timep);
memset(buf,0,sizeof(buf));
sprintf(buf,"%d-%d-%d %d:%d:%d : ",(1900+p->tm_year),(1+p->tm_mon),\
p->tm_mday,p->tm_hour, p->tm_min, p->tm_sec); //星期p->tm_wday
strcat(buf,str);
strcat(buf,"\r\n");

fp = fopen("./syslog.log","r");
if(fp==NULL)
{
fp = fopen("./syslog.log","w+");
}
else
{
fseek(fp,0,2);
if(ftell(fp) >= MAXLEN)
{
fclose(fp);
fp = fopen("./syslog.log","w+");
//大於10MB則清空原日誌文件
}
else
{
fclose(fp);
fp = fopen("./syslog.log","a");
}
}
fwrite(buf,1,strlen(buf),fp);
fflush(fp);
fsync(fileno(fp));
fclose(fp);
}

H. linux c 日誌庫,最穩定的是哪個

一般情況下,日誌不會影響系統的性能 但是當日誌特別大的時候,對日誌的操作可能會有影響
看看這篇文章,肯定會對你有所幫助的 多伺服器的日誌合並統計——apache日誌的cronolog輪循和webalizer合並統計

I. 求LINUX下,C語言編寫的日誌輸出源碼~

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <dirent.h>
#include <time.h>
#define LOGFILE "./dir_log_0"
int g_Count;
//#define MAXLEN 1024
void WriteDebugLog(char *str);
int main(int argc, char **argv)
{
char str[1024]={0};
strcpy(str,"file no find");
int i=0,j=0;
for (i=0; i<10; i++)
{
for (j=0; j<50; j++)
{
WriteDebugLog(str);
}

}
return 0;
}
void WriteDebugLog(char *str)
{
char buf[2048]={0};
char logFileName[50]={0};
//long MAXLEN = 50*1024*1024;//50MB
int iMax = 1024;//1K
time_t timep;
FILE *fp = NULL;
struct tm *p;
time(&timep);
p = localtime(&timep);
memset(buf,0,sizeof(buf));
sprintf(buf,"[%d-%d-%d %d:%d:%d][DEBUG]",(1900+p->tm_year),(1+p->tm_mon), p->tm_mday,p->tm_hour, p->tm_min, p->tm_sec); //星期p->tm_wday
strcat(buf,str);
strcat(buf," ");
strcpy(logFileName,LOGFILE);
int len = strlen(logFileName);
logFileName[len-1] = Ɔ'+g_Count;
fp = fopen(logFileName,"r");
if(fp==NULL)
{
fp = fopen(logFileName,"w+");
}
else
{
fseek(fp,0,2);//SEEK_END值為2
if( ftell(fp) >= iMax)
{
fclose(fp);

if (g_Count >= 9)
{
logFileName[len-1] = Ɔ'
g_Count=0;
}
else
{
g_Count++;
logFileName[len-1] = Ɔ'+g_Count;
// printf(" %c",Ɔ'+g_Count);
}
fp = fopen(logFileName,"w+");
}
else
{
fclose(fp);
fp = fopen(logFileName,"a");
}
}
fwrite(buf,1,strlen(buf),fp);
fclose(fp);
}

J. 如何實時查看linux下的日誌

1.如下圖所示,先cd到我們需要監控的日誌目錄。

(10)linuxc日誌類擴展閱讀:

Linux完全兼容POSIX1.0標准

這使得可以在Linux下通過相應的模擬器運行常見的DOS、Windows的程序。這為用戶從Windows轉到Linux奠定了基礎。許多用戶在考慮使用Linux時,就想到以前在Windows下常見的程序是否能正常運行,這一點就消除了他們的疑慮。

Linux支持多種平台

Linux可以運行在多種硬體平台上,如具有x86、680x0、SPARC、Alpha等處理器的平台。此外Linux還是一種嵌入式操作系統,可以運行在掌上電腦、機頂盒或游戲機上。2001年1月份發布的Linux 2.4版內核已經能夠完全支持Intel64位晶元架構。同時Linux也支持多處理器技術。多個處理器同時工作,使系統性能大大提高。

閱讀全文

與linuxc日誌類相關的資料

熱點內容
如何讓安卓手機的wifi更快 瀏覽:570
程序員本科生 瀏覽:992
青雲籌碼源碼指標 瀏覽:756
php簡歷商城項目描述 瀏覽:772
加密狗動態函數 瀏覽:501
兩兄弟愛上同一個女主的小說 瀏覽:873
僵屍大尺度 瀏覽:481
空調室外壓縮機響 瀏覽:328
泰國女的販毒電影 瀏覽:834
小電影地址誰有啊 瀏覽:788
開利活塞製冷壓縮機 瀏覽:97
把應用加密的秘密改了 瀏覽:760
姜恩惠治療姐夫 瀏覽:60
android耳機驅動 瀏覽:80
學生事務安卓解壓碼 瀏覽:176
肉文快穿女主 瀏覽:251
數字加密藝術什麼意思 瀏覽:695
android判斷語言 瀏覽:51
加密區離支座距離 瀏覽:47
labview寶典pdf 瀏覽:165