diff --git a/packages/api/src/config/index.ts b/packages/api/src/config/index.ts
index 2bf39a092ad312bec5f2955d6e16d92988a871d4..b07b608ecf07b484ae640ff353900dc028496e68 100644
--- a/packages/api/src/config/index.ts
+++ b/packages/api/src/config/index.ts
@@ -14,6 +14,8 @@ const JWT_ALGORITHMS = ['HS256', 'HS384', 'HS512', 'RS256', 'RS384', 'RS512', 'E
 
 const httpsProxyValidator = z.string().url().optional().transform(urlToSplit)
 
+const logLevelValidator = z.enum(['DEBUG', 'INFO', 'WARNING', 'ERROR'])
+export type LogLevel = z.infer<typeof logLevelValidator>
 const configValidator = caminoConfigValidator.extend({
   API_HOST: z.string(),
   KEYCLOAK_API_CLIENT_ID: z.string(),
@@ -47,6 +49,7 @@ const configValidator = caminoConfigValidator.extend({
   API_MAILJET_SECRET: z.string(),
   API_MAILJET_CONTACTS_LIST_ID: z.coerce.number(),
   API_MAILJET_EXPLOITANTS_GUYANE_LIST_ID: z.coerce.number(),
+  LOG_LEVEL: logLevelValidator.default('INFO'),
   HTTPS_PROXY: httpsProxyValidator,
 })
 
diff --git a/packages/api/src/config/logger.test.ts b/packages/api/src/config/logger.test.ts
deleted file mode 100644
index 5a8535676eb15d3797dd64bdb18afc21d60a2b5d..0000000000000000000000000000000000000000
--- a/packages/api/src/config/logger.test.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { newDateFormated } from './logger'
-import { test, expect } from 'vitest'
-test('newDateFormated', () => {
-  expect(newDateFormated(new Date('2020-06-02T13:35:11.366Z'))).toMatchInlineSnapshot(`"2020-06-02 13:35:11"`)
-  expect(newDateFormated(new Date('2020-06-02T01:02:03.123Z'))).toMatchInlineSnapshot(`"2020-06-02 01:02:03"`)
-})
diff --git a/packages/api/src/config/logger.ts b/packages/api/src/config/logger.ts
index 54eb4bf390c7256a75a8c9bfa70979cea06a268f..2ceea8ffed9bbf1bee622f89a98e43abd3424b34 100644
--- a/packages/api/src/config/logger.ts
+++ b/packages/api/src/config/logger.ts
@@ -1,8 +1,10 @@
 /* eslint no-console: 0 */
 
+import { exhaustiveCheck } from 'camino-common/src/typescript-tools'
+import { LogLevel } from '.'
+
 const numberToDoubleCharString = (param: number): string => param.toString(10).padStart(2, '0')
-// TODO 2022-07-13: move to common?
-export const newDateFormated = (date = new Date()): string => {
+const newDateFormated = (date = new Date()): string => {
   const year = date.getFullYear()
   const month = numberToDoubleCharString(date.getMonth() + 1)
   const day = numberToDoubleCharString(date.getDate())
@@ -13,10 +15,27 @@ export const newDateFormated = (date = new Date()): string => {
   return year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + seconds
 }
 
-export const consoleOverride = (color = true) => {
-  console.info = (...args) => console.log(newDateFormated(), color ? ' [\x1b[32minfo\x1b[0m]' : ' [info]', ...args)
-  console.warn = (...args) => console.log(newDateFormated(), color ? ' [\x1b[33mwarn\x1b[0m]' : ' [warn]', ...args)
-  console.error = (...args) => console.log(newDateFormated(), color ? '[\x1b[31merror\x1b[0m]' : '[error]', ...args)
-  // TODO 2022-07-13 Not used in the application...
-  console.debug = (...args) => console.log(newDateFormated(), color ? '[\x1b[36mdebug\x1b[0m]' : '[debug]', ...args)
+export const consoleOverride = (logLevel: LogLevel, color = true): void => {
+  console.info = () => {}
+  console.warn = () => {}
+  console.error = () => {}
+  console.debug = () => {}
+
+  switch (logLevel) {
+    // @ts-ignore fallthrough
+    case 'DEBUG':
+      console.debug = (...args) => console.log(newDateFormated(), color ? '[\x1b[36mdebug\x1b[0m]' : '[debug]', ...args)
+    // @ts-ignore fallthrough
+    case 'INFO':
+      console.info = (...args) => console.log(newDateFormated(), color ? ' [\x1b[32minfo\x1b[0m]' : ' [info]', ...args)
+    // @ts-ignore fallthrough
+    case 'WARNING':
+      console.warn = (...args) => console.log(newDateFormated(), color ? ' [\x1b[33mwarn\x1b[0m]' : ' [warn]', ...args)
+    // @ts-ignore fallthrough
+    case 'ERROR':
+      console.error = (...args) => console.log(newDateFormated(), color ? '[\x1b[31merror\x1b[0m]' : '[error]', ...args)
+      break
+    default:
+      exhaustiveCheck(logLevel)
+  }
 }
diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts
index 70a1db7987e567c896ac935d1bb79a6c14553e09..e35f8915eae12dd74c8bbabe7070d38babcca647 100644
--- a/packages/api/src/index.ts
+++ b/packages/api/src/index.ts
@@ -45,7 +45,7 @@ const pool = new pg.Pool({
   idleTimeoutMillis: 60000,
 })
 
-consoleOverride()
+consoleOverride(config().LOG_LEVEL)
 filesInit()
 databaseInit(pool)
   .then(() => {
diff --git a/packages/api/src/scripts/daily.ts b/packages/api/src/scripts/daily.ts
index 7205d8dd04e060ece0b61ead719f58639d01d9c8..de39d4b1298b375456b04fa7fe98b81b5871634f 100644
--- a/packages/api/src/scripts/daily.ts
+++ b/packages/api/src/scripts/daily.ts
@@ -19,7 +19,7 @@ if (isNotNullNorUndefined(config().CAMINO_STAGE)) {
   const logger = new Console.Console({ stdout: output, stderr: output })
   // eslint-disable-next-line no-console
   console.log = logger.log
-  consoleOverride(false)
+  consoleOverride(config().LOG_LEVEL, false)
 }
 
 // Le pool ne doit ĂȘtre qu'aux entrypoints : le daily, le monthly, et l'application.
diff --git a/packages/api/src/scripts/monthly.ts b/packages/api/src/scripts/monthly.ts
index 7c4a148594f55a74f670276c485479f1a16166fc..8e8fba9cbe07d15e5df7757dcb73f37c68a14997 100644
--- a/packages/api/src/scripts/monthly.ts
+++ b/packages/api/src/scripts/monthly.ts
@@ -27,7 +27,7 @@ if (isNotNullNorUndefined(config().CAMINO_STAGE)) {
   const logger = new Console.Console({ stdout: output, stderr: output })
   // eslint-disable-next-line no-console
   console.log = logger.log
-  consoleOverride(false)
+  consoleOverride(config().LOG_LEVEL, false)
 }
 
 const tasks = async () => {