@artusx/plugin-log4js
https://github.com/log4js-node/log4js-node (opens in a new tab)
插件基于 log4js 封装,用于替代框架内置的 logger (仅只是 console / stdout)。
配置
配置完全兼容 log4js,详细配置请参考官网文档。
配置插件
默认配置
默认配置仅输出日志到控制台。
config.default.ts
export default {
log4js: {
appenders: {
console: { type: 'console' },
},
categories: {
default: { appenders: ['console'], level: 'info' },
},
},
};
进阶配置
可通过自定义配置,开启 file 类型的 appender,并输出到临时目录。
config.default.ts
import os from 'os';
import path from 'path';
import fs from 'fs-extra';
import { LoggerOptions, LoggerLevel } from '@artus/core';
import { Log4jsConfiguration } from '@artusx/core';
const tmpDir = os.tmpdir();
const rootDir = path.resolve(__dirname, '../..');
const logsDir = path.join(tmpDir, 'artusx/logs');
export default () => {
fs.ensureDirSync(logsDir);
const logger: LoggerOptions = {
level: LoggerLevel.DEBUG,
};
const log4js: Log4jsConfiguration = {
appenders: {
console: { type: 'console' },
info: { type: 'file', filename: `${logsDir}/info.log` },
error: { type: 'file', filename: `${logsDir}/error.log` },
},
categories: {
console: {
appenders: ['console'],
level: 'info',
},
error: {
appenders: ['error'],
level: 'error',
},
default: {
appenders: ['info'],
level: 'info',
},
},
};
return {
// default logger
logger,
// log4js
log4js,
};
};
启用插件
core 插件已默认集成,无需单独配置;如需单独使用,可通过如下方式开启插件。
plugin.ts
export default {
log4js: {
enable: true,
package: '@artusx/plugin-log4js',
},
};
使用
在服务中,可使用 ArtusXInjectEnum 或者 Log4jsClient 注入 Log4jsClient 对象,并通过 getLogger
方法获取对应的 logger。
controller/home.ts
import { Inject } from '@artus/core';
import { Controller, GET, POST } from '@artusx/core';
import { ArtusXInjectEnum } from '@artusx/utils';
import type { ArtusXContext, Log4jsClient } from '@artusx/core';
@Controller()
export default class HomeController {
@Inject(ArtusXInjectEnum.Log4js)
log4js: Log4jsClient;
@GET('/')
@POST('/')
async home(ctx: ArtusXContext) {
const logger = this.log4js.getLogger('default');
const errorLogger = this.log4js.getLogger('error');
logger.info(`path: /, method: GET`);
errorLogger.error(new Error('error'));
ctx.body = 'Hello World';
}
}