Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/consts/src/consts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,7 @@ export const ENV_VARS = {
XVFB: 'APIFY_XVFB',
MEMORY_MBYTES: 'APIFY_MEMORY_MBYTES',
LOG_LEVEL: 'APIFY_LOG_LEVEL',
LOG_FORMAT: 'APIFY_LOG_FORMAT',
ACTOR_EVENTS_WS_URL: 'APIFY_ACTOR_EVENTS_WS_URL',
CHROME_EXECUTABLE_PATH: 'APIFY_CHROME_EXECUTABLE_PATH',
CONTAINER_PORT: 'APIFY_CONTAINER_PORT',
Expand Down
17 changes: 14 additions & 3 deletions packages/log/src/log.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { LoggerText } from './logger_text';
import { Logger } from './logger';
import { LogLevel, PREFIX_DELIMITER } from './log_consts';
import { getLevelFromEnv, limitDepth } from './log_helpers';
import { LogFormat, LogLevel, PREFIX_DELIMITER } from './log_consts';
import { getFormatFromEnv, getLevelFromEnv, limitDepth } from './log_helpers';
import { LoggerJson } from './logger_json';

export interface LoggerOptions {
/**
Expand All @@ -26,13 +27,23 @@ export interface LoggerOptions {
data?: Record<string, unknown>,
}

const getLoggerForFormat = (format: LogFormat): Logger => {
switch (format) {
case LogFormat.JSON:
return new LoggerJson();
case LogFormat.TEXT:
default:
return new LoggerText();
}
};

const getDefaultOptions = () => ({
level: getLevelFromEnv(),
maxDepth: 4,
maxStringLength: 2000,
prefix: null,
suffix: null,
logger: new LoggerText(),
logger: getLoggerForFormat(getFormatFromEnv()),
data: {},
});

Expand Down
5 changes: 5 additions & 0 deletions packages/log/src/log_consts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ export enum LogLevel {
PERF = 6,
}

export enum LogFormat {
JSON = 'JSON',
TEXT = 'TEXT',
}

export const PREFIX_DELIMITER = ':';
export const LEVELS = LogLevel;

Expand Down
21 changes: 20 additions & 1 deletion packages/log/src/log_helpers.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { ENV_VARS } from '@apify/consts';
import { LogLevel } from './log_consts';
import { LogLevel, LogFormat } from './log_consts';

/**
* Ensures a string is shorter than a specified number of character, and truncates it if not, appending a specific suffix to it.
Expand Down Expand Up @@ -33,6 +33,25 @@ export function getLevelFromEnv(): number {
return +envVar;
}

/**
* Gets log format from env variable. Currently, values 'JSON' and 'TEXT' are supported.
* Defaults to 'TEXT' if no value is specified.
*/
export function getFormatFromEnv(): LogFormat {
const envVar = process.env[ENV_VARS.LOG_FORMAT] || LogFormat.TEXT;

switch (envVar.toLowerCase()) {
case LogFormat.JSON.toLowerCase():
return LogFormat.JSON;
case LogFormat.TEXT.toLowerCase():
return LogFormat.TEXT;
default:
// eslint-disable-next-line no-console
console.warn(`Unknown value for environment variable ${ENV_VARS.LOG_FORMAT}: ${envVar}`);
return LogFormat.TEXT;
}
}

/**
* Limits given object to given depth and escapes function with [function] string.
*
Expand Down