当前位置: 首页 > 面试题库 >

我想在日志语句中显示文件名

夏经武
2023-03-14
问题内容

对于任何级别的每个logger语句,我都需要显示执行log语句的文件名,以下是我给出的插图:

示例:下面是从 JobWork.js* 执行的行 *

logger.info("getInCompleteJobs in job works");

实际:

2012-11-05T06:07:19.158Z - info: getInCompleteJobs in job works

必填:

2012-11-05T06:07:19.158Z - info JobWork.js : getInCompleteJobs in job works

如果不通过log语句传递fileName作为参数,则应提供文件名。


问题答案:

您可以使用附加到v8
Error对象的堆栈跟踪信息来查找调用代码的文件/行。这种方法行之有效,但效果不佳。因此,如果在开发过程中使用它,则在生产时将要禁用它。

因此,您可以执行以下操作:

  var logger_info_old = logger.info;
  logger.info = function(msg) {
    var fileAndLine = traceCaller(1);
    return logger_info_old.call(this, fileAndLine + ":" + msg);
  }

  /**
  * examines the call stack and returns a string indicating 
  * the file and line number of the n'th previous ancestor call.
  * this works in chrome, and should work in nodejs as well.  
  *
  * @param n : int (default: n=1) - the number of calls to trace up the
  *   stack from the current call.  `n=0` gives you your current file/line.
  *  `n=1` gives the file/line that called you.
  */
  function traceCaller(n) {
    if( isNaN(n) || n<0) n=1;
    n+=1;
    var s = (new Error()).stack
      , a=s.indexOf('\n',5);
    while(n--) {
      a=s.indexOf('\n',a+1);
      if( a<0 ) { a=s.lastIndexOf('\n',s.length); break;}
    }
    b=s.indexOf('\n',a+1); if( b<0 ) b=s.length;
    a=Math.max(s.lastIndexOf(' ',b), s.lastIndexOf('/',b));
    b=s.lastIndexOf(':',b);
    s=s.substring(a+1,b);
    return s;
  }


 类似资料:
  • 问题内容: 我需要在运行的Jenkins作业的 控制台输出 中显示日志文件(测试计算机中存在)。 那可能吗?如果是,我该怎么做? 问题答案: 根据需要选择执行Windows批处理命令或执行Shell 然后使用“ cat log.file”(Linux)“ type log.file”(Windows)显示

  • 问题内容: 我有诸如ffmpeg和gstreamer之类的外部程序在后台运行并写入日志文件。我想用我的Flask应用程序显示此日志的内容,以便用户可以像在终端中那样观看日志更新。 我试图指向日志文件,但是无法显示数据,或者浏览器告诉我我需要一个插件。 如何在HTML页面中嵌入和更新日志文件? 问题答案: 使用Flask视图可以永久不断地从文件中读取数据并流式传输响应。使用JavaScript从流中

  • myisamlog处理MyISAM日志文件内容。 象这样调用myisamlog: shell> myisamlog [options] [logfile-name [tbl_name] ...] 常用操作是更新(-u)。如果恢复完成(-r),所有写和可能的更新以及删除操作完成并且只统计错误。如果没有给出日志文件名,使用myisam.log作为日志文件名。如果在命令行中指定了表名,只更新那些指定的表

  • 问题内容: 我为Spring配置了事务支持。有什么方法可以记录交易记录,只是为了确保我正确设置了所有内容?在日志中显示是查看正在发生的事情的好方法。 问题答案: 在您的文档中(对于其他记录器或log4j的xml格式,请检查文档) 根据您的事务管理器,您可以设置spring框架的日志记录级别,以便为您提供有关事务的更多信息。例如,如果使用,您可以设置 (这是您的交易经理的软件包),以及 如果还不够,

  • 问题内容: 我无法使LibGDX日志记录在Android Studio中工作。首先,我认为我的问题与之前的问题相同,但是请确保我的应用程序在调试时进行了更新。 选项按钮上的测试操作已执行,但我无法显示调试日志。 问题答案: 默认日志级别为。为了进行调用,您必须先调用一次(可能是Game构造函数的第一行,以便可以轻松更改它)。

  • 问题内容: 我在应用程序中使用JUL。通常,Netbeans打开一个输出选项卡,该选项卡显示“ Tomcat”并显示我生成的日志。运行正常。但是突然间,我意识到我的日志根本没有显示,只有打印出来。甚至都不是最热情的人。 我怀疑这可能是我包含的图书馆,这使我的日志混乱了。那有可能吗?图书馆可以改变我的日志显示方式吗?由于我有点迷路,我该如何调查? 问题答案: 我怀疑这可能是我包含的图书馆,这使我的日