Просмотр исходного кода

add timezone, display offset in logs

Richard Köhl 2 лет назад
Родитель
Сommit
b338ff2f6d
3 измененных файлов с 19 добавлено и 2 удалено
  1. 1 0
      .env.example
  2. 1 0
      docker-compose.yml
  3. 17 2
      src/infrastructure/logger.ts

+ 1 - 0
.env.example

@@ -4,3 +4,4 @@ DEBUG_LEVEL=DEBUG # DEBUG, INFO, WARNING, ERROR, CRITICAL
 DOCKER_USER_AGENT="${APPLICATION_NAME}/${VERSION} (Docker; Wget; HealthCheck)"
 
 GREETING="hello world!"
+TZ="Europe/Berlin"

+ 1 - 0
docker-compose.yml

@@ -11,6 +11,7 @@ services:
       - DEBUG_LEVEL=${DEBUG_LEVEL-INFO}
       - DOCKER_USER_AGENT=${DOCKER_USER_AGENT-docker wget}
       - GREETING=${GREETING-hello world!}
+      - TZ=${TZ-GMT}
     volumes:
       - ./src:/app/src:ro
     command: ["deno", "task", "dev"]

+ 17 - 2
src/infrastructure/logger.ts

@@ -16,14 +16,29 @@ export function getLogLevelFromEnv(): log.LevelName {
   return getLogLevel(logLevel);
 }
 
+function getOffSet(now: Date): string {
+  const timezoneOffsetMinutes = now.getTimezoneOffset();
+  const sign = timezoneOffsetMinutes > 0 ? '-' : '+';
+  const hours = Math.abs(Math.floor(timezoneOffsetMinutes / 60)).toString()
+    .padStart(2, '0');
+  const minutes = Math.abs(timezoneOffsetMinutes % 60).toString().padStart(
+    2,
+    '0',
+  );
+
+  return `${sign}${hours}:${minutes}`;
+}
+
 const logLevel = getLogLevelFromEnv();
 
 log.setup({
   handlers: {
     console: new log.handlers.ConsoleHandler(getLogLevel(logLevel), {
       formatter: (logRecord) => {
-        const date = dateFormat(new Date(), 'yyyy-MM-dd HH:mm:ss.SSS');
-        return `${date}: [${logRecord.levelName}] ${logRecord.msg}`;
+        const now = new Date();
+        const date = dateFormat(now, 'yyyy-MM-ddTHH:mm:ss.SSS') +
+          getOffSet(now);
+        return `${date} [${logRecord.levelName}] ${logRecord.msg}`;
       },
     }),
   },