Как сделать время в логах в миллисекундах?

Поддержка
  • Всем привет!

    Стандартный лог BAS выглядит так, пример:

    [115055559] [07:56:21] Поток №71 : Лог 1
    [702399357] [07:56:21] Поток №71 : Лог 2
    [186585698] [07:56:21] Поток №71 : Лог 3
    

    В некоторых местах скрипта для оценки быстродействия счет идет уже не на секунды, а на миллисекунды. Есть ли способ выводить время в стандартном логе с миллисекундами? Т.е. так:

    [115055559] [07:56:21:123] Поток №71 : Лог 1
    [702399357] [07:56:21:256] Поток №71 : Лог 2
    [186585698] [07:56:21:777] Поток №71 : Лог 3
    

    P.S. Я понимаю, что могу перед самим логом вычислять кубики "Дата сейчас" и "Дата в миллисекунды", и добавлять их в текст лога, но на это тоже тратится немного времени + придется во все логи скрипта расставлять + не так компактно получится.

  • @doupiu интересно, для какой цели? Многие наоборот просят убрать эти записи.

  • @gurkin4 Скрипт-парсер, который должен ОЧЕНЬ быстро реагировать на изменения. Соответственно, для отладки и оценки быстродействия секунд уже не хватает, нужны миллисекунды..

  • @doupiu said in Как сделать время в логах в миллисекундах?:

    @gurkin4 Скрипт-парсер, который должен ОЧЕНЬ быстро реагировать на изменения. Соответственно, для отладки и оценки быстродействия секунд уже не хватает, нужны миллисекунды..

    Посмотрите в теме лайфхаков примеры использования log_html()

  • @Fox спасибо, я нашел там ваше сообщение (http://community.bablosoft.com/post/41093). Проблема в том, что там в примерах нет исходного вида функции log(text), только ее урезанные версии :D Не могли бы вы подсказать полное исходное содержимое этой функции? А я уже туда добавлю миллисекунды и переопределю ее.

  • @doupiu said in Как сделать время в логах в миллисекундах?:

    @Fox спасибо, я нашел там ваше сообщение (http://community.bablosoft.com/post/41093). Проблема в том, что там в примерах нет исходного вида функции log(text), только ее урезанные версии :D Не могли бы вы подсказать полное исходное содержимое этой функции? А я уже туда добавлю миллисекунды и переопределю ее.

    Что означает исходного вида функции? Если вы про код функции, то достаточно создать действие "Лог", с типом данных expression и вывести содержимое функции без вызова:

    eea526b0-2279-41c3-a1ec-df9bb78a9186-изображение.png

    В итоге в логе будет исходный код функции, но вам это не особо поможет изменить её:

    function log(text) {
        Logger.Write(ScriptWorker.PrepareMessage(text));
    }
    

    Дальше в теме я прикладывал полностью готовый код для точной копии внешнего вида стандартного лога с возможностью изменить что душе угодно:
    https://community.bablosoft.com/topic/3521/лайфхаки-bas/43

  • @Fox да, нашел и сделал, большое спасибо. В итоге чтобы добавить миллисекунды в лог, нужен такой код

    function log(text, color, define){
        var id, time, thread, logHtml, textLog;
    
        define = (typeof define == 'string') ? define.split(/[\s,.|:;]+/g) : define;
        if(typeof define === 'object' && define !== null){
            if(Array.isArray(define)){
                id = define.indexOf('id') > -1;
                time = define.indexOf('time') > -1;
                thread = define.indexOf('thread') > -1;
            }
            else{
                id = define.id == true;
                time = define.time == true;
                thread = define.thread == true;
            }
        }
        else id = time = thread = true;
        id = id ? '<a href="action://action' + ScriptWorker.GetCurrentAction() + '" style="color:gray;">[' + ScriptWorker.GetCurrentAction() + ']</a>' : '';
        time = time ? ' ' + getTime() : '';
        thread =  thread ? ' Поток №' + thread_number() : '';
    
        logHtml = (id || time || thread) ? id + '<span style="color: white">' + time + thread + ' : </span>' : '';
        logHtml += '<span style="color:' + (color ? color : 'white') + '">' + text + '</span>';
    
        textLog = '[' + ScriptWorker.GetCurrentAction() + ']' + time + thread + ' : ' + text
    
    	function getTime(){
    		var checkTime = function(i){ return (i < 10) ? "0" + i : i; };
    		var d = new Date();
    		var hh = checkTime(d.getHours());
    		var mm = checkTime(d.getMinutes());
    		var ss = checkTime(d.getSeconds());	
            	var ms = checkTime(d.getMilliseconds());
    		return '[' + hh + ':' + mm + ':' + ss + '.' + ms + ']';
    	};
    
    	Logger.WriteHtml(logHtml, textLog);
    }
    
  • @doupiu said in Как сделать время в логах в миллисекундах?:

    @Fox да, нашел и сделал, большое спасибо. В итоге чтобы добавить миллисекунды в лог, нужен такой код

    Что бы избежать проблем с областью видимости функции из разных функций BAS, измените первую строку вашего кода на :

    log = function (text, color, define){
    
  • Добавил еще ведущие нули к миллисекундам, если кому-то еще когда-то этот код понадобится

    log = function (text, color, define){
        var id, time, thread, logHtml, textLog;
    
        define = (typeof define == 'string') ? define.split(/[\s,.|:;]+/g) : define;
        if(typeof define === 'object' && define !== null){
            if(Array.isArray(define)){
                id = define.indexOf('id') > -1;
                time = define.indexOf('time') > -1;
                thread = define.indexOf('thread') > -1;
            }
            else{
                id = define.id == true;
                time = define.time == true;
                thread = define.thread == true;
            }
        }
        else id = time = thread = true;
        id = id ? '<a href="action://action' + ScriptWorker.GetCurrentAction() + '" style="color:gray;">[' + ScriptWorker.GetCurrentAction() + ']</a>' : '';
        time = time ? ' ' + getTime() : '';
        thread =  thread ? ' Поток №' + thread_number() : '';
    
        logHtml = (id || time || thread) ? id + '<span style="color: white">' + time + thread + ' : </span>' : '';
        logHtml += '<span style="color:' + (color ? color : 'white') + '">' + text + '</span>';
    
        textLog = '[' + ScriptWorker.GetCurrentAction() + ']' + time + thread + ' : ' + text
    
    function getTime(){
      var checkTime = function(i){ return (i < 10) ? "0" + i : i; };
      
      var checkMilliSeconds = function(ms){
        if (ms < 10) {
          return "00" + ms;
        } else if (ms < 100) {
          return "0" + ms;
        } else {
          return ms;
        }
      };
      
      var d = new Date();
      var hh = checkTime(d.getHours());
      var mm = checkTime(d.getMinutes());
      var ss = checkTime(d.getSeconds());  
      var ms = checkMilliSeconds(d.getMilliseconds());
      
      return '[' + hh + ':' + mm + ':' + ss + '.' + ms + ']';
    };
    
    	Logger.WriteHtml(logHtml, textLog);
    }
    

  • 0 Votes
    13 Posts
    977 Views
  • 0 Votes
    2 Posts
    636 Views
  • 0 Votes
    3 Posts
    570 Views
  • 0 Votes
    5 Posts
    1064 Views
  • 0 Votes
    7 Posts
    1874 Views