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;
|