Skip to content

Commit

Permalink
Merge pull request #1267 from ZachHaber/master
Browse files Browse the repository at this point in the history
Make Appender Type extensible from other modules and the user
  • Loading branch information
lamweili committed Jun 9, 2022
2 parents 34f314a + 6ba2b0c commit 6a0e492
Show file tree
Hide file tree
Showing 5 changed files with 161 additions and 79 deletions.
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

0 comments on commit 6a0e492

Please sign in to comment.