logger.c (302408) | logger.c (362181) |
---|---|
1/* 2 * logger.c : Implementation of the SvnServe logger API 3 * 4 * ==================================================================== 5 * Licensed to the Apache Software Foundation (ASF) under one 6 * or more contributor license agreements. See the NOTICE file 7 * distributed with this work for additional information 8 * regarding copyright ownership. The ASF licenses this file --- 74 unchanged lines hidden (view full) --- 83 result->stream = svn_stream_from_aprfile2(file, FALSE, pool); 84 result->pool = svn_pool_create(pool); 85 86 *logger = result; 87 88 return SVN_NO_ERROR; 89} 90 | 1/* 2 * logger.c : Implementation of the SvnServe logger API 3 * 4 * ==================================================================== 5 * Licensed to the Apache Software Foundation (ASF) under one 6 * or more contributor license agreements. See the NOTICE file 7 * distributed with this work for additional information 8 * regarding copyright ownership. The ASF licenses this file --- 74 unchanged lines hidden (view full) --- 83 result->stream = svn_stream_from_aprfile2(file, FALSE, pool); 84 result->pool = svn_pool_create(pool); 85 86 *logger = result; 87 88 return SVN_NO_ERROR; 89} 90 |
91void 92logger__log_error(logger_t *logger, 93 svn_error_t *err, 94 repository_t *repository, 95 client_info_t *client_info) | 91static void 92log_message(logger_t *logger, 93 const svn_error_t *err, 94 const char *prefix, 95 repository_t *repository, 96 client_info_t *client_info) |
96{ 97 if (logger && err) 98 { 99 const char *timestr, *continuation; 100 const char *user, *repos, *remote_host; | 97{ 98 if (logger && err) 99 { 100 const char *timestr, *continuation; 101 const char *user, *repos, *remote_host; |
101 char errbuf[256]; | 102 |
102 /* 8192 from MAX_STRING_LEN in from httpd-2.2.4/include/httpd.h */ | 103 /* 8192 from MAX_STRING_LEN in from httpd-2.2.4/include/httpd.h */ |
103 char errstr[8192]; | 104 const apr_size_t errstr_size = 8192; 105 char *errstr = apr_palloc(logger->pool, errstr_size); |
104 105 svn_error_clear(svn_mutex__lock(logger->mutex)); 106 107 timestr = svn_time_to_cstring(apr_time_now(), logger->pool); 108 remote_host = client_info && client_info->remote_host 109 ? client_info->remote_host 110 : "-"; 111 user = client_info && client_info->user 112 ? client_info->user 113 : "-"; 114 repos = repository && repository->repos_name 115 ? repository->repos_name 116 : "-"; 117 118 continuation = ""; 119 while (err) 120 { | 106 107 svn_error_clear(svn_mutex__lock(logger->mutex)); 108 109 timestr = svn_time_to_cstring(apr_time_now(), logger->pool); 110 remote_host = client_info && client_info->remote_host 111 ? client_info->remote_host 112 : "-"; 113 user = client_info && client_info->user 114 ? client_info->user 115 : "-"; 116 repos = repository && repository->repos_name 117 ? repository->repos_name 118 : "-"; 119 120 continuation = ""; 121 while (err) 122 { |
123 char errbuf[256]; |
|
121 const char *message = svn_err_best_message(err, errbuf, sizeof(errbuf)); 122 /* based on httpd-2.2.4/server/log.c:log_error_core */ | 124 const char *message = svn_err_best_message(err, errbuf, sizeof(errbuf)); 125 /* based on httpd-2.2.4/server/log.c:log_error_core */ |
123 apr_size_t len = apr_snprintf(errstr, sizeof(errstr), | 126 apr_size_t len = apr_snprintf(errstr, errstr_size, |
124 "%" APR_PID_T_FMT | 127 "%" APR_PID_T_FMT |
125 " %s %s %s %s ERR%s %s %ld %d ", | 128 " %s %s %s %s %s%s %s %ld %d ", |
126 getpid(), timestr, remote_host, user, | 129 getpid(), timestr, remote_host, user, |
127 repos, continuation, | 130 repos, prefix, continuation, |
128 err->file ? err->file : "-", err->line, 129 err->apr_err); 130 131 len += escape_errorlog_item(errstr + len, message, | 131 err->file ? err->file : "-", err->line, 132 err->apr_err); 133 134 len += escape_errorlog_item(errstr + len, message, |
132 sizeof(errstr) - len); | 135 errstr_size - len); |
133 /* Truncate for the terminator (as apr_snprintf does) */ | 136 /* Truncate for the terminator (as apr_snprintf does) */ |
134 if (len > sizeof(errstr) - sizeof(APR_EOL_STR)) { 135 len = sizeof(errstr) - sizeof(APR_EOL_STR); | 137 if (len > errstr_size - sizeof(APR_EOL_STR)) { 138 len = errstr_size - sizeof(APR_EOL_STR); |
136 } 137 138 memcpy(errstr + len, APR_EOL_STR, sizeof(APR_EOL_STR)); 139 len += sizeof(APR_EOL_STR) -1; /* add NL, ex terminating NUL */ 140 141 svn_error_clear(svn_stream_write(logger->stream, errstr, &len)); 142 143 continuation = "-"; 144 err = err->child; 145 } 146 147 svn_pool_clear(logger->pool); 148 149 svn_error_clear(svn_mutex__unlock(logger->mutex, SVN_NO_ERROR)); 150 } 151} 152 | 139 } 140 141 memcpy(errstr + len, APR_EOL_STR, sizeof(APR_EOL_STR)); 142 len += sizeof(APR_EOL_STR) -1; /* add NL, ex terminating NUL */ 143 144 svn_error_clear(svn_stream_write(logger->stream, errstr, &len)); 145 146 continuation = "-"; 147 err = err->child; 148 } 149 150 svn_pool_clear(logger->pool); 151 152 svn_error_clear(svn_mutex__unlock(logger->mutex, SVN_NO_ERROR)); 153 } 154} 155 |
156void 157logger__log_error(logger_t *logger, 158 const svn_error_t *err, 159 repository_t *repository, 160 client_info_t *client_info) 161{ 162 log_message(logger, err, "ERR", repository, client_info); 163} 164 165void 166logger__log_warning(logger_t *logger, 167 const svn_error_t *err, 168 repository_t *repository, 169 client_info_t *client_info) 170{ 171 log_message(logger, err, "WARN", repository, client_info); 172} 173 |
|
153svn_error_t * 154logger__write(logger_t *logger, 155 const char *errstr, 156 apr_size_t len) 157{ 158 SVN_MUTEX__WITH_LOCK(logger->mutex, 159 svn_stream_write(logger->stream, errstr, &len)); 160 return SVN_NO_ERROR; 161} | 174svn_error_t * 175logger__write(logger_t *logger, 176 const char *errstr, 177 apr_size_t len) 178{ 179 SVN_MUTEX__WITH_LOCK(logger->mutex, 180 svn_stream_write(logger->stream, errstr, &len)); 181 return SVN_NO_ERROR; 182} |