这最终变得相当简单。
我所要做的就是改变
gmtime
到
localtime
现在所有输出都是我的系统时间,而不是UTC。
(当然,还必须从我修改过的源代码编译Xdebug。)
/* src/lib/timing.c line 196 */
char* xdebug_nanotime_to_chars(uint64_t nanotime, unsigned char precision)
{
char *res;
time_t secs;
secs = (time_t)(nanotime / NANOS_IN_SEC);
if (precision > 0) {
res = xdmalloc(30);
} else {
res = xdmalloc(20);
}
/* strftime(res, 20, "%Y-%m-%d %H:%M:%S", gmtime(&secs)); */ right here!
strftime(res, 20, "%Y-%m-%d %H:%M:%S", localtime(&secs));
if (precision > 0) {
sprintf(res + 19, ".%09u", (uint32_t)(nanotime % NANOS_IN_SEC));
if (precision < 9) {
*(res + 20 + precision) = '\0';
}
}
return res;
}
输出现在与我当前的时区匹配,即下午5点之前:
[12122] Log opened at 2020-12-31 16:50:29.447626
[12122] Log closed at 2020-12-31 16:50:29.780099
如果我想让它绝对清晰,我想我可以将时区标识符添加到行的末尾。如果我这样做,我会编辑我的答案。
编辑:我添加了时区标识符。我创建了一个新函数,用于日志打开和关闭函数。
/* src/lib/log.c */
const char* custom_get_tz() /* placed near top of file */
{
time_t t = time(NULL);
struct tm lt = {0};
localtime_r(&t, <);
return lt.tm_zone;
}
.
.
.
/* around line 63 */
static inline void xdebug_internal_log(int channel, int log_level, const char *message)
{
.
.
.
/* fprintf(XG_LIB(log_file), "[" ZEND_ULONG_FMT "] Log opened at %s\n", pid, XG_LIB(log_open_timestring)); */
fprintf(XG_LIB(log_file), "[" ZEND_ULONG_FMT "] Log opened at %s %s\n", pid, XG_LIB(log_open_timestring), custom_get_tz());
.
.
.
}
.
.
.
/* around line 610 */
void xdebug_close_log()
{
.
.
.
/* fprintf(XG_LIB(log_file), "[" ZEND_ULONG_FMT "] Log closed at %s\n\n", pid, timestr); */
fprintf(XG_LIB(log_file), "[" ZEND_ULONG_FMT "] Log closed at %s %s\n\n", pid, timestr, custom_get_tz());
.
.
.
}
通过将系统时区更改为America/Goose_Bay和UTC进行测试:
[31250] Log opened at 2021-01-02 13:44:07.952185 PST
.
.
.
[31250] Log closed at 2021-01-02 13:44:07.957961 PST
[31252] Log opened at 2021-01-02 17:45:55.684079 AST
.
.
.
[31252] Log closed at 2021-01-02 17:45:55.687655 AST
[31254] Log opened at 2021-01-02 21:47:18.788958 UTC
.
.
.
[31254] Log closed at 2021-01-02 21:47:18.792282 UTC