1 | (function() {
|
2 | var SEVERE, _, create, logger, mkdirp, path, pickLog, winston,
|
3 | slice = [].slice;
|
4 |
|
5 | _ = require('lodash');
|
6 |
|
7 | path = require('path');
|
8 |
|
9 | winston = require('winston');
|
10 |
|
11 | mkdirp = require('mkdirp');
|
12 |
|
13 | logger = new winston.Logger({
|
14 | transports: [new winston.transports.Console()]
|
15 | });
|
16 |
|
17 | exports.SEVERE = SEVERE = 10;
|
18 |
|
19 | exports.pickLog = pickLog = function(cfgpath, name, cb) {
|
20 | var logDirPath, logPath;
|
21 | logDirPath = path.join(path.dirname(cfgpath), 'logs');
|
22 | logPath = path.join(logDirPath, name + ".log");
|
23 | return mkdirp(logDirPath, function(err) {
|
24 | return cb(err, logPath);
|
25 | });
|
26 | };
|
27 |
|
28 | exports.init = function(cfgpath, name, level, cb) {
|
29 | return pickLog(cfgpath, name, function(err, logPath) {
|
30 | var returnLevel;
|
31 | if (err != null) {
|
32 | return cb(err);
|
33 | }
|
34 | logger.add(winston.transports.File, {
|
35 | filename: logPath,
|
36 | maxsize: 50000,
|
37 | maxFiles: 3,
|
38 | tailable: true
|
39 | });
|
40 | returnLevel = 0;
|
41 | logger.level = (level = 'verbose') ? 'debug' : 'info';
|
42 | return cb(null, create(level));
|
43 | });
|
44 | };
|
45 |
|
46 | exports.create = create = function(level) {
|
47 | var debug, error, log, panic, warn;
|
48 | return {
|
49 | exit: function() {
|
50 | return process.exit(Math.max(0, returnLevel - SEVERE + 1));
|
51 | },
|
52 | level: level,
|
53 | debug: debug = logger.debug,
|
54 | log: log = logger.info,
|
55 | warn: warn = logger.warn,
|
56 | error: error = logger.error,
|
57 | panic: panic = function() {
|
58 | var args;
|
59 | args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
|
60 | error.apply(null, args);
|
61 | return process.exit(1);
|
62 | },
|
63 | setLevel: function(level) {
|
64 | return logger.level = level;
|
65 | },
|
66 | prettyConfig: function(level, err) {
|
67 | var returnLevel;
|
68 | returnLevel = Math.max(returnLevel, level);
|
69 | switch (err != null ? err.code : void 0) {
|
70 | case 'ENOENT':
|
71 | return warn("Couldn't access file \"" + err.path + "\".");
|
72 | default:
|
73 | return warn('Unexpected configuration error:', err);
|
74 | }
|
75 | },
|
76 | prettyListen: function(level, err, config) {
|
77 | var returnLevel;
|
78 | returnLevel = Math.max(returnLevel, level);
|
79 | switch (err != null ? err.code : void 0) {
|
80 | case 'EADDRINUSE':
|
81 | return warn("Something already listening on port " + config.listenPort + ".");
|
82 | default:
|
83 | return warn('Unexpected command error', err);
|
84 | }
|
85 | },
|
86 | prettyBacktalk: function(level, err, config) {
|
87 | var ref, returnLevel;
|
88 | returnLevel = Math.max(returnLevel, level);
|
89 | switch (false) {
|
90 | case !_.isString(err):
|
91 | return warn(err);
|
92 | case (err != null ? err.code : void 0) !== 'ECONNREFUSED':
|
93 | return warn("Unable to connect to server at \"" + config.host + ":" + config.backPort + "\".");
|
94 | case (err != null ? (ref = err.message) != null ? ref.indexOf('CRYPT') : void 0 : void 0) === -1:
|
95 | return warn('Unexpected backchannel encryption error:', err);
|
96 | default:
|
97 | return warn('Unexpected backchannel error:', err);
|
98 | }
|
99 | },
|
100 | prettyTunnel: function(level, err, config) {
|
101 | var ref, returnLevel;
|
102 | returnLevel = Math.max(returnLevel, level);
|
103 | switch ((ref = err.error) != null ? ref.code : void 0) {
|
104 | case 'ECONNREFUSED':
|
105 | return warn("Unable to connect to local \"" + config.local.host + ":" + config.local.port + "\".");
|
106 | default:
|
107 | return warn("Unexpected tunnel error", err);
|
108 | }
|
109 | },
|
110 | prettyProxy: function(level, regId, err, config) {
|
111 | var returnLevel;
|
112 | returnLevel = Math.max(returnLevel, level);
|
113 | switch (err != null ? err.code : void 0) {
|
114 | case 'EADDRINUSE':
|
115 | return warn("Unable to start: address " + config.proxyPort + " already in use.");
|
116 | default:
|
117 | if (regId != null) {
|
118 | return warn("Unexpected proxy error for " + regId, err);
|
119 | } else {
|
120 | return warn("Unexpected proxy error", err);
|
121 | }
|
122 | }
|
123 | }
|
124 | };
|
125 | };
|
126 |
|
127 | }).call(this);
|