ãŠã£ã³ã¹ãã³ãããã³ããšã³ãã§ãã®ã³ã°ã«äœ¿çšã§ããŸããïŒ ããã³ããšã³ãã®ãã°æ©èœãåäžãããããã«Winstonã䜿çšããããšæããŸãã ããã¯ã§ããŸããïŒ
ç§ã¯ãããè©ŠããŠããŸããããããã¯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èŠãŠãã ããïŒ
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'
ã¹ã¿ãã¯ãã¬ãŒã¹ãšé¢é£ã³ãŒãïŒãã©ãŠã¶ã®ã¹ã¯ãªãŒã³ã·ã§ããïŒã¯æ¬¡ã®ãšããã§ãã
äœããæ¬åœã«ã²ã©ãã€ã³ããŒããããŠããããã§ãã @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.tswinstonã®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ã³ã¢ããã±ãŒãžãããã©ã³ã¹ããŒãå±€ãåå²ããããšã«ã€ããŠã©ãæããŸããïŒ ç§ã¯ãŠã£ã³ã¹ãã³ã奜ãã§ããããšã³ã·ã¹ãã ãå€ããå¿ èŠããããŸã
ãããæžãã®ã«ãã°ããæéãããããŸããããç§ã¯ããã«å¯Ÿããããã¶ãåççãªè§£æ±ºçãæãã€ããŸããã
以äžã§ã¯ããã©ãŠã¶ã§ãšã©ãŒãèŠåãããã³æ
å ±ã¬ãã«ã䜿çšã§ããŸãïŒã«ã¹ã¿ã ãã¬ãã£ãã¯ã¹ä»ãïŒïŒããããã¯æ¬¡ã®ããã«ãªããŸãã
ãããæ©èœãããã«ã¯ãäŸåé¢ä¿ãšããŠ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ã¢ããªã±ãŒã·ã§ã³ããããã¯ã©ã€ã¢ã³ãåŽã®ãã°ããã¡ã€ã«ã·ã¹ãã ã«ä¿åããããšæããŸãã ããã€ãã®èãã芪åã«ææ¡ããŠãã ããã
åãã£ãŠæè¬ããŸãã
æãåèã«ãªãã³ã¡ã³ã
ç§ãããã±ãŒãžãèŠãŠããã©ãŠã¶ã®ãµããŒãããªãããšã«æ°ä»ãããšããç§ã®åžæã¯æ¬åœã«é«ããªããŸããã
ããã¯ããã©ãŠã¶ã§ç§ãèªå®¶è£œã®ãã®ã眮ãæããã®ã«æ¬åœã«çŽ æŽãããã§ãããã