Skip to content

Commit 3e615bd

Browse files
committed
feat: add log-level=debug
1 parent bddfa27 commit 3e615bd

File tree

6 files changed

+19
-10
lines changed

6 files changed

+19
-10
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
1414
- #3210, Dump schema cache through admin API - @taimoorzaeem
1515
- #2676, Performance improvement on bulk json inserts, around 10% increase on requests per second by removing `json_typeof` from write queries - @steve-chavez
1616
- #3214, Log connection pool events on log-level=info - @steve-chavez
17+
- #3435, Add log-level=debug, for development purposes - @steve-chavez
1718

1819
### Fixed
1920

docs/references/configuration.rst

+2
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,8 @@ log-level
680680
# All the "warn" level events plus all requests (every status code) are logged
681681
log-level = "info"
682682
683+
# All the above plus events for development purposes are logged
684+
log-level = "debug"
683685
684686
Because currently there's no buffering for logging, the levels with minimal logging(``crit/error``) will increase throughput.
685687

src/PostgREST/CLI.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ exampleConfigFile =
203203
|## Enables and set JWT Cache max lifetime, disables caching with 0
204204
|# jwt-cache-max-lifetime = 0
205205
|
206-
|## Logging level, the admitted values are: crit, error, warn and info.
206+
|## Logging level, the admitted values are: crit, error, warn, info and debug.
207207
|log-level = "error"
208208
|
209209
|## Determine if the OpenAPI output should follow or ignore role privileges or be disabled entirely.

src/PostgREST/Config.hs

+3-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ data AppConfig = AppConfig
114114
, configInternalSCSleep :: Maybe Int32
115115
}
116116

117-
data LogLevel = LogCrit | LogError | LogWarn | LogInfo
117+
data LogLevel = LogCrit | LogError | LogWarn | LogInfo | LogDebug
118118
deriving (Eq, Ord)
119119

120120
dumpLogLevel :: LogLevel -> Text
@@ -123,6 +123,7 @@ dumpLogLevel = \case
123123
LogError -> "error"
124124
LogWarn -> "warn"
125125
LogInfo -> "info"
126+
LogDebug -> "debug"
126127

127128
data OpenAPIMode = OAFollowPriv | OAIgnorePriv | OADisabled
128129
deriving Eq
@@ -338,6 +339,7 @@ parser optPath env dbSettings roleSettings roleIsolationLvl =
338339
Just "error" -> pure LogError
339340
Just "warn" -> pure LogWarn
340341
Just "info" -> pure LogInfo
342+
Just "debug" -> pure LogDebug
341343
Just _ -> fail "Invalid logging level. Check your configuration."
342344

343345
parseTxEnd :: C.Key -> ((Bool, Bool) -> Bool) -> C.Parser C.Config Bool

src/PostgREST/Logger.hs

+7-3
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,11 @@ logWithDebounce loggerState action = do
5656

5757
middleware :: LogLevel -> (Wai.Request -> Maybe BS.ByteString) -> Wai.Middleware
5858
middleware logLevel getAuthRole = case logLevel of
59-
LogInfo -> requestLogger (const True)
60-
LogWarn -> requestLogger (>= status400)
61-
LogError -> requestLogger (>= status500)
6259
LogCrit -> requestLogger (const False)
60+
LogError -> requestLogger (>= status500)
61+
LogWarn -> requestLogger (>= status400)
62+
LogInfo -> requestLogger (const True)
63+
LogDebug -> requestLogger (const True)
6364
where
6465
requestLogger filterStatus = unsafePerformIO $
6566
Wai.mkRequestLogger Wai.defaultRequestLoggerSettings
@@ -84,6 +85,9 @@ observationLogger loggerState logLevel obs = case obs of
8485
o@(HasqlPoolObs _) -> do
8586
when (logLevel >= LogInfo) $ do
8687
logWithZTime loggerState $ observationMessage o
88+
o@(SchemaCacheLoadedObs _) -> do
89+
when (logLevel >= LogDebug) $ do
90+
logWithZTime loggerState $ observationMessage o
8791
o ->
8892
logWithZTime loggerState $ observationMessage o
8993

test/io/test_io.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,7 @@ def sleep(i=i):
575575
assert delta > 1 and delta < 1.5
576576

577577

578-
@pytest.mark.parametrize("level", ["crit", "error", "warn", "info"])
578+
@pytest.mark.parametrize("level", ["crit", "error", "warn", "info", "debug"])
579579
def test_pool_acquisition_timeout(level, defaultenv, metapostgrest):
580580
"Verify that PGRST_DB_POOL_ACQUISITION_TIMEOUT times out when the pool is empty"
581581

@@ -597,7 +597,7 @@ def test_pool_acquisition_timeout(level, defaultenv, metapostgrest):
597597

598598
if level == "crit":
599599
assert len(output) == 0
600-
elif level == "info":
600+
elif level in ["info", "debug"]:
601601
assert " 504 " in output[0]
602602
assert "Timed out acquiring connection from connection pool." in output[2]
603603

@@ -772,7 +772,7 @@ def test_admin_works_with_host_special_values(specialhostvalue, defaultenv):
772772
assert response.status_code == 200
773773

774774

775-
@pytest.mark.parametrize("level", ["crit", "error", "warn", "info"])
775+
@pytest.mark.parametrize("level", ["crit", "error", "warn", "info", "debug"])
776776
def test_log_level(level, defaultenv):
777777
"log_level should filter request logging"
778778

@@ -1358,7 +1358,7 @@ def test_no_preflight_request_with_CORS_config_should_not_return_header(defaulte
13581358
assert "Access-Control-Allow-Origin" not in response.headers
13591359

13601360

1361-
@pytest.mark.parametrize("level", ["crit", "error", "warn", "info"])
1361+
@pytest.mark.parametrize("level", ["crit", "error", "warn", "info", "debug"])
13621362
def test_db_error_logging_to_stderr(level, defaultenv, metapostgrest):
13631363
"verify that DB errors are logged to stderr"
13641364

@@ -1381,7 +1381,7 @@ def test_db_error_logging_to_stderr(level, defaultenv, metapostgrest):
13811381

13821382
if level == "crit":
13831383
assert len(output) == 0
1384-
elif level == "info":
1384+
elif level in ["info", "debug"]:
13851385
assert " 500 " in output[0]
13861386
assert "canceling statement due to statement timeout" in output[3]
13871387
else:

0 commit comments

Comments
 (0)