Winston: りィンストンをフロント゚ンド぀たりブラりザでロギングに䜿甚できたすか

䜜成日 2013幎07月29日  Â·  60コメント  Â·  ゜ヌス: winstonjs/winston

りィンストンをフロント゚ンドでロギングに䜿甚できたすか フロント゚ンドのログ機胜を向䞊させるためにWinstonを䜿甚したいず思いたす。 これはできたすか

feature request

最も参考になるコメント

私がパッケヌゞを芋お、ブラりザのサポヌトがないこずに気付いたずき、私の垌望は本圓に高くなりたした。
これは、ブラりザで私が自家補のものを眮き換えるのに本圓に玠晎らしいでしょう。

党おのコメント60件

私はそれを詊しおいたせんが、これはhttps://github.com/farpoint/meteor-winston-clientに圹立぀かもしれたせん

これは関連しおいたす https //github.com/flatiron/winston/issues/180

そのリンクには404がありたす@joshacheson !!

この問題に぀いお䜕か進展はありたすか

582からのフィヌドバックに基づくず、将来のPRは、 brfsなどのシムを䜿甚するのではなく、コアロゞックずトランスポヌトの分離に焊点を圓おる必芁があるようです。 これは倧きな構造䞊の倉曎であり、最終的にはこれを維持するために残されたものになるため、スタむルずアプロヌチに関するコア開発者からのガむダンスがほが確実に必芁になりたす。

幞いなこずに、コヌドはほずんどクリヌンで構造化されおいたすが、スタむルずアプロヌチに぀いおコア開発者からのガむダンスが必芁になりたす。 @indexzero / @poseはあなたの考えを共有できたすか

この問題の進展はありたすか

私がパッケヌゞを芋お、ブラりザのサポヌトがないこずに気付いたずき、私の垌望は本圓に高くなりたした。
これは、ブラりザで私が自家補のものを眮き換えるのに本圓に玠晎らしいでしょう。

+1

同じか私。 前面ず背面に同じロギングラむブラリがあるこずも圹立ちたす。

私はこれを閲芧しおいたしたが、httpトランスポヌトがありたすが、ブラりザ/その他の暙準クラむアントがないように芋えるのは残念なこずのようです。

bunyanを䜿わなければならないのは悲しい

これに関するニュヌスはありたすか

本圓に䜿甚したい堎合は、次のようにカスタムトランスポヌトを䜜成できたす。

const Transport = require('winston-transport');

export default class BrowserConsole extends Transport {
  constructor(opts) {
    super(opts);

    this.name = 'BrowserConsole';
    this.levels = {
        error: 0,
        warn: 1,
        info: 2,
        debug: 4,
    };

    this.methods = {
        error: 'error',
        warn: 'warn',
        info: 'info',
        debug: 'log',
    };

    this.level = opts.level && this.levels.hasOwnProperty(opts.level)
                  ? opts.level : 'info';
  }

  log(method, message) {
    setImmediate(() => {
      this.emit('logged', method);
    });

    const val = this.levels[method];
    const mappedMethod = this.methods[method];

    if (val <= this.levels[this.level]) {
      // eslint-disable-next-line
      console[mappedMethod](message);
    }
  }
}

次に、次のように䜿甚できたす。

import BrowserConsole from './BrowserConsole';

const { createLogger, transports } = require('winston');

const log = createLogger({
  level: 'info',
});

if (process.env.NODE_ENV !== 'production') {
  log.add(new BrowserConsole({
    level: 'info',
  }));
}

このトランスポヌトでは、レガシヌコヌドず芋なされるため、圹に立たない譊告が衚瀺されたす。 他のコン゜ヌルメ゜ッド table 、 dir 、 trace 、...を䜿甚する可胜性を远加するこずもできたすが、簡単にするために、そのようにしおいたす。

ありがずう@chrisvoo 、私はこの解決策を詊したしたが、゚ラヌが発生したした

ReferenceError: Buffer is not defined
    replacer 
    json.js/module.exports< 
    _transform 
    _stream_transform.js/Transform.prototype._read
    _stream_transform.js/Transform.prototype._write
    doWrite
    writeOrBuffer
    _stream_writable.js/Writable.prototype.write
    log

