Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make Appender Type extensible from other modules and the user #1267

Merged
merged 3 commits into from Jun 9, 2022
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion .editorconfig
Expand Up @@ -9,7 +9,7 @@ charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.js]
[*.{js,ts,[cm]js,[cm]ts}]
quote_type = single
curly_bracket_next_line = true
indent_brace_style = Allman
Expand Down
5 changes: 5 additions & 0 deletions .gitattributes
Expand Up @@ -10,6 +10,11 @@
*.css text eol=lf
*.html text eol=lf
*.js text eol=lf
*.cjs text eol=lf
*.mjs text eol=lf
*.ts text eol=lf
*.cts text eol=lf
*.mts text eol=lf
*.json text eol=lf
*.md text eol=lf
*.sh text eol=lf
Expand Down
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -5,7 +5,7 @@
"homepage": "https://log4js-node.github.io/log4js-node/",
"files": [
"lib",
"types",
"types/*.d.ts",
"CHANGELOG.md",
"SECURITY.md"
],
Expand Down
122 changes: 85 additions & 37 deletions types/log4js.d.ts
@@ -1,13 +1,21 @@
// Type definitions for log4js

type Format = string | ((req: any, res: any, formatter: ((str: string) => string)) => string);
type Format =
| string
| ((req: any, res: any, formatter: (str: string) => string) => string);

export interface Log4js {
getLogger(category?: string): Logger;
configure(filename: string): Log4js;
configure(config: Configuration): Log4js;
addLayout(name: string, config: (a: any) => (logEvent: LoggingEvent) => string): void;
connectLogger(logger: Logger, options: { format?: Format; level?: string; nolog?: any; }): any; // express.Handler;
addLayout(
name: string,
config: (a: any) => (logEvent: LoggingEvent) => string
): void;
connectLogger(
logger: Logger,
options: { format?: Format; level?: string; nolog?: any }
): any; // express.Handler;
levels: Levels;
shutdown(cb: (error: Error) => void): void | null;
}
Expand All @@ -17,9 +25,21 @@ export function getLogger(category?: string): Logger;
export function configure(filename: string): Log4js;
export function configure(config: Configuration): Log4js;

export function addLayout(name: string, config: (a: any) => (logEvent: LoggingEvent) => any): void;

export function connectLogger(logger: Logger, options: { format?: Format; level?: string; nolog?: any; statusRules?: any[], context?: boolean }): any; // express.Handler;
export function addLayout(
name: string,
config: (a: any) => (logEvent: LoggingEvent) => any
): void;

export function connectLogger(
logger: Logger,
options: {
format?: Format;
level?: string;
nolog?: any;
statusRules?: any[];
context?: boolean;
}
): any; // express.Handler;

export function recording(): Recording;

Expand Down Expand Up @@ -56,9 +76,9 @@ export interface Level {
}

export interface LoggingEvent {
categoryName: string; // name of category
level: Level; // level of message
data: any[]; // objects to log
categoryName: string; // name of category
level: Level; // level of message
data: any[]; // objects to log
startTime: Date;
pid: number;
context: any;
Expand Down Expand Up @@ -89,15 +109,21 @@ export interface CustomLayout {
type: string;
}

export type Layout = BasicLayout | ColoredLayout | MessagePassThroughLayout | DummyLayout | PatternLayout | CustomLayout;
export type Layout =
| BasicLayout
| ColoredLayout
| MessagePassThroughLayout
| DummyLayout
| PatternLayout
| CustomLayout;

/**
* Category Filter
*
* @see https://log4js-node.github.io/log4js-node/categoryFilter.html
*/
export interface CategoryFilterAppender {
type: "categoryFilter";
type: 'categoryFilter';
// the category (or categories if you provide an array of values) that will be excluded from the appender.
exclude?: string | string[];
// the name of the appender to filter. see https://log4js-node.github.io/log4js-node/layouts.html
Expand All @@ -110,7 +136,7 @@ export interface CategoryFilterAppender {
* @see https://log4js-node.github.io/log4js-node/noLogFilter.html
*/
export interface NoLogFilterAppender {
type: "noLogFilter";
type: 'noLogFilter';
// the regular expression (or the regular expressions if you provide an array of values)
// will be used for evaluating the events to pass to the appender.
// The events, which will match the regular expression, will be excluded and so not logged.
Expand Down Expand Up @@ -265,11 +291,11 @@ export interface StandardOutputAppender {
export interface TCPAppender {
type: 'tcp';
// (defaults to 5000)
port?: number
port?: number;
// (defaults to localhost)
host?: string
host?: string;
// (defaults to __LOG4JS__)
endMsg?: string
endMsg?: string;
// (defaults to a serialized log event)
layout?: Layout;
}
Expand All @@ -279,6 +305,35 @@ export interface CustomAppender {
[key: string]: any;
}

/**
* Mapping of all Appenders to allow for declaration merging
* @example
* declare module 'log4js' {
* interface Appenders {
* StorageTestAppender: {
* type: 'storageTest';
* storageMedium: 'dvd' | 'usb' | 'hdd';
* };
* }
* }
*/
export interface Appenders {
CategoryFilterAppender: CategoryFilterAppender;
ConsoleAppender: ConsoleAppender;
FileAppender: FileAppender;
SyncfileAppender: SyncfileAppender;
DateFileAppender: DateFileAppender;
LogLevelFilterAppender: LogLevelFilterAppender;
NoLogFilterAppender: NoLogFilterAppender;
MultiFileAppender: MultiFileAppender;
MultiprocessAppender: MultiprocessAppender;
RecordingAppender: RecordingAppender;
StandardErrorAppender: StandardErrorAppender;
StandardOutputAppender: StandardOutputAppender;
TCPAppender: TCPAppender;
CustomAppender: CustomAppender;
}

export interface AppenderModule {
configure: (config: Config, layouts: LayoutsParam) => AppenderFunction;
}
Expand All @@ -287,7 +342,7 @@ export type AppenderFunction = (loggingEvent: LoggingEvent) => void;

// TODO: Actually add types here...
// It's supposed to be the full config element
export type Config = any
export type Config = any;

export interface LayoutsParam {
basicLayout: LayoutFunction;
Expand All @@ -307,20 +362,7 @@ export interface PatternToken {

export type LayoutFunction = (loggingEvent: LoggingEvent) => string;

export type Appender = CategoryFilterAppender
| ConsoleAppender
| FileAppender
| SyncfileAppender
| DateFileAppender
| LogLevelFilterAppender
| NoLogFilterAppender
| MultiFileAppender
| MultiprocessAppender
| RecordingAppender
| StandardErrorAppender
| StandardOutputAppender
| TCPAppender
| CustomAppender;
export type Appender = Appenders[keyof Appenders];

export interface Levels {
ALL: Level;
Expand All @@ -338,20 +380,26 @@ export interface Levels {
}

export interface Configuration {
appenders: { [name: string]: Appender; };
categories: { [name: string]: { appenders: string[]; level: string; enableCallStack?: boolean; } };
appenders: { [name: string]: Appender };
categories: {
[name: string]: {
appenders: string[];
level: string;
enableCallStack?: boolean;
};
};
pm2?: boolean;
pm2InstanceVar?: string;
levels?: Levels;
disableClustering?: boolean;
}

export interface Recording {
configure(loggingEvent: LoggingEvent): void
replay(): LoggingEvent[]
playback(): LoggingEvent[]
reset(): void
erase(): void
configure(loggingEvent: LoggingEvent): void;
replay(): LoggingEvent[];
playback(): LoggingEvent[];
reset(): void;
erase(): void;
}

export class Logger {
Expand Down