improved the file path management in the logging function
This commit is contained in:
parent
db421d4208
commit
4e097466ae
@ -210,7 +210,8 @@ struct qse_log_t
|
|||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
qse_char_t path[/*QSE_PATH_MAX + 1*/2048]; /* TODO: use the defined macro for sizing */
|
qse_char_t pathbuf[128]; /* static path buffer */
|
||||||
|
qse_char_t* path;
|
||||||
qse_sio_t* sio;
|
qse_sio_t* sio;
|
||||||
} file;
|
} file;
|
||||||
|
|
||||||
@ -282,12 +283,18 @@ QSE_EXPORT void qse_log_setident (
|
|||||||
const qse_char_t* ident
|
const qse_char_t* ident
|
||||||
);
|
);
|
||||||
|
|
||||||
QSE_EXPORT void qse_log_settarget (
|
/**
|
||||||
|
* \return 0 on success, -1 on failure
|
||||||
|
*/
|
||||||
|
QSE_EXPORT int qse_log_settarget (
|
||||||
qse_log_t* log,
|
qse_log_t* log,
|
||||||
int flags,
|
int flags,
|
||||||
const qse_log_target_t* target
|
const qse_log_target_t* target
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \return an integer bitwise-ORed of the target bits.
|
||||||
|
*/
|
||||||
QSE_EXPORT int qse_log_gettarget (
|
QSE_EXPORT int qse_log_gettarget (
|
||||||
qse_log_t* log,
|
qse_log_t* log,
|
||||||
qse_log_target_t* target
|
qse_log_target_t* target
|
||||||
|
@ -228,23 +228,37 @@ int qse_log_init (qse_log_t* log, qse_mmgr_t* mmgr, const qse_char_t* ident, int
|
|||||||
log->flags = potflags & (QSE_LOG_MASK_PRIORITY | QSE_LOG_MASK_OPTION);
|
log->flags = potflags & (QSE_LOG_MASK_PRIORITY | QSE_LOG_MASK_OPTION);
|
||||||
log->t.syslog_remote.sock = -1;
|
log->t.syslog_remote.sock = -1;
|
||||||
|
|
||||||
if (potflags & QSE_LOG_FILE)
|
if (potflags & QSE_LOG_FILE) log->flags |= QSE_LOG_FILE;
|
||||||
|
if (target->file)
|
||||||
{
|
{
|
||||||
qse_strxcpy (log->t.file.path, QSE_COUNTOF(log->t.file.path), target->file);
|
if (qse_strlen(target->file) >= QSE_COUNTOF(log->t.file.pathbuf))
|
||||||
log->flags |= QSE_LOG_FILE;
|
{
|
||||||
|
log->t.file.path = qse_strdup (target->file, log->mmgr);
|
||||||
|
if (!log->t.file.path) return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qse_strxcpy (log->t.file.pathbuf, QSE_COUNTOF(log->t.file.pathbuf), target->file);
|
||||||
|
log->t.file.path = log->t.file.pathbuf;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (potflags & QSE_LOG_CONSOLE) log->flags |= QSE_LOG_CONSOLE;
|
if (potflags & QSE_LOG_CONSOLE) log->flags |= QSE_LOG_CONSOLE;
|
||||||
if (potflags & QSE_LOG_SYSLOG) log->flags |= QSE_LOG_SYSLOG;
|
if (potflags & QSE_LOG_SYSLOG) log->flags |= QSE_LOG_SYSLOG;
|
||||||
|
|
||||||
if (potflags & QSE_LOG_SYSLOG_REMOTE)
|
if (potflags & QSE_LOG_SYSLOG_REMOTE) log->flags |= QSE_LOG_SYSLOG_REMOTE;
|
||||||
{
|
if (qse_skadfamily(&target->syslog_remote) >= 0) log->t.syslog_remote.addr = target->syslog_remote;
|
||||||
/* flags_arg should be qse_skad_t* */
|
|
||||||
log->t.syslog_remote.addr = target->syslog_remote;
|
|
||||||
log->flags |= QSE_LOG_SYSLOG_REMOTE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ident) qse_strxcpy (log->ident, QSE_COUNTOF(log->ident), ident);
|
if (ident) qse_strxcpy (log->ident, QSE_COUNTOF(log->ident), ident);
|
||||||
if (qse_mtx_init(&log->mtx, mmgr) <= -1) return -1;
|
if (qse_mtx_init(&log->mtx, mmgr) <= -1)
|
||||||
|
{
|
||||||
|
if (log->t.file.path && log->t.file.path != log->t.file.pathbuf)
|
||||||
|
{
|
||||||
|
QSE_MMGR_FREE (mmgr, log->t.file.path);
|
||||||
|
log->t.file.path = QSE_NULL;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
log->active_priority_bits = get_active_priority_bits(log->flags);
|
log->active_priority_bits = get_active_priority_bits(log->flags);
|
||||||
|
|
||||||
@ -252,7 +266,6 @@ int qse_log_init (qse_log_t* log, qse_mmgr_t* mmgr, const qse_char_t* ident, int
|
|||||||
/* TODO: windows event logging */
|
/* TODO: windows event logging */
|
||||||
#else
|
#else
|
||||||
log->syslog_facility = QSE_LOG_USER;
|
log->syslog_facility = QSE_LOG_USER;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -272,6 +285,12 @@ void qse_log_fini (qse_log_t* log)
|
|||||||
log->t.console.sio = QSE_NULL;
|
log->t.console.sio = QSE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (log->t.file.path && log->t.file.path != log->t.file.pathbuf)
|
||||||
|
{
|
||||||
|
QSE_MMGR_FREE (log->mmgr, log->t.file.path);
|
||||||
|
log->t.file.path = QSE_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (log->t.file.sio)
|
if (log->t.file.sio)
|
||||||
{
|
{
|
||||||
qse_sio_close (log->t.file.sio);
|
qse_sio_close (log->t.file.sio);
|
||||||
@ -323,8 +342,15 @@ void qse_log_setident (qse_log_t* log, const qse_char_t* ident)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void qse_log_settarget (qse_log_t* log, int flags, const qse_log_target_t* target)
|
int qse_log_settarget (qse_log_t* log, int flags, const qse_log_target_t* target)
|
||||||
{
|
{
|
||||||
|
qse_char_t* target_file = QSE_NULL;
|
||||||
|
if (target->file && qse_strlen(target->file) >= QSE_COUNTOF(log->t.file.pathbuf))
|
||||||
|
{
|
||||||
|
target_file = qse_strdup (target->file, log->mmgr);
|
||||||
|
if (!target_file) return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (log->t.syslog_remote.sock >= 0)
|
if (log->t.syslog_remote.sock >= 0)
|
||||||
{
|
{
|
||||||
QSE_CLOSE (log->t.syslog_remote.sock);
|
QSE_CLOSE (log->t.syslog_remote.sock);
|
||||||
@ -355,13 +381,28 @@ void qse_log_settarget (qse_log_t* log, int flags, const qse_log_target_t* targe
|
|||||||
/* If you just want to set the target file path without enable QSE_LOG_FILE,
|
/* If you just want to set the target file path without enable QSE_LOG_FILE,
|
||||||
* just set target->file without QSE_LOG_FILE in the flags.
|
* just set target->file without QSE_LOG_FILE in the flags.
|
||||||
* later, you can call this function with QSE_LOG_FILE set but with target->file or QSE_NULL */
|
* later, you can call this function with QSE_LOG_FILE set but with target->file or QSE_NULL */
|
||||||
if (target->file) qse_strxcpy (log->t.file.path, QSE_COUNTOF(log->t.file.path), target->file);
|
if (target->file)
|
||||||
|
{
|
||||||
|
if (log->t.file.path && log->t.file.path != log->t.file.pathbuf) QSE_MMGR_FREE (log->mmgr, log->t.file.path);
|
||||||
|
|
||||||
|
if (target_file)
|
||||||
|
{
|
||||||
|
log->t.file.path = target_file;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qse_strxcpy (log->t.file.pathbuf, QSE_COUNTOF(log->t.file.pathbuf), target->file);
|
||||||
|
log->t.file.path = log->t.file.pathbuf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (flags & QSE_LOG_CONSOLE) log->flags |= QSE_LOG_CONSOLE;
|
if (flags & QSE_LOG_CONSOLE) log->flags |= QSE_LOG_CONSOLE;
|
||||||
if (flags & QSE_LOG_SYSLOG) log->flags |= QSE_LOG_SYSLOG;
|
if (flags & QSE_LOG_SYSLOG) log->flags |= QSE_LOG_SYSLOG;
|
||||||
|
|
||||||
if (flags & QSE_LOG_SYSLOG_REMOTE) log->flags |= QSE_LOG_SYSLOG_REMOTE;
|
if (flags & QSE_LOG_SYSLOG_REMOTE) log->flags |= QSE_LOG_SYSLOG_REMOTE;
|
||||||
if (qse_skadfamily(&target->syslog_remote) != -1) log->t.syslog_remote.addr = target->syslog_remote;
|
if (qse_skadfamily(&target->syslog_remote) >= 0) log->t.syslog_remote.addr = target->syslog_remote;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int qse_log_gettarget (qse_log_t* log, qse_log_target_t* target)
|
int qse_log_gettarget (qse_log_t* log, qse_log_target_t* target)
|
||||||
|
Loading…
Reference in New Issue
Block a user