Projet

Général

Profil

0002-Backport-logging.patch

Benjamin Bohard, 25/10/2022 14:41

Télécharger (2,81 ko)

Voir les différences:

src/ctr_logging.c
44 44
#define CID_EQ_LEN 13
45 45
#define NAME_EQ_LEN 15
46 46
#define PARTIAL_MESSAGE_EQ_LEN 30
47
#define SYSLOG_IDENTIFIER_EQ_LEN 18
47 48
static char short_cuuid[TRUNC_ID_LEN + 1];
48 49
static char *cuuid = NULL;
49 50
static char *name = NULL;
......
54 55
static char *container_name = NULL;
55 56
static char *container_tag = NULL;
56 57
static size_t container_tag_len;
58
static char *syslog_identifier = NULL;
59
static size_t syslog_identifier_len;
57 60

  
58 61
typedef struct {
59 62
	int iovcnt;
......
114 117
		/* Setup some sd_journal_sendv arguments that won't change */
115 118
		container_id_full = g_strdup_printf("CONTAINER_ID_FULL=%s", cuuid);
116 119
		container_id = g_strdup_printf("CONTAINER_ID=%s", short_cuuid);
117
		if (tag) {
118
			container_tag = g_strdup_printf("CONTAINER_TAG=%s", tag);
119
			container_tag_len = strlen(container_tag);
120
		}
121 120

  
122
		/* To maintain backwards compatibility with older versions of conmon, we need to skip setting
123
		 * the name value if it isn't present
124
		 */
121
		/* Priority order of syslog_identifier (in order of precedence) is tag, name, `conmon`. */
122
		syslog_identifier = g_strdup_printf("SYSLOG_IDENTIFIER=%s", short_cuuid);
123
		syslog_identifier_len = TRUNC_ID_LEN + SYSLOG_IDENTIFIER_EQ_LEN;
125 124
		if (name) {
126
			/* save the length so we don't have to compute every sd_journal_* call */
127 125
			name_len = strlen(name);
128 126
			container_name = g_strdup_printf("CONTAINER_NAME=%s", name);
127

  
128
			syslog_identifier = g_strdup_printf("SYSLOG_IDENTIFIER=%s", name);
129
			syslog_identifier_len = name_len + SYSLOG_IDENTIFIER_EQ_LEN;
130
		}
131
		if (tag) {
132
			container_tag = g_strdup_printf("CONTAINER_TAG=%s", tag);
133
			container_tag_len = strlen(container_tag);
134

  
135
			syslog_identifier = g_strdup_printf("SYSLOG_IDENTIFIER=%s", tag);
136
			syslog_identifier_len = strlen(syslog_identifier);
129 137
		}
130 138
	}
131 139
}
......
257 265
		if (name && writev_buffer_append_segment(dev_null, &bufv, container_name, name_len + NAME_EQ_LEN) < 0)
258 266
			return -1;
259 267

  
268
		if (writev_buffer_append_segment(dev_null, &bufv, syslog_identifier, syslog_identifier_len) < 0)
269
			return -1;
270

  
260 271
		/* per docker journald logging format, CONTAINER_PARTIAL_MESSAGE is set to true if it's partial, but otherwise not set. */
261 272
		if (partial && writev_buffer_append_segment(dev_null, &bufv, "CONTAINER_PARTIAL_MESSAGE=true", PARTIAL_MESSAGE_EQ_LEN) < 0)
262 273
			return -1;