微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有 ES 模块的 log4js-node?

如何解决带有 ES 模块的 log4js-node?

我正在尝试在我的代码中设置 log4js-node。 由于我想从不同的 .js 文件写入相同的日志文件,因此我将其设置为 per the documentation

const appSettings = {
        log4js: {
            traceLogConfig: {
                appenders: {
                    fileAppender: { type: 'file',filename: `./logs/${settings.custid}/${Date.Now()}.log`},consoleAppender: { type: 'console' }
                },categories: {
                    default: { appenders: ['fileAppender','consoleAppender'],level: 'trace'}
                }
            }
        }
    };
    
    module.exports = appSettings;

文件中:

import log4js from 'log4js';

//Setting up logger
const { traceLogConfig } = require('./logs').log4js;
log4js.configure(traceLogConfig);
const logger = log4js.getLogger();

但是,当我尝试运行代码时,收到以下错误消息:

const { traceLogConfig } = require('./logs').log4js; ^

ReferenceError: require 未在 ES 模块范围内定义,您可以使用 import 这个文件被当作 ES 模块,因为它 有一个“.js”文件扩展名和 'package.json' 包含“类型”: “模块”。要将其视为 Commonjs 脚本,请将其重命名为使用 '.cjs' 文件扩展名。

我不知道如何将这种结构 (const { traceLogConfig } = require('./logs').log4js;) 转换为 ES6 模块。 我试过了:

import {traceLogConfig} from './logs'.log4js
import {traceLogConfig} from './logs.log4js'
import {traceLogConfig} from './logs.js.log4js'

通常,visual studio code 会给我一个小灯,显示如何将其自动转换为 ES6 模块兼容代码,但这次没有显示

解决方法

好的,我找到了答案。 您需要先像这样导入整个文件:

import appSettings from '../logs.js';

那么调用的时候需要引用具体的设置:

log4js.configure(appSettings.log4js.traceLogConfig);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。