问题描述
我正在使用打字稿和Winston进行日志记录来编写节点应用程序。
我用“ logger”成员和“ init()”成员函数创建了一个“ Logger”类。在导出“ Logger”类时,我知道我们可以在另一个文件中访问“ logger”成员。
import winston from "winston";
class Logger {
public static logger: any;
public static init():any {
this.logger = winston.createLogger({
level: 'info',format: winston.format.json(),defaultMeta: { service: 'user-service' },transports: [
new winston.transports.File({ filename: 'error.log',level: 'error' }),new winston.transports.File({ filename: 'combined.log' }),],});
}
export default Logger;
我正在按以下方式访问此Logger类。
import Logger from './Logger'
Logger.init();
//access logger member here...
使用Logger.init()初始化“ logger”成员后,我希望“ logger”成员仅可读。有可能这样做吗?
解决方法
如果您想要在整个应用程序中保持Winston的配置不变,则解决方案可能是:
import winston,{ Logger as WinstonLogger } from 'winston'; // Rename the original interface from winston
export type Logger = Pick<WinstonLogger,'log'>; // Create a new interface that only exposes the `log` method
const logger: Logger = winston.createLogger({...}) // Configure your winston instance
export default logger; // Now methods other then `log` cannot be called outside of this file