MEDIUM: log: add a log level override value in struct session

This log level will be used in a further patch to change the log level
depending on the request or response.
diff --git a/include/types/session.h b/include/types/session.h
index b6bff57..efdcaa6 100644
--- a/include/types/session.h
+++ b/include/types/session.h
@@ -151,6 +151,7 @@
 	struct stream_interface si[2];          /* client and server stream interfaces */
 	struct {
 		int logwait;			/* log fields waiting to be collected : LW_* */
+		int level;			/* log level to force + 1 if > 0, -1 = no log */
 		struct timeval accept_date;	/* date of the accept() in user date */
 		struct timeval tv_accept;	/* date of the accept() in internal date (monotonic) */
 		struct timeval tv_request;	/* date the request arrives, {0,0} if never occurs */
diff --git a/src/log.c b/src/log.c
index 627351f..8f8fd8f 100644
--- a/src/log.c
+++ b/src/log.c
@@ -1528,9 +1528,18 @@
 	if (LIST_ISEMPTY(&s->fe->logsrvs))
 		return;
 
-	level = LOG_INFO;
-	if (err && (s->fe->options2 & PR_O2_LOGERRORS))
-		level = LOG_ERR;
+	if (s->logs.level) { /* loglevel was overridden */
+		if (s->logs.level == -1) {
+			s->logs.logwait = 0; /* logs disabled */
+			return;
+		}
+		level = s->logs.level - 1;
+	}
+	else {
+		level = LOG_INFO;
+		if (err && (s->fe->options2 & PR_O2_LOGERRORS))
+			level = LOG_ERR;
+	}
 
 	tmplog = update_log_hdr();
 	size = tmplog - logline;
diff --git a/src/peers.c b/src/peers.c
index 61fb938..998e61d 100644
--- a/src/peers.c
+++ b/src/peers.c
@@ -1185,6 +1185,7 @@
 	 */
 
 	s->logs.logwait = 0;
+	s->logs.level = 0;
 	s->do_log = NULL;
 
 	/* default error reporting function, may be changed by analysers */
diff --git a/src/proto_http.c b/src/proto_http.c
index ed6c90b..de9b331 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -2528,6 +2528,7 @@
 		msg->msg_state = HTTP_MSG_RQBEFORE;
 		req->analysers = 0;
 		s->logs.logwait = 0;
+		s->logs.level = 0;
 		s->rep->flags &= ~CF_EXPECT_MORE; /* speed up sending a previous response */
 		stream_int_retnclose(req->prod, NULL);
 		return 0;
@@ -8315,6 +8316,7 @@
 
 	s->be = s->fe;
 	s->logs.logwait = s->fe->to_log;
+	s->logs.level = 0;
 	session_del_srv_conn(s);
 	s->target = NULL;
 	/* re-init store persistence */