logger context add field: use_file_write_lock

pull/10/head
yuqing 2016-11-13 14:22:12 +08:00
parent 8b563ce830
commit ef019ab04a
4 changed files with 54 additions and 10 deletions

View File

@ -3,6 +3,7 @@ Version 1.31 2016-11-13
* move SET_SOCKOPT_NOSIGPIPE from sockopt.c to sockopt.h * move SET_SOCKOPT_NOSIGPIPE from sockopt.c to sockopt.h
* add function get_time_item_from_str * add function get_time_item_from_str
* add file trylock functions * add file trylock functions
* logger context add field: use_file_write_lock
Version 1.30 2016-10-31 Version 1.30 2016-10-31
* modify php-fastcommon/test.php * modify php-fastcommon/test.php

View File

@ -114,33 +114,40 @@ static int log_print_header(LogContext *pContext)
{ {
int result; int result;
if ((result=file_write_lock(pContext->log_fd)) != 0) if (!pContext->use_file_write_lock)
{ {
return result; if ((result=file_write_lock(pContext->log_fd)) != 0)
{
return result;
}
} }
pContext->current_size = lseek(pContext->log_fd, 0, SEEK_END); pContext->current_size = lseek(pContext->log_fd, 0, SEEK_END);
if (pContext->current_size < 0) if (pContext->current_size < 0)
{ {
result = errno != 0 ? errno : EACCES; result = errno != 0 ? errno : EACCES;
file_unlock(pContext->log_fd);
fprintf(stderr, "lseek file \"%s\" fail, " \ fprintf(stderr, "lseek file \"%s\" fail, " \
"errno: %d, error info: %s\n", \ "errno: %d, error info: %s\n", \
pContext->log_filename, result, STRERROR(result)); pContext->log_filename, result, STRERROR(result));
return result;
} }
if (pContext->current_size == 0) else {
{ result = 0;
pContext->print_header_callback(pContext); if (pContext->current_size == 0) {
pContext->print_header_callback(pContext);
}
} }
file_unlock(pContext->log_fd);
return 0; if (!pContext->use_file_write_lock)
{
file_unlock(pContext->log_fd);
}
return result;
} }
static int log_open(LogContext *pContext) static int log_open(LogContext *pContext)
{ {
int result;
if ((pContext->log_fd = open(pContext->log_filename, O_WRONLY | \ if ((pContext->log_fd = open(pContext->log_filename, O_WRONLY | \
O_CREAT | O_APPEND | pContext->fd_flags, 0644)) < 0) O_CREAT | O_APPEND | pContext->fd_flags, 0644)) < 0)
{ {
@ -151,6 +158,14 @@ static int log_open(LogContext *pContext)
return errno != 0 ? errno : EACCES; return errno != 0 ? errno : EACCES;
} }
if (pContext->use_file_write_lock) {
if ((result=file_try_write_lock(pContext->log_fd)) != 0) {
close(pContext->log_fd);
pContext->log_fd = STDERR_FILENO;
return result;
}
}
if (pContext->take_over_stderr) { if (pContext->take_over_stderr) {
if (dup2(pContext->log_fd, STDERR_FILENO) < 0) { if (dup2(pContext->log_fd, STDERR_FILENO) < 0) {
fprintf(stderr, "file: "__FILE__", line: %d, " fprintf(stderr, "file: "__FILE__", line: %d, "
@ -229,6 +244,11 @@ void log_set_cache_ex(LogContext *pContext, const bool bLogCache)
pContext->log_to_cache = bLogCache; pContext->log_to_cache = bLogCache;
} }
void log_set_use_file_write_lock_ex(LogContext *pContext, const bool use_lock)
{
pContext->use_file_write_lock = use_lock;
}
void log_set_time_precision(LogContext *pContext, const int time_precision) void log_set_time_precision(LogContext *pContext, const int time_precision)
{ {
pContext->time_precision = time_precision; pContext->time_precision = time_precision;

View File

@ -76,6 +76,9 @@ typedef struct log_context
/* time precision */ /* time precision */
char time_precision; char time_precision;
/* if use file write lock */
bool use_file_write_lock;
/* compress the log file use gzip command */ /* compress the log file use gzip command */
short compress_log_flags; short compress_log_flags;
@ -134,6 +137,9 @@ int log_init2();
#define log_set_compress_log_days_before(days_before) \ #define log_set_compress_log_days_before(days_before) \
log_set_compress_log_days_before_ex(&g_log_context, days_before) log_set_compress_log_days_before_ex(&g_log_context, days_before)
#define log_set_use_file_write_lock(use_lock) \
log_set_use_file_write_lock_ex(&g_log_context, use_lock)
#define log_header(pContext, header, header_len) \ #define log_header(pContext, header, header_len) \
log_it_ex2(pContext, NULL, header, header_len, false, false) log_it_ex2(pContext, NULL, header, header_len, false, false)
@ -180,6 +186,14 @@ int log_set_filename_ex(LogContext *pContext, const char *log_filename);
*/ */
void log_set_cache_ex(LogContext *pContext, const bool bLogCache); void log_set_cache_ex(LogContext *pContext, const bool bLogCache);
/** set if use file write lock
* parameters:
* pContext: the log context
* use_lock: true for use write lock, false NOT use write lock
* return: none
*/
void log_set_use_file_write_lock_ex(LogContext *pContext, const bool use_lock);
/** set time precision /** set time precision
* parameters: * parameters:
* pContext: the log context * pContext: the log context

View File

@ -18,6 +18,15 @@ int main(int argc, char *argv[])
log_init(); log_init();
g_log_context.log_level = LOG_DEBUG; g_log_context.log_level = LOG_DEBUG;
log_take_over_stderr();
log_take_over_stdout();
log_set_compress_log_flags(LOG_COMPRESS_FLAGS_ENABLED | LOG_COMPRESS_FLAGS_NEW_THREAD);
printf("sizeof(LogContext): %d, time_precision: %d, compress_log_flags: %d, "
"use_file_write_lock: %d\n", (int)sizeof(LogContext),
g_log_context.time_precision,
g_log_context.compress_log_flags,
g_log_context.use_file_write_lock);
if ((result=iniLoadFromFile(szFilename, &context)) != 0) if ((result=iniLoadFromFile(szFilename, &context)) != 0)
{ {