使用Bunyan和Logentrieslogin打字稿

我想在我的离子应用程序中使用logentries.com设置远程日志logging。

这是从我的package.json摘录:

  "dependencies": { "bunyan": "^1.8.5", "bunyan-logentries": "^1.2.0", }, "devDependencies": { "@types/bunyan": "0.0.35", "@types/bunyan-logentries": "0.1.30", "typescript": "2.0.9" }, 

 import {createStream} from "bunyan-logentries"; import * as Logger from "bunyan"; // ... constructor() { let token = 'xxxxxxxxxxxxxxxxx'; let log = Logger.createLogger({ name: '', streams: [{ level: 'info', stream: createStream({token: token}), type: 'raw' }] }); log.info("Created log"); } 

问题

我的IDE并没有警告我有关任何错误。 但只要我运行的应用程序,我得到以下错误:

存在不是一个function。 (在'exists(pkgPath)'中,'exists'是未定义的)

 findPackage@http://localhost:8101/build/main.js:131257:18 register@http://localhost:8101/build/main.js:131332:31 http://localhost:8101/build/main.js:112585:50 http://localhost:8101/build/main.js:113391:34 __webpack_require__@http://localhost:8101/build/main.js:20:34 http://localhost:8101/build/main.js:129423:37 __webpack_require__@http://localhost:8101/build/main.js:20:34 http://localhost:8101/build/main.js:29972:95 __webpack_require__@http://localhost:8101/build/main.js:20:34 http://localhost:8101/build/main.js:80592:90 __webpack_require__@http://localhost:8101/build/main.js:20:34 http://localhost:8101/build/main.js:59390:96 __webpack_require__@http://localhost:8101/build/main.js:20:34 http://localhost:8101/build/main.js:59495:94 __webpack_require__@http://localhost:8101/build/main.js:20:34 http://localhost:8101/build/main.js:128048:94 __webpack_require__@http://localhost:8101/build/main.js:20:34 http://localhost:8101/build/main.js:116775:92 __webpack_require__@http://localhost:8101/build/main.js:20:34 http://localhost:8101/build/main.js:149625:89 __webpack_require__@http://localhost:8101/build/main.js:20:34 http://localhost:8101/build/main.js:66:37 global code@http://localhost:8101/build/main.js:67:12 

我认为问题的核心在于@types与实际的节点模块不匹配,但不清楚这是如何解决的。

我面临同样的问题。 bunyan-logentries模块依赖于le_node :节点的logentries模块。

le_node使用浏览器le_node用的nettls模块。 继续,我已经实现了一个自定义的bunayanstream,通过REST API将日志发送给logentry。 它是直接的代码和它的作品。

这里是一个示例代码来说明这个解决scheme。

创buildBunyan实例的LoggerService:

 @Injectable() export class LoggerService { constructor(private http: Http) { } public create(name: string): Logger{ return Bunyan.createLogger({ name: name, streams: [{ stream: new LogentriesBunyanStream(AppConfig.LogEntries.token, this.http), type: 'raw' }] }); } } 

将日志发送给logentry的bunyan自定义stream:

 export class LogentriesBunyanStream extends Writable { private token: string; private http: Http; constructor(token: string, http: Http) { super({objectMode: true}); this.http = http; this.token = token; } public _write(rec: any, encoding?: string, cb?: Function) { // Replace the level code with a friendly string rec.level = LogentriesBunyanStream.resolveLevel(rec.level); // Send the post request to logentries // https://docs.logentries.com/docs/http-post const LOGENTRIES_URL = "https://webhook.logentries.com/noformat/logs/"; let headers = new Headers(); headers.append("Content-Type", 'application/json'); let requestoptions = new RequestOptions({ method: RequestMethod.Post, headers: headers, body: JSON.stringify(rec) }); this.http.request(LOGENTRIES_URL + this.token, requestoptions).toPromise().then((response) => { cb(); }).catch((error) =>{ console.log("faield to send log to the logentries server"); }); }; private static resolveLevel(bunyanLevel) { let levelToName = { 10: 'DEBUG', 20: 'DEBUG', 30: 'INFO', 40: 'WARN', 50: 'ERROR', 60: 'CRIT' }; return levelToName[bunyanLevel] || 'INFO'; } }; 

也许它有帮助,

问候。