Mercurial > hg > nginx
diff src/core/ngx_log.c @ 2758:77264e0157ad
-p and --prefix=
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 27 Apr 2009 11:32:33 +0000 |
parents | 2d82d3cfbfa0 |
children | d4a717592877 |
line wrap: on
line diff
--- a/src/core/ngx_log.c Mon Apr 27 11:20:55 2009 +0000 +++ b/src/core/ngx_log.c Mon Apr 27 11:32:33 2009 +0000 @@ -273,38 +273,84 @@ ngx_log_t * -ngx_log_init(void) +ngx_log_init(u_char *prefix) { + u_char *p, *name; + size_t nlen, plen; + ngx_log.file = &ngx_log_file; ngx_log.log_level = NGX_LOG_NOTICE; + name = (u_char *) NGX_ERROR_LOG_PATH; + /* * we use ngx_strlen() here since BCC warns about * condition is always false and unreachable code */ - if (ngx_strlen(NGX_ERROR_LOG_PATH) == 0) { + nlen = ngx_strlen(name); + + if (nlen == 0) { ngx_log_file.fd = ngx_stderr; return &ngx_log; } - ngx_log_file.fd = ngx_open_file((u_char *) NGX_ERROR_LOG_PATH, - NGX_FILE_APPEND, + p = NULL; + +#if (NGX_WIN32) + if (name[1] != ':') { +#else + if (name[0] != '/') { +#endif + plen = 0; + + if (prefix) { + plen = ngx_strlen(prefix); + +#ifdef NGX_PREFIX + } else { + prefix = (u_char *) NGX_PREFIX; + plen = ngx_strlen(prefix); +#endif + } + + if (plen) { + name = malloc(plen + nlen + 2); + if (name == NULL) { + return NULL; + } + + p = ngx_cpymem(name, prefix, plen); + + if (!ngx_path_separator(*(p - 1))) { + *p++ = '/'; + } + + ngx_cpystrn(p, (u_char *) NGX_ERROR_LOG_PATH, nlen + 1); + + p = name; + } + } + + ngx_log_file.fd = ngx_open_file(name, NGX_FILE_APPEND, NGX_FILE_CREATE_OR_OPEN, NGX_FILE_DEFAULT_ACCESS); if (ngx_log_file.fd == NGX_INVALID_FILE) { ngx_log_stderr(ngx_errno, - "[emerg]: could not open error log file: " - ngx_open_file_n " \"" NGX_ERROR_LOG_PATH "\" failed"); - + "[alert]: could not open error log file: " + ngx_open_file_n " \"%s\" failed", name); #if (NGX_WIN32) ngx_event_log(ngx_errno, "could not open error log file: " - ngx_open_file_n " \"" NGX_ERROR_LOG_PATH "\" failed"); + ngx_open_file_n " \"%s\" failed", name); #endif - return NULL; + ngx_log_file.fd = ngx_stderr; + } + + if (p) { + ngx_free(p); } return &ngx_log;