@ dmitry-salnikovわかりたせんが、このコヌドがストリヌムを䜿甚しおいる理由がわかりたせん。 たぶん私のナヌスケヌスは単玔すぎたした。 あなたがそれをどのように䜿っおいるかを共有しおみおください。

@chrisvoo BrowserConsole実装を別のファむルにコピヌしお貌り付け、次に別のファむルにコヌドの2番目の郚分を貌り付け、 BrowserConsoleトランスポヌトコヌドスニペットの最埌の行を远加した埌、 '単に詊したした

log.info('hello world');

次に、゚ラヌが発生し、次のこずを詊したした。

log.log('info, 'hello world');

どちらの呌び出しも同じ゚ラヌを返したす。

ブラりザでNodeを䜿甚できるようにする私の環境は、Meteor.js v1.6Node 8.8.1です。 たた、コヌドスニペットのどの行も倉曎しおいたせん。

ずころで私は少し前にりィンストンを䜿い始めたので、䜕か間違ったこずをしおいる可胜性がありたす。

@ dmitry-salnikovどのような゚ラヌが発生したすか 「情報は機胜ではない」のように 倚分䜕らかの理由で、それはひどく茞入されおいたす。

@chrisvoo芋おください
screenshot 2017-11-08 20 35 31

BrowserConsole.js ファむルツリヌで確認できたすの内容は、スニペットずたったく同じです。

そしお、私はあなたに同意したす、私は茞入に䜕か問題があるず感じたす、しかし理由を理解するこずができたせん:(これに぀いおあなたの考えを共有しおください

あなたのりィンストンバヌゞョンは䜕ですか 私のは

"winston": "^3.0.0-rc1",
"winston-transport": "^3.0.1"

実は同じ

$ npm ls | grep winston
├─┬ [email protected]
│ └── [email protected]
└── [email protected]
$ cat package.json | grep winston
    "winston": "^3.0.0-rc1",
    "winston-transport": "^3.0.1"

この問題を解決するために、私は別のテストを行いたした。

import winston from 'winston';
import BrowserConsole from '/imports/BrowserConsole.js';

const format = winston.format;
// next line throws exception, see below
const { combine, timestamp, label, printf, colorize, prettyPrint } = format;

const logger = winston.createLogger({
...

次の゚ラヌが発生したした Cannot find module './combine'

スタックトレヌスず関連コヌドブラりザのスクリヌンショットは次のずおりです。
screenshot 2017-11-10 04 01 04

䜕かが本圓にひどくむンポヌトされおいるようです。 @chrisvoo芋おいただけたせんか

Winston 3.0.0では、トランスポヌトはストリヌムです。 ただし、browserify-streamでは、 readableStream instanceof Streamは圓おはたりたせん。 これにより、Winstonは、トランスポヌトをレガシヌラッパヌでラップし、譊告を発するようにフォヌルバックしたす。 ストリヌム性の怜出に別の方法を䜿甚するようにPRを䜜成したした1145

@Jasu true私もこれに気づきたした、私はこれに関しおwinston-transportで以前に問題を提出したした。 たた、コン゜ヌルトランスポヌトを同圢にするためのプルリク゚ストもたもなく送信したす。

IGNOREMEここでコメントしおいるので、将来この問題を簡単に芋぀けるこずができたす[単独でサブスクラむブするこずではできないため]https://github.com/isaacs/github/issues/283。

同じ問題、 Error: Cannot find module './combine'に遭遇したした。

+1

@chrisvoo 以䞋は、スニペットを実行しようずしたずきの゚ラヌですwinstonずwinston-transportは3぀以䞊のバヌゞョンにありたす
winston-transport /index.jsの゚ラヌ
モゞュヌルが芋぀かりたせん゚ラヌnode_modules / winston-transportの「stream」を解決できたせん

PR11452017幎11月オヌプンが今幎合䜵する可胜性はありたすか りィンク

@ dmitry-salnikov1145がマスタヌにマヌゞされたした。 ただリリヌスされおいたせん。

クロヌズドクロヌズドクロヌズド。

じゃがいもを応揎しおくれおありがずう

5幎、少なくずもその実を結ぶ。 Winstonは、JavaScriptIMOに最適なロギングシステムです。

ありがずう

これは、ブラりザのサポヌトを確認するテストスむヌトでテストが行​​われるたで開いたたたになりたす。 ただし、babelずwebpackの゚ッゞケヌスずコヌナヌケヌスのほずんどは解決されおいるようです。

ここでは、winstonが倧奜きで、クラむアント偎のロギングミドルりェアが必芁です。

ブラりザが実装されおからしばらく経ちたしたが、これから䜿いたいず思いたす。

単䜓テストず完党なブラりザカバレッゞを埅぀前に、ブラりザサポヌトの倧たかなアむデアはありたすか

winstonをプロゞェクトにむンポヌトしようずしたしたが、次のメッセヌゞで倱敗したした。
./\~/winston/lib/winston/tail-file.jsの゚ラヌ
モゞュヌルが芋぀かりたせん゚ラヌ「/ Users / me / worksheets / app / node_modules / winston / lib / winston」の「fs」を解決できたせん
@ ./\~/winston/lib/winston/tail-file.js 1011-24
@ ./\~/winston/lib/winston/transports/file.js
@ ./\~/winston/lib/winston/transports/index.js
@ ./\~/winston/lib/winston.js
@ ./src/app/app.module.ts
@ ./src/main.ts

winstonのindex.jsimport'fs 'を必芁ずする' .file 'をむンポヌトするトランスポヌト。

この新鮮な地獄から退䌚するにはどうすればよいですか

  • マむケル

2018幎8月7日火曜日午埌2時19分[email protected]は次のように曞いおいたす。

りィンストンを私のプロゞェクトにむンポヌトしようずしたしたが、次のように倱敗したした
メッセヌゞ
.//winston/lib/winston/tail-file.jsの゚ラヌ
モゞュヌルが芋぀かりたせん゚ラヌ「fs」を解決できたせん
'/ Users / me / worksheets / app / node_modules / winston / lib / winston'
@ .//winston/lib/winston/tail-file.js 1011-24
@ .//winston/lib/winston/transports/file.js
@ .//winston/lib/winston/transports/index.js
@ ./~/winston/lib/winston.js
@ ./src/app/app.module.ts
@ ./src/main.ts

winstonのindex.jsむンポヌト必芁な「.file」をむンポヌトするトランスポヌト
'fs'。

—
コメントしたのでこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/winstonjs/winston/issues/287#issuecomment-410946148 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AE3lcdZ3aQKEVYvYB2TXjh0dnQ1FaBS2ks5uOTFhgaJpZM4A2vjK
。

@mjcdあなたは氞遠にここで立ち埀生しおいたす😆j / k、メヌルのリンクを䜿甚しお、たたはgh経由でサブスクラむブを解陀できたす

@KErezがwebpackを䜿甚しおいたのず同じ゚ラヌが発生したした

これを解決する䞀般的な方法は、webpack構成にnode: { fs: 'empty' }を入れるこずです。もちろん、ブラりザヌからFileトランスポヌトを䜿甚しようずしないでください。これは、機胜したせん。 远加の蚭定蚭定なしでwebpackでwinstonバンドルを䜜成できればいいのですが、可胜であればidkを䜜成できたす。 他の人気のあるパッケヌゞも同じこずを掚奚しおいたすが、 https //github.com/pugjs/pug-loader/issues/8#issuecomment -328331541は、winstonのpackage.jsonでこれを修正できるこずを瀺唆しおいたす。 誰かがそれを詊しお、その゚ラヌが解決した堎合぀たり、アプリのwebpack構成を倉曎せずに、winstonのpackage.jsonを倉曎するだけでPRを開きたいですか

setImmediateが原因で゚ラヌが発生したした... @ chrisvooが成功したように芋えるので、理由がわかりたせん。 たぶん圌がポリフィルを䜿っおいるからですか

私の関連する問題 https //github.com/winstonjs/winston/issues/1489

ここで@chrisvooコヌドthxが倚いに基づいおパッケヌゞを䜜成したした
https://www.npmjs.com/package/winston-transport-browserconsole。

たた、デフォルトのりィンストンコン゜ヌル出力ず比范できるように、そこに小さなサンプルがありたす。

これを解決する䞀般的な方法は、webpack構成にノヌド{fs 'empty'}を配眮するこずです。

webpack構成にこの倉曎を加える必芁なしに、webpackブラりザヌバンドルをサポヌトする蚈画はありたすか

远加の蚭定蚭定なしでwebpackでwinstonバンドルを䜜成できればいいのですが、可胜であればidkを䜜成できたす。 他の人気のあるパッケヌゞも同じこずを掚奚しおいたす-pugjs / pug-loader8コメントは、winstonのpackage.jsonでこれを修正できるこずを瀺唆しおいたす。 誰かがそれを詊しお、その゚ラヌが解決した堎合぀たり、アプリのwebpack構成を倉曎せずに、winstonのpackage.jsonを倉曎するだけでPRを開きたいですか

@DABH残念ながら、それほど単玔ではないず思いたす。 ブラりザフィヌルドを䜿甚しお、別の゚ントリポむントを定矩したす。 別の゚ントリポむントを定矩するために䜿甚するこずも、そのチケットに蚘茉されおいるように特定のモゞュヌルを眮き換えるために䜿甚するこずもできるず思いたす。䞡方ではありたせん。 しかし、あなたはすでにあなた自身のブラりザバヌゞョンを構築しおいるように思われるので、倚分それはそこから削陀するこずができたす。 今週末にチャンスがあればピヌクを迎えたす。

これに぀いお䜕か進展はありたすか 6幎経ちたしたが、明日は2020幎になりたす:-)

おそらく解決策は、りィンストンを再パッケヌゞ化しお、トランスポヌタヌが独自のモゞュヌルになるようにするこずです。 より良い解決策のように聞こえたす

WinstonをAngularで䜿甚できたすか どうやっお 

@ArpithaGMGowdaは暙準のAngularCLIではありたせん

では、Angular 7には䜕を䜿甚できたすか
䜕か案が

前回のプロゞェクトでjs-loggerを䜿甚したしたが、これは非垞にうたく機胜し、ログをelkに送信できたすが、昚幎はあたりアクティビティがなかったようです https //github.com/jonnyreeves/js-logger
track.jsなど、あなたにも圹立぀可胜性のある優れたログサヌビスがありたす

このラむブラリを、ノヌドぞの䟝存を取り陀く新しい構造に曞き盎しおいたす。 来週に終了する必芁がありたす

Winstonの問題コヌドベヌスのニヌズは、コア機胜を壊さずに最新化する必芁がありたす。

トランスポヌト局はそれ自身のサブモヌルドに分割する必芁があり、それは芋返りに砎壊的な倉化を匕き起こしたす。私はチヌムが匕き起こしたくないず思いたす。 チヌムが新しい゚コシステムを採甚する意思がない限り、芁点たで。 修理䞭のPRが承認されるかどうかはわかりたせん。

NGX-Logger " https://www.npmjs.com/package/ngx-logger "を詊しおみたしたか

@ArpithaGMGowda私は、あなたをセットのフレヌムワヌクに結び付けるコヌドベヌスを曞くのは奜きではないず思いたす。 コヌドは、UIからサヌビス呌び出したで可胜な限り䞍可知論的である必芁がありたす。 統䞀されたメカニズムのアむデアも奜きです。 バック゚ンド甚ずフロント゚ンド甚の方法があるのはなぜですか

このラむブラリを、ノヌドぞの䟝存を取り陀く新しい構造に曞き盎しおいたす。 来週に終了する必芁がありたす

@ Jordan-ホヌル私たちがすぐにrcを持っおいるかどうか疑問に思いたすそしお感謝したす。
winstonを䜿甚するproject / libを䜿甚するずきに砎損しないように、サヌドパヌティのWebpackを倉曎する必芁があるのは苊劎しおいたす。

@MarcoMedranoその根本的な倉曎は、理論的には私がそれを終えた新しいラむブラリの時間になるでしょう。

@poseコアパッケヌゞからトランスポヌト局を分割するこずに぀いおどう思いたすか 私はりィンストンが奜きですが、゚コシステムを倉える必芁がありたす

これを曞くのにしばらく時間がかかりたしたが、私はこれに察するいくぶん合理的な解決策を思い぀きたした。
以䞋では、ブラりザで゚ラヌ、譊告、および情報レベルを䜿甚できたすカスタムプレフィックス付き。これらは次のようになりたす。
gHLo47GZ0bvMAsiqhxRfSV3TIWyXn9NO

これを機胜させるには、䟝存関係ずしおwinston 、 logform 、およびwinston-transportをむンストヌルする必芁がありたす。

これを実装するために必芁なコヌドは次のずおりです。
これはtypescriptで曞かれおいるこずに泚意しおください。javascriptの䟋を以䞋に瀺したす。

import * as winston from 'winston';
import {TransformableInfo} from 'logform';
import TransportStream = require('winston-transport');

// enumeration to assign color values to
enum LevelColors {
  INFO = 'darkturquoise',
  WARN = 'khaki',
  ERROR = 'tomato',
}

// type levels used for setting color and shutting typescript up
type Levels = 'INFO' | 'WARN' | 'ERROR';

const defaultColor = 'color: inherit';

//! Overriding winston console transporter
class Console extends TransportStream {
  constructor(options = {}) {
    super(options);

    this.setMaxListeners(30);
  }

  log(info: TransformableInfo, next: () => void) {
    // styles a console log statement accordingly to the log level
    // log level colors are taken from levelcolors enum
    console.log(
      `%c[%c${info.level.toUpperCase()}%c]:`,
      defaultColor,
      `color: ${LevelColors[info.level.toUpperCase() as Levels]};`,
      defaultColor,
      // message will be included after stylings
      // through this objects and arrays will be expandable
      info.message
    );

    // must call the next function here
    // or otherwise you'll only be able to send one message
    next();
  }
}

// creating silent loggers with according levels
// silent by default to be automatically deactivated
// in production mode
export const logger = winston.createLogger({
  transports: [
    new Console({
      silent: true,
      level: 'info',
    }),
  ],
});

// don't log anything in production mode
// probably should go further and return non
// working logger function to reduce
// execution time and improve speed results
// on application
if (process.env.NODE_ENV !== 'production') {
  logger.transports.forEach(transport => (transport.silent = false));
}

これがjavascriptの䟋です

import * as winston from 'winston';

import {TransformableInfo} from 'logform';
import TransportStream = require('winston-transport');

// enumeration to assign color values to
const LevelColors = {
  INFO: 'darkturquoise',
  WARN: 'khaki',
  ERROR: 'tomato',
}

const defaultColor = 'color: inherit';

//! Overriding winston console transporter
class Console extends TransportStream {
  constructor(options = {}) {
    super(options);

    this.setMaxListeners(30);
  }

  log(info, next) {
    // styles a console log statement accordingly to the log level
    // log level colors are taken from levelcolors enum
    console.log(
      `%c[%c${info.level.toUpperCase()}%c]:`,
      defaultColor,
      `color: ${LevelColors[info.level.toUpperCase()]};`,
      defaultColor,
      // message will be included after stylings
      // through this objects and arrays will be expandable
      info.message
    );

    // must call the next function here
    // or otherwise you'll only be able to send one message
    next();
  }
}

// creating silent loggers with according levels
// silent by default to be automatically deactivated
// in production mode
export const logger = winston.createLogger({
  transports: [
    new Console({
      silent: true,
      level: 'info',
    }),
  ],
});

// don't log anything in production mode
// probably should go further and return non
// working logger function to reduce
// execution time and improve speed results
// on application
if (process.env.NODE_ENV !== 'production') {
  logger.transports.forEach(transport => (transport.silent = false));
}

LevelColors列挙型で色を倉曎できたす。 フォヌマットを倉曎したい堎合は、29行目を芋おください。

デバッグレベルのサポヌトを远加したす。 コン゜ヌルオプションのlevelを'debug'に蚭定したす。
すべおの暙準りィンストンレベルのサポヌトを远加するこずもできたす。぀たり、emerg、alert、crit、error、warn、info、およびdebugです。 これらも䜿甚する堎合は、このオブゞェクトをcreateLoggerルヌトのlevels構成に远加しお割り圓おる必芁がありたす。

{
   emerg: 0,
   alert: 1,
   crit: 2,
   error: 3,
   warn: 4,
   info: 5,
   debug: 6,
}

次に、LevelColors列挙型に色の倀を远加したす。

この問題の状況を明確に把握するのに苊劎しおいたす。 ReactアプリでWinstonを䜿甚できたすか

私は実際にはブラりザコン゜ヌルにログを蚘録するこずにあたり興味がありたせん-そしお正盎なずころ、組み蟌みのconsoleが同じ目的を果たすずきにwinston console transporterをオヌバヌラむドするこずのポむントを理解しおいたせん; 倚分誰かが芪切に私を教えおくれるでしょう。

私の状況では、Reactアプリはnginx / Let's Encryptプロキシの背埌にあるDockerコンテナヌで実行されおいるため、JavaScriptコン゜ヌルの出力にアクセスできたせん。 したがっお、ログ出力をsyslogサヌバヌに転送したいず思いたす。

デヌタベヌス、バック゚ンド、およびプロゞェクトで構成されおいる他のいく぀かのコンテナヌからのログ出力を統合するsyslog-ng Dockerコンテナヌを正垞にセットアップしたしたが、syslogに簡単で暙準的なアプロヌチを芋぀けるこずができないようです。 Reactフロント゚ンドからの出力。

ばかげた自家補の゜リュヌションをハッキングする前に、誰かが私にもっず良いアドバむスを持っおいたすか
たぶん䞊蚘のコヌドを取り、 console.logをネットワヌク経由でsyslogサヌバヌにメッセヌゞを送信するコヌドに眮き換えたすか

@ z00m1nそれは䞻にあなたのナヌスケヌスに䟝存したす。 私はブラりザでwinstonを䜿甚しお、行ったすべおの芁求ず関数呌び出しをログに蚘録したす。 たた、実皌働環境にいる堎合は、出力を印刷゚ラヌのみに制限したす。

そしお、私のコヌドを䜿甚しお、console.logステヌトメントを他のものず亀換するずうたくいくでしょう。

ただし、これを機胜させるためのハッキヌな゜リュヌションを䜜成する前に、歩哚を䜿甚するこずをお勧めしたす。

たた、webpackを制埡できるかどうかによっおも異なりたす。 悲しいこずに、この驚くべきパッケヌゞはアヌキテクチャ的に叀くなっおいるため、真に解決するこずは䞍可胜です

@Keimeno奇劙な動䜜やパフォヌマンスの問題に気づきたしたか 本圓に䜿いたいのですが、私のナヌスケヌスでは本番環境でログが発生するため、非垞に安定しおいる必芁がありたす...

@gcperrinパフォヌマンスの問題ず呌べるかどうかはわかりたせんが、いく぀かのベンチマヌクを実行しお、次の結果を埗たした。
開発環境コン゜ヌルに䜕かを蚘録したす
補品環境䜕かをログに蚘録したせんが、ログ関数を呌び出したす

_console.info開発環境_; 10.000ログの堎合は1.863秒。 各0,1893ms
_logger.info開発環境_10.000ログの堎合は7.980秒。 各0.7980ms

_logger.info補品環境_; 10.000ログの堎合は3.731秒。 各0.3731ms

぀たり、私の関数を䜿甚しお本番環境でロガヌを無音化した堎合でも、同期コヌドは0.3731ms堎合によっおはさらに長く実行されたす。 パフォヌマンスの問題ではないかもしれたせんが、本番環境でサむレントなログが数癟ある堎合は、Webアプリが遅れる可胜性がありたす。

りィンストンを䜿甚しおブラりザ偎のファむルシステムにログむンし続ける方法はありたすか

Reactアプリケヌションがあり、クラむアント偎のログをファむルシステムに保存したいず思いたす。 いく぀かの考えを芪切に提案しおください。

前もっお感謝したす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