@@ -57,6 +57,8 @@ struct tlog_log {
57
57
char logdir [PATH_MAX ];
58
58
char logname [TLOG_LOG_NAME_LEN ];
59
59
char suffix [TLOG_LOG_NAME_LEN ];
60
+ char pending_logfile [PATH_MAX ];
61
+ int rename_pending ;
60
62
int logsize ;
61
63
int logcount ;
62
64
int block ;
@@ -1023,6 +1025,26 @@ static int _tlog_archive_log(struct tlog_log *log)
1023
1025
}
1024
1026
}
1025
1027
1028
+ void _tlog_get_log_name_dir (struct tlog_log * log )
1029
+ {
1030
+ char log_file [PATH_MAX ];
1031
+ if (log -> fd > 0 ) {
1032
+ close (log -> fd );
1033
+ log -> fd = -1 ;
1034
+ }
1035
+
1036
+ pthread_mutex_lock (& tlog .lock );
1037
+ strncpy (log_file , log -> pending_logfile , sizeof (log_file ) - 1 );
1038
+ log_file [sizeof (log_file ) - 1 ] = '\0' ;
1039
+ strncpy (log -> logdir , dirname (log_file ), sizeof (log -> logdir ));
1040
+ log -> logdir [sizeof (log -> logdir ) - 1 ] = '\0' ;
1041
+ strncpy (log_file , log -> pending_logfile , PATH_MAX );
1042
+ log_file [sizeof (log_file ) - 1 ] = '\0' ;
1043
+ strncpy (log -> logname , basename (log_file ), sizeof (log -> logname ));
1044
+ log -> logname [sizeof (log -> logname ) - 1 ] = '\0' ;
1045
+ pthread_mutex_unlock (& tlog .lock );
1046
+ }
1047
+
1026
1048
static int _tlog_write (struct tlog_log * log , const char * buff , int bufflen )
1027
1049
{
1028
1050
int len ;
@@ -1032,6 +1054,11 @@ static int _tlog_write(struct tlog_log *log, const char *buff, int bufflen)
1032
1054
return 0 ;
1033
1055
}
1034
1056
1057
+ if (log -> rename_pending ) {
1058
+ _tlog_get_log_name_dir (log );
1059
+ log -> rename_pending = 0 ;
1060
+ }
1061
+
1035
1062
/* output log to screen */
1036
1063
if (log -> logscreen ) {
1037
1064
unused = write (STDOUT_FILENO , buff , bufflen );
@@ -1518,10 +1545,14 @@ tlog_level tlog_getlevel(void)
1518
1545
return tlog_set_level ;
1519
1546
}
1520
1547
1548
+ void tlog_set_logfile (const char * logfile )
1549
+ {
1550
+ tlog_rename_logfile (tlog .root , logfile );
1551
+ }
1552
+
1521
1553
tlog_log * tlog_open (const char * logfile , int maxlogsize , int maxlogcount , int buffsize , unsigned int flag )
1522
1554
{
1523
1555
struct tlog_log * log = NULL ;
1524
- char log_file [PATH_MAX ];
1525
1556
1526
1557
if (tlog .run == 0 ) {
1527
1558
fprintf (stderr , "tlog is not initialized." );
@@ -1554,14 +1585,7 @@ tlog_log *tlog_open(const char *logfile, int maxlogsize, int maxlogcount, int bu
1554
1585
log -> segment_log = ((flag & TLOG_SEGMENT ) == 0 ) ? 0 : 1 ;
1555
1586
log -> output_func = _tlog_write ;
1556
1587
1557
- strncpy (log_file , logfile , sizeof (log_file ) - 1 );
1558
- log_file [sizeof (log_file ) - 1 ] = '\0' ;
1559
- strncpy (log -> logdir , dirname (log_file ), sizeof (log -> logdir ));
1560
- log -> logdir [sizeof (log -> logdir ) - 1 ] = '\0' ;
1561
- strncpy (log_file , logfile , PATH_MAX );
1562
- log_file [sizeof (log_file ) - 1 ] = '\0' ;
1563
- strncpy (log -> logname , basename (log_file ), sizeof (log -> logname ));
1564
- log -> logname [sizeof (log -> logname ) - 1 ] = '\0' ;
1588
+ tlog_rename_logfile (log , logfile );
1565
1589
if (log -> nocompress ) {
1566
1590
strncpy (log -> suffix , TLOG_SUFFIX_LOG , sizeof (log -> suffix ));
1567
1591
} else {
@@ -1605,6 +1629,14 @@ void tlog_close(tlog_log *log)
1605
1629
log -> is_exit = 1 ;
1606
1630
}
1607
1631
1632
+ void tlog_rename_logfile (struct tlog_log * log , const char * logfile )
1633
+ {
1634
+ pthread_mutex_lock (& tlog .lock );
1635
+ strncpy (log -> pending_logfile , logfile , sizeof (log -> pending_logfile ) - 1 );
1636
+ pthread_mutex_unlock (& tlog .lock );
1637
+ log -> rename_pending = 1 ;
1638
+ }
1639
+
1608
1640
int tlog_init (const char * logfile , int maxlogsize , int maxlogcount , int buffsize , unsigned int flag )
1609
1641
{
1610
1642
pthread_attr_t attr ;
0 commit comments