linux中syslog自定義存儲路徑的方法

方法一:web

一、 su  //切換到root用戶下
二、 cp /etc/sysconfig/rsyslog /etc/sysconfig/rsyslogbak //備份
vim /etc/sysconfig/rsyslog
修改SYSLOGD_OPTIONS: SYSLOGD_OPTIONS=」-r –x –m  0」
三、 cp /etc/rsyslog.conf /etc/rsyslog.confbak  //備份
vim /etc/rsyslog.conf
加入: 
local0.* /var/log/my.log   //local0-local7是用戶自定義,只須要在openlog時的最後一個參數指定爲對應的LOG_LOCAL0-LOG_LOCAL7便可
mkdir /var/log/my.log //創建要存儲日誌的目錄
四、 重啓服務器
/etc/init.d/rsyslog restart
五、測試代碼
#include <syslog.h>
int main (int argc, char **argv)
{
  Openlog (「mymsg」, LOG_CONS | LOG_PID,  LOG_LOCAL0);
  syslog (LOG_EMERG, "This is a syslog test message generated by program ' %s'/n", argv[0]);
  closelog();
  return 0;
}vim

六、查看 cat /var/log/my.log服務器

 

方法二:多線程

這個方法比較簡便不須要配置日誌服務器,下面是源代碼
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <syslog.h>
#include <assert.h>
#include <stdio.h>
#include <time.h>

int syslog1( )
{
int logfd;
int stder;
time_t t1;
logfd = open( "log.self", O_RDWR | O_CREAT | O_APPEND, 0644 );
assert( -1 != logfd );
/* 保存標準錯誤的文件描述符 */
dup2(STDERR_FILENO,stder);
/* 關閉標準文件描述 */
close( STDERR_FILENO );
/* 把本身建立的文件描述符付給標準出錯 */
dup2( logfd, STDERR_FILENO );
/* 關閉本身的文件描述符 */
close( logfd );
openlog( "syslog2", LOG_PERROR, LOG_DAEMON );
syslog( LOG_DEBUG, "%s\n", ctime(&t1));
/* 恢復標準出錯 */
dup2(stder, STDERR_FILENO);
/* 關閉臨時文件描述符 */
close(stder);
closelog();
return 0;
}

int main()
{
syslog1();
fprintf(stderr,"hello\n");
}併發

 

方法 三測試

使用庫 log4c,但這個是不支持多線程併發的spa

方法四線程

使用zlog庫,這個支持多線程,短小精悍rest

相關文章
相關標籤/搜索