zoukankan      html  css  js  c++  java
  • logrotate日志不轮转呢?_新日志size0

    程序,要管理log,留作日后的后续功能处理和统计和领导需要。因为懒得写,所以直接用了syslog函数,把log交给rsyslog去写了。然后用logrotate每天做日志轮转。
    两种log分别发送到了local6.info和local6.notice。
    
    
    #define logInfo(...) pthread_mutex_lock(&logLock);
    logLen=snprintf(logBuf,sizeof(logBuf),__VA_ARGS__);
    syslog(LOG_INFO,logBuf,logLen);
    pthread_mutex_unlock(&logLock)
     
    #define logUpload(...) pthread_mutex_lock(&logLock);
    logLen=snprintf(logBuf,sizeof(logBuf),__VA_ARGS__);
    syslog(LOG_NOTICE,logBuf,logLen);
    pthread_mutex_unlock(&logLock)
    ...
    openlog("zhuowang_SS",LOG_PID|LOG_CONS,LOG_LOCAL6);
    ...
    在/etc/rsyslog.conf里添加了
    local6.info /var/log/zw_info.log
    local6.notice /var/log/zw_notice.log
    在/etc/logrotate.d/建新文件zw_log
    
    
    [root@localhost logrotate.d]# cat zw_log
    /var/log/zw_notice.log
    /var/log/zw_info.log
    {
    nocompress
    daily
    rotate 21
    }
    
    意为他俩不压缩、每天轮转、保留21份。
    但是运行却发现每天虽然在生成新日志文件,但是日志还是被写到旧文件里去。好好研究了一下发现这错误犯的真2,rsyslog和logrotate根本就是两个软件包两回事嘛。虽然logrotate重命名了当前log,删了旧log,但是rsyslog不知道哇,打开的文件还是旧文件嘛。当然写的就是旧文件了嘛。
    
    经探索后发现这个问题有两种解决办法。
    1.copytruncate,拷贝后截断。
    把当前log拷贝后截断。可以理解为把内容拷贝走作为备份,然后清空当前文件。但是这有一个问题就是拷贝和截断之间会有时间差,存在丢数据的可能。
    2.给rsyslog发信号。重新打开log文件。
    在/etc/logrotate.d/zw_log里添加
    sharedscripts
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
    postrotate表示在日志轮转后执行
    sharedscripts表示zw_notice.log、zw_info.log两个日志共享这个脚本,就是说他俩轮转完成后只执行一次这个脚本,默认情况下是每个脚本轮转完成就执行一次
  • 相关阅读:
    [转]SVN服务器搭建和使用(二)
    [转]SVN服务器搭建和使用(一)
    BZOJ 2049 Sdoi2008 Cave 洞穴勘测
    BZOJ 1589 Usaco2008 Dec Trick or Treat on the Farm 采集糖果
    BZOJ 2796 POI2012 Fibonacci Representation
    BZOJ 2115 Wc2011 Xor
    BZOJ 3105 CQOI2013 新Nim游戏
    BZOJ 2460 Beijing2011 元素
    BZOJ 3687 简单题
    BZOJ 1068 SCOI2008 压缩
  • 原文地址:https://www.cnblogs.com/chjbbs/p/6429007.html
Copyright © 2011-2022 走看看