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两个日志共享这个脚本,就是说他俩轮转完成后只执行一次这个脚本,默认情况下是每个脚本轮转完成就执行一次
  • 相关阅读:
    SqlServer与Access之间的数据互导
    [转]半角<=>全角互转函数[JS版 VBS版]
    [文摘20070914]一个成功的博客必须知道的80个博客工具
    在javascript中获得由Ajax返回DataTable的列数和列名
    [转]获取xml节点值和属性值(兼容ie和firefox)
    [文摘20070920]网络战
    游标简单使用
    sql函数 得到 由 年月日时分秒+三位内的随机数 组成的随机数
    [转]ASP.NET 2.0 AJAX中Webservice调用方法示例 (包含参数类型为DataTable的WS方法)
    向页面中添加音乐或flash
  • 原文地址:https://www.cnblogs.com/chjbbs/p/6429007.html
Copyright © 2011-2022 走看看