Logger.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. 'use strict';
  2. /**
  3. * 日志级别
  4. * @type {{TRACE: number, DEBUG: number, INFO: number, WARN: number, ERROR: number}}
  5. */
  6. const logLevel = {
  7. TRACE: 0,
  8. DEBUG: 1,
  9. INFO: 2,
  10. WARN: 3,
  11. ERROR: 4
  12. };
  13. /**
  14. * logLevelDesc
  15. * @type {{}}
  16. */
  17. const logLevelDesc = {
  18. [logLevel.TRACE]: 'TRACE',
  19. [logLevel.DEBUG]: 'DEBUG',
  20. [logLevel.INFO]: 'INFO',
  21. [logLevel.WARN]: 'WARN',
  22. [logLevel.ERROR]: 'ERROR'
  23. };
  24. /**
  25. * logLevelMethod
  26. * @type {{}}
  27. */
  28. const logLevelMethod = {
  29. [logLevel.TRACE]: 'logTrace',
  30. [logLevel.DEBUG]: 'logDebug',
  31. [logLevel.INFO]: 'logInfo',
  32. [logLevel.WARN]: 'LogWarn',
  33. [logLevel.ERROR]: 'logError'
  34. };
  35. /**
  36. * _logLevel
  37. * @type {number}
  38. * @private
  39. */
  40. let _logLevel = logLevel.INFO;
  41. /**
  42. * GameLog 应用日志
  43. *
  44. * @example
  45. * const logger = require('logger').getLogger('Logger.js');
  46. * logger.info('test1');
  47. * logger.info('test2,{1},{0}',123,456);
  48. * logger.info('test3,{0}','abc');
  49. * logger.info('test4,{0},{1}','abc',123);
  50. * logger.info('test5,{name},{age}',{'name':'abc','age':23});
  51. */
  52. class GameLog
  53. {
  54. /**
  55. * logLevel 默认情况,debug下打印debug及以上级别日志,release下打印info及以上级别日志
  56. * @param {number} level
  57. */
  58. static logLevel(level){
  59. cc.log(`Logger.js - log level: ${logLevelDesc[level]}`);
  60. _logLevel = level;
  61. }
  62. set logLevel(level){
  63. this._logLevel = level;
  64. }
  65. get logLevel(){
  66. return this._logLevel;
  67. }
  68. /**
  69. * constructor
  70. * @param {string} name
  71. */
  72. constructor(name,level){
  73. this._logLevel = level || _logLevel;
  74. this._tag = name || '';
  75. }
  76. /**
  77. * 获取日志文件名
  78. * @returns {string}
  79. */
  80. getLogName(){
  81. // TODO:
  82. return 'log_name';
  83. }
  84. /**
  85. * 读取所有日志内容
  86. * @returns {string}
  87. */
  88. readLog(){
  89. // TODO:
  90. return 'log content';
  91. }
  92. /**
  93. * log 只会写到控制台不会写到日志文件
  94. * @param msg
  95. * @param args
  96. */
  97. log(msg,...args){
  98. const content = this._format(msg,...args);
  99. cc.log(`${this._tag} - ${content}`);
  100. }
  101. /**
  102. * trace级别日志,会根据logLevel是否写到日志文件
  103. * @param msg
  104. * @param args
  105. */
  106. trace(msg,...args){
  107. const content = this._format(msg,...args);
  108. cc.log(`${this._tag} - ${content}`);
  109. this._log(logLevel.TRACE,content);
  110. }
  111. /**
  112. * debug级别日志,会根据logLevel是否写到日志文件
  113. * @param msg
  114. * @param args
  115. */
  116. debug(msg,...args){
  117. const content = this._format(msg,...args);
  118. cc.log(`${this._tag} - ${content}`);
  119. this._log(logLevel.DEBUG,content);
  120. }
  121. /**
  122. * info级别日志,会根据logLevel是否写到日志文件
  123. * @param msg
  124. * @param args
  125. */
  126. info(msg,...args){
  127. const content = this._format(msg,...args);
  128. cc.info(`${this._tag} - ${content}`);
  129. this._log(logLevel.INFO,content);
  130. }
  131. /**
  132. * warn级别日志,会根据logLevel是否写到日志文件
  133. * @param msg
  134. * @param args
  135. */
  136. warn(msg,...args){
  137. const content = this._format(msg,...args);
  138. cc.warn(`${this._tag} - ${content}`);
  139. this._log(logLevel.WARN,content);
  140. }
  141. /**
  142. * error级别日志,会根据logLevel是否写到日志文件
  143. * @param msg
  144. * @param args
  145. */
  146. error(msg,...args){
  147. const content = this._format(msg,...args);
  148. cc.error(`${this._tag} - ${content}`);
  149. this._log(logLevel.ERROR,content);
  150. }
  151. /**
  152. * _log
  153. * @param {number} level
  154. * @param {string} info
  155. * @private
  156. */
  157. _log(level,info){
  158. if(level >= this._logLevel){
  159. /// 转入Native处理
  160. let method = logLevelMethod[level];
  161. const ccNativeBridge = require('CCNativeBridge');
  162. // ccNativeBridge.invokeNativeMethod('LogHandler', method, `${this._tag} - ${info}`);
  163. }
  164. }
  165. /**
  166. * _format
  167. * @param {string} msg
  168. * @param {...} args
  169. * @returns {string}
  170. * @private
  171. */
  172. _format (msg,...args) {
  173. let result = msg + '';
  174. if (args.length > 0) {
  175. if (args.length === 1 && typeof (args[0]) === 'object') {
  176. const obj = args[0];
  177. for (let key in obj) {
  178. const reg = new RegExp('({' + key + '})','g');
  179. if(obj.hasOwnProperty(key)) {
  180. result = result.replace(reg, obj[key]);
  181. }
  182. }
  183. } else {
  184. for (let i = 0; i < args.length; i++) {
  185. if (args[i] !== undefined) {
  186. const reg = new RegExp('({)' + i + '(})', 'g');
  187. result = result.replace(reg, args[i]);
  188. }
  189. }
  190. }
  191. }
  192. return result;
  193. }
  194. }
  195. module.exports = {
  196. /**
  197. * 日志级别
  198. */
  199. LEVEL: logLevel,
  200. /**
  201. * get logger
  202. * @param {*} name
  203. * @returns {GameLog}
  204. */
  205. getLogger: function(name, level){
  206. return new GameLog(name,level);
  207. },
  208. /**
  209. * set log level
  210. * @param {number} level
  211. */
  212. logLevel: function(level){
  213. GameLog.logLevel(level);
  214. }
  215. };