首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现*logger*函数,它将为日志记录准备数据

实现*logger*函数,它将为日志记录准备数据
EN

Stack Overflow用户
提问于 2021-12-30 23:19:48
回答 1查看 172关注 0票数 0

我有一个任务要实现记录器函数,它将为logging.It准备数据,应该有默认的服务配置{serviceName: 'global', serviceId: 1}

下面是一些例子:

代码语言:javascript
复制
 // {"3-0":"[auth_service] Wrong email","3-1":"[auth_service] Wrong password","3-2":"[auth_service] Success login"}
  logger(['Wrong email', 'Wrong password', 'Success login'], {serviceName: 'auth_service', serviceId: 3});

  // {"1-0":"[global] Fatal error","1-1":"[global] Data corrupted"}
  logger(['Fatal error', 'Data corrupted']);

应该用打字本来写。我开始制作这个函数,但我不知道如何使它看起来像示例或测试样例。这就是我到现在为止所做的:

代码语言:javascript
复制
function logger(data: [], serviceInfo: {}) {
    //It should have default service configuration `{serviceName: 'global', serviceId: 1}`
    if (serviceInfo == undefined) {
        serviceInfo = {
            serviceName: "global",
            serviceId: 1,
        };
    } else {
     let obj = {
        
     }
     return obj;
    }
}

和单元测试:

代码语言:javascript
复制
describe('logger', () => {
    it('should log user events', () => {
        const result = logger(['User Event 1', 'User Event 2'], {serviceName: 'user', serviceId: 12});
        const expected = {
            '12-0': '[user] User Event 1',
            '12-1': '[user] User Event 2',
        };
        assert.deepStrictEqual(result, expected)
    });

    it('should log auth events', () => {
        const result = logger(['Event 1', 'Event 2', 'Event 3'], {serviceName: 'auth', serviceId: 2});
        assert.strictEqual(result['2-1'], '[auth] Event 2')
    });

    it('should log global events', () => {
        const result = logger(['Event 1', 'Event 2', 'Event 3']);
        assert.strictEqual(result['1-2'], '[global] Event 3')
    });
});

我考虑将数组推入另一个对象,但我不知道如何根据serviceId显示如下:

代码语言:javascript
复制
{
'12-0':'[user] User event 1'
}

其中12为服务id,0为数组项索引,用户为serviceName,而用户事件1为数组项。我是Javascript和类型记录中的新手,我对所有的细微差别都很好奇。你能帮帮我吗?提前感谢!

编辑:我试了一下,想出了这个函数:

代码语言:javascript
复制
function logger(data: [], serviceInfo: {}) {
    //It should have default service configuration `{serviceName: 'global', serviceId: 1}`
  serviceInfo = {
      serviceName : 'Gigi',
      serviceId : 0
  }

    if (serviceInfo == undefined) {
        serviceInfo = {
            serviceName: "global",
            serviceId: 1,
        };
    } 
    let obj={}
    //obj[serviceInfo.serviceId.value + ]

    data.forEach(function (value, i) {
        //console.log('%d: %s', i, value);
        obj[serviceInfo.serviceId.value +'-'+ i] = '[' + serviceInfo.serviceName.value + ']' + value
    });
    console.log(obj)
}

但在控制台里我得到了:

代码语言:javascript
复制
{
  'undefined-0': '[undefined]User Event 1',
  'undefined-1': '[undefined]User Event 2'
}
{
  'undefined-0': '[undefined]Event 1',
  'undefined-1': '[undefined]Event 2',
  'undefined-2': '[undefined]Event 3'
}
{
  'undefined-0': '[undefined]Event 1',
  'undefined-1': '[undefined]Event 2',
  'undefined-2': '[undefined]Event 3'
}

如果数据来自输入而不是函数,如何访问serviceName和serviceId?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-31 00:09:27

我解决了这个问题,这样:

代码语言:javascript
复制
function logger(data: [], serviceInfo: {}) {
    if (serviceInfo == undefined) {
        serviceInfo = {
            serviceName: "global",
            serviceId: 1,
        };
    }
    let obj = {};

    data.forEach(function (value, i) {
        //console.log('%d: %s', i, value);
        obj[serviceInfo.serviceId + "-" + i] =
            "[" + serviceInfo.serviceName + "] " + value;
    });
    return obj
}

当我编辑这个问题的时候,问题是我错误地加入了object属性来得到这个值,所以,现在这个函数通过了所有的测试单元。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70537632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档