使用capturestacktrace
方法加入自帶的錯誤資訊
// error物件自帶的屬性
error.capturestacktrace
// 如何使用capturestacktrace
var obj =
error.capturestacktrace(obj)
throw obj // 此時會丟擲obj物件的message內資訊
直接把**寫在try catch
中即可捕獲錯誤資訊
trycatch(e)
在非同步
**中,直接try catch是無法捕獲錯誤資訊的,可以使用如下方法
function foo(params, cb)
以上使用callback
方式來做錯誤處理比較容易麻煩,容易出錯,現在node已經支援async await
所以盡量使用它們準沒錯
async function foo()catch(e)
}async function bar()
foo()
在專案會有多個地方對錯誤資訊進行處理,所以先寫乙個基本錯誤
型別,方便使用
// 基本錯誤型別
}}try catch (e)
除了基本型別,不同情況下會有不同錯誤資訊,需要用乙個特定
的錯誤型別來處理特定的錯誤資訊
// 乙個引數錯誤型別
const error_code = 40000 // 錯誤碼
}}
這樣,在引數錯誤的地方就能非常方便的呼叫這個錯誤型別來返回錯誤
錯誤處理中,model,controller中的錯誤,有些是不能直接返回給使用者的,應該只返回給model或controller的呼叫者。
正常介面,controller,model的錯誤,使用設定好的錯誤型別進行處理,例如前面寫的httprequestparamerror
,在所有所有路由的最後,需要使用乙個error handler來對所有的錯誤進行集中處理
// error handler
function handler(options) )
} else
}}
除了可預知的錯誤,還有未知的型別的錯誤,此時需要乙個unknow error handler進行剩餘錯誤的處理
function unknowerrorhandler(options) )
}}
winston
是node中常用的日誌外掛程式
const winston = require('winston')
const logger = winston.createlogger(),
// 第二個logger,記錄error級別的log
new winston.transports.file()
]});// error級別比info要高,error.log檔案只會記錄error日誌
logger.error('first error log with winston')
// info檔案內會記錄info級別的log和比info級別高的log,比如error
logger.info('first info log with winston')
在產生大量資料的應用當中,日誌的輸出是大量的,這是就需要對日誌進行拆分
處理,例如按照每天的頻率來分別記錄日誌。
winston並不自帶log rotation,需要引入winston-daily-rotate-file
庫
const = require('winston');
const = format;
require('winston-daily-rotate-file')
var transport = new(transports.dailyrotatefile)(),
timestamp(),
prettyprint()
),});transport.on('rotate', function (oldfilename, newfilename) {});
var logger = createlogger();
logger.info('hello world!');
錯誤處理和日誌記錄
摘要 php提供了錯誤處理和日誌記錄的功能.這些函式允許你定義自己的錯誤處理規則,以及修改錯誤記錄的方式.這樣,你就可以根據自己的需要,來更改和加強錯誤輸出資訊以滿足實際需要.通過日誌記錄功能,你可以將資訊直接傳送到其他日誌伺服器,或者傳送到指定的電子郵箱 或者通過郵件閘道器傳送 或者傳送到作業系統...
1 7 錯誤處理和日誌記錄
在ssis中,程式包事件是在使用者介面中公開的,每個事件都可能具有各自的事件處理程式設計介面。這種設計介面 design su ce 在visual studio中為窗格,使用者可以指定當發生給定的事件時所要執行的一系列任務。有大量的事件處理程式可以幫助使用者開發那些可以自動修復問題的程式包。例如,...
MySql錯誤處理 錯誤處理的例子
有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not found 執行 rollback和產生一條錯誤...