2014-12-09 4 views
0

Я написал API, используя node.js, в том, что используется «Winston logger». В том, что файл, о котором я упомянул, чтобы написать все мои журналы, имеет владельца как «ROOT», поэтому мое приложение вышло. Когда я меняю владельца файла на «my user», мое приложение работает. Поэтому я пришел к выводу, что проблема с файлом является проблемой.winston logger исключение разрешения файла

Мой Winston Код:

new(winston.transports.File)({ 
     filename: config.path,-------------------->/home/username/logsdir/logfile 
     //maxsize: 1024 * 1024 * 10, // 10MB 
     exitOnError: false, 
     maxsize: 1024 * 1024, 
     level: 'info', 
     handleExceptions: true, 
     levels: customLevels.levels, 
     rotationFormat: function() { 
      return getFormattedDate(); 
      function getFormattedDate() { 
       var temp = new Date(); 
       return dateStr = padStr(temp.getFullYear()) + padStr(1 + temp.getMonth()) + padStr(temp.getDate()) + padStr(temp.getHours()) + padStr(temp.getMinutes()) + padStr(temp.getSeconds()); 
      } 
      function padStr(i) { 
       return (i < 10) ? "0" + i : "" + i; 
      } 
     } 
    })] 

Уинстон не кидает каких-либо исключений, просто мое приложение закрывается. Возможно ли проверить владельца файла, или у winston есть какой-либо вариант для решения этой проблемы. Я много гугл, но я не могу найти решение. Помогите мне решить эту проблему. Заранее спасибо.

ответ

0

Уинстон, похоже, не оказывает никакой помощи в таких случаях. Решение состоит в том, чтобы проверить, доступен ли файл для записи. Вот один из способов сделать это:

var logFile; 
[ 
    '/var/log/my-app.log', 
    path.join(process.cwd(), 'my-app.log'), 
    path.join('/tmp', 'my-app.log'), 
] 
.forEach(function (path) { 
    if (logFile) { return; } 
    if (fs.accessSync && fs.accessSync(path, fs.W_OK)) { 
     console.log('logging to ' + path); 
     logFile = path; 
     return; 
    } 

    var fh; 
    try { fh = fs.openSync(path, 'a'); } 
    catch (e) { 
     console.error(e.message); 
     return; 
    } 
    console.log('logging to ' + path); 
    logFile = path; 
    fs.closeSync(fh); 
}); 

Теперь переменная LOGFILE будет иметь имя записываемого файла, если он доступен для записи.

 Смежные вопросы

  • Нет связанных вопросов^_^