npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

async-logger

v2.0.1

Published

一个通用的日志标准库,为Node应用提供一个统一标准

Readme

# async-logger

一个支持 traceId 的日志组建

使用方式

配置文件

{
    datePattern: 'YYYYMMDD-',   // 日志文件名时间格式
    isDatePrefix: true,         // 日志文件名时间是否是前缀
    name: 'logger',             // logger实例的名字
    filename:"test",            // 日志文件名filename部分
    dir:'/log',                 // 日志文件目录,使用绝对路径
    level: 'info',              // 最低日志等级
    console:true,               // 是否在console打印
    needErrorFile: true,        // 是否同时生成-error.log日志
}

配置方式

    // logger.js

    const config = require('config');
    const path = require('path');
    const { Logger } = require('async-logger');

    /**
    * require('./log')(name)
    *
    * @return {Function} log
    */
    module.exports = function(name) {
        const options = Object.assign({}, config.logger);

        // 组织一个绝对路径传入组件
        options.dir = path.join(`${__dirname}/${config.logger.dir}`);
        return Logger(config.logger)(name);
    };

使用方式

    // server.js
    const Koa = require('koa');
    const { genTraceId, ns } = require('async-logger');

    const logger = require('./logger.js')('servers');

    const { middleware1 } = require('./slave1.js');
    const { middleware2 } = require('./slave2.js');

    const app = new Koa();

    ns.run(() => {
        // 生成traceId
        app.use(async(ctx, next) => {
            logger.info('this is entry script.')
            await middleware1();
            await middleware2();
            await next();
        });
    })
    // slave1.js
    const logger = require('./logger.js')('foo-bar');

    exports.middleware1 = async(ctx, next) => {
        logger.info('this is a middleware');

        await next();
    });
    // slave2.js
    const logger = require('./logger.js')('foo-bar');

    exports.middleware2 = async(ctx, next) => {
        logger.info('this is another middleware');

        await next();
    });