log_windows.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2015 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
20 
21 #ifdef GPR_WINDOWS_LOG
22 
23 #include <stdarg.h>
24 #include <stdio.h>
25 
26 #include <grpc/support/alloc.h>
27 #include <grpc/support/log.h>
30 #include <grpc/support/time.h>
31 
35 
37 
38 void gpr_log(const char* file, int line, gpr_log_severity severity,
39  const char* format, ...) {
40  /* Avoid message construction if gpr_log_message won't log */
41  if (gpr_should_log(severity) == 0) {
42  return;
43  }
44 
45  char* message = NULL;
46  va_list args;
47  int ret;
48 
49  /* Determine the length. */
50  va_start(args, format);
51  ret = _vscprintf(format, args);
52  va_end(args);
53  if (ret < 0) {
54  message = NULL;
55  } else {
56  /* Allocate a new buffer, with space for the NUL terminator. */
57  size_t strp_buflen = (size_t)ret + 1;
58  message = (char*)gpr_malloc(strp_buflen);
59 
60  /* Print to the buffer. */
61  va_start(args, format);
62  ret = vsnprintf_s(message, strp_buflen, _TRUNCATE, format, args);
63  va_end(args);
64  if ((size_t)ret != strp_buflen - 1) {
65  /* This should never happen. */
67  message = NULL;
68  }
69  }
70 
73 }
74 
75 /* Simple starter implementation */
77  const char* final_slash;
78  const char* display_file;
79  char time_buffer[64];
80  time_t timer;
82  struct tm tm;
83 
84  timer = (time_t)now.tv_sec;
85  final_slash = strrchr(args->file, '\\');
86  if (final_slash == NULL)
87  display_file = args->file;
88  else
89  display_file = final_slash + 1;
90 
91  if (localtime_s(&tm, &timer)) {
92  strcpy(time_buffer, "error:localtime");
93  } else if (0 ==
94  strftime(time_buffer, sizeof(time_buffer), "%m%d %H:%M:%S", &tm)) {
95  strcpy(time_buffer, "error:strftime");
96  }
97 
98  absl::optional<std::string> stack_trace =
101  : absl::nullopt;
102  if (stack_trace) {
103  fprintf(stderr, "%s%s.%09u %5lu %s:%d] %s\n%s\n",
104  gpr_log_severity_string(args->severity), time_buffer,
105  (int)(now.tv_nsec), GetCurrentThreadId(), display_file, args->line,
106  args->message, stack_trace->c_str());
107  } else {
108  fprintf(stderr, "%s%s.%09u %5lu %s:%d] %s\n",
109  gpr_log_severity_string(args->severity), time_buffer,
110  (int)(now.tv_nsec), GetCurrentThreadId(), display_file, args->line,
111  args->message);
112  }
113  fflush(stderr);
114 }
115 
116 #endif /* GPR_WINDOWS_LOG */
now
static double now(void)
Definition: test/core/fling/client.cc:130
http2_test_server.format
format
Definition: http2_test_server.py:118
log.h
bloat_diff.severity
def severity
Definition: bloat_diff.py:143
gpr_should_log
GPRAPI void GPRAPI int gpr_should_log(gpr_log_severity severity)
Definition: log.cc:67
string.h
gpr_free
GPRAPI void gpr_free(void *ptr)
Definition: alloc.cc:51
file
Definition: bloaty/third_party/zlib/examples/gzappend.c:170
gpr_malloc
GPRAPI void * gpr_malloc(size_t size)
Definition: alloc.cc:29
time.h
gpr_log_severity_string
const GPRAPI char * gpr_log_severity_string(gpr_log_severity severity)
Definition: log.cc:55
message
char * message
Definition: libuv/docs/code/tty-gravity/main.c:12
grpc_core::GetCurrentStackTrace
absl::optional< std::string > GetCurrentStackTrace()
Definition: src/core/lib/gprpp/examine_stack.cc:36
gpr_log_func_args
Definition: include/grpc/impl/codegen/log.h:77
python_utils.port_server.stderr
stderr
Definition: port_server.py:51
gpr_log_severity
gpr_log_severity
Definition: include/grpc/impl/codegen/log.h:45
string_util.h
asyncio_get_stats.args
args
Definition: asyncio_get_stats.py:40
gpr_log
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
absl::optional< std::string >
examine_stack.h
string_windows.h
gpr_now
GPRAPI gpr_timespec gpr_now(gpr_clock_type clock)
tm
static uv_timer_t tm
Definition: test-tcp-open.c:41
gpr_default_log
void gpr_default_log(gpr_log_func_args *args)
ret
UniquePtr< SSL_SESSION > ret
Definition: ssl_x509.cc:1029
alloc.h
regen-readme.line
line
Definition: regen-readme.py:30
log_windows.h
gpr_log_message
GPRAPI void gpr_log_message(const char *file, int line, gpr_log_severity severity, const char *message)
Definition: log.cc:81
absl
Definition: abseil-cpp/absl/algorithm/algorithm.h:31
gpr_timespec
Definition: gpr_types.h:50
GPR_CLOCK_REALTIME
@ GPR_CLOCK_REALTIME
Definition: gpr_types.h:39
gpr_should_log_stacktrace
int gpr_should_log_stacktrace(gpr_log_severity severity)
Definition: log.cc:74
timer
static uv_timer_t timer
Definition: test-callback-stack.c:34
port_platform.h


grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:00:29