注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

FY

Johnson 's Blog

 
 
 

日志

 
 

2015年04月23日  

2015-04-23 21:12:55|  分类: lighttpd |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Lighty log system笔记

 

##

##  Logging Options

## ------------------

##

## all logging options can be overwritten per vhost.

##

## Path to the error log file

##

server.errorlog             = log_root + "/error.log"

 

 

 

Service.c

server_init()

              srv->errorlog_fd = STDERR_FILENO;

              srv->errorlog_mode = ERRORLOG_FD;

 

Main()

 

//关闭stdout,stdin,但是保留stderr

/* close stdin and stdout, as they are not needed */ But Stderr is still used

              /* move stdin to /dev/null */

              if (-1 != (fd = open("/dev/null", O_RDONLY))) {

                            close(STDIN_FILENO);

                            dup2(fd, STDIN_FILENO);

                            close(fd);

              }

 

              /* move stdout to /dev/null */

              if (-1 != (fd = open("/dev/null", O_WRONLY))) {

                            close(STDOUT_FILENO);

                            dup2(fd, STDOUT_FILENO);

                            close(fd);

              }

 

 

 


/* error */

log_error_write(srv, __FILE__, __LINE__, "ss", "fork failed:", strerror(errno));

 

/* Not error, just log information recorded in log file */

log_error_write(srv, __FILE__, __LINE__,  "s",  "-- handling the request as Indexfile");



纠正:

 

L1080               if (-1 == log_error_open(srv)) {

之前,任何调用 log_error_write的地方,但会以默认的STDERR方式输出到终端,

而在成功调用 log_error_open后,则按configuration的设定,是继续输出到STDERR还是输出到log file.

 

log_error_open (){

 

 

 

 

守护程序不需要输出任何东西到STDERR(前提是,lightylog_error_open后选择的LOG方式不是STDERR,如果还是STDERR,则还是要保留的,不能关闭STDERR即使它是守护程序)

 

              if (srv->errorlog_mode == ERRORLOG_STDERR) close_stderr = 0;

 

              /* move stderr to /dev/null */

              if (close_stderr &&

                  -1 != (fd = open("/dev/null", O_WRONLY))) {

                            close(STDERR_FILENO);

                            dup2(fd, STDERR_FILENO); // redirect the STDERR

                                                                                                                // daemon do NOT output any info to control terminal

                            close(fd);

              }

              return 0;

 

}

如下所示,log_error_writer函数中,stderrlogfile两种方式是一样处理的。

int log_error_write(server *srv, const char *filename, unsigned int line, const char *fmt, ...) {

              va_list ap;

 

              switch(srv->errorlog_mode) {

              case ERRORLOG_FILE:    /* no break */

              case ERRORLOG_STDERR:

                            /* cache the generated timestamp */

                            if (srv->cur_ts != srv->last_generated_debug_ts) {

                                          buffer_prepare_copy(srv->ts_debug_str, 255);

                                          strftime(srv->ts_debug_str->ptr, srv->ts_debug_str->size - 1, "%Y-%m-%d %H:%M:%S", localtime(&(srv->cur_ts)));

                                          srv->ts_debug_str->used = strlen(srv->ts_debug_str->ptr) + 1;

 

                                          srv->last_generated_debug_ts = srv->cur_ts;

                            }

 

                            buffer_copy_string_buffer(srv->errorlog_buf, srv->ts_debug_str);

                            BUFFER_APPEND_STRING_CONST(srv->errorlog_buf, ": (");

                            break;


2015年04月23日 - FY - FY

 

  评论这张
 
阅读(57)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018