fix(src/index): 共用 log 格式化流程
This commit is contained in:
+30
-12
@@ -17,6 +17,34 @@ function section(title) {
|
|||||||
currentStage = title;
|
currentStage = title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 產生統一格式的時間戳記字串。
|
||||||
|
*
|
||||||
|
* @returns {string} Asia/Taipei 時區格式化後的時間戳記。
|
||||||
|
* @remarks
|
||||||
|
* 由 `info()` 與錯誤輸出共用,避免不同輸出路徑各自拼出不同格式。
|
||||||
|
*/
|
||||||
|
function formatTimestamp() {
|
||||||
|
return new Date()
|
||||||
|
.toLocaleString('sv-SE', { timeZone: 'Asia/Taipei', hour12: false })
|
||||||
|
.replace(/-/g, '/');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 以統一格式組裝單行 log。
|
||||||
|
*
|
||||||
|
* @param {string} level 訊息等級。
|
||||||
|
* @param {string} message 要輸出的訊息內容。
|
||||||
|
* @returns {string} 已格式化完成且含換行的 log 字串。
|
||||||
|
* @remarks
|
||||||
|
* 讓一般資訊與錯誤訊息共用同一套前綴格式,降低未來調整格式時的維護成本。
|
||||||
|
*/
|
||||||
|
function formatLogLine(level, message) {
|
||||||
|
const stagePrefix = currentStage ? `[${currentStage}]` : '';
|
||||||
|
|
||||||
|
return `${stagePrefix}[${level}][${formatTimestamp()}]: ${message}\n`;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 以統一格式輸出資訊訊息。
|
* 以統一格式輸出資訊訊息。
|
||||||
*
|
*
|
||||||
@@ -25,12 +53,7 @@ function section(title) {
|
|||||||
* 會附加目前階段與 Asia/Taipei 時區時間戳記,適合用於流程進度與狀態輸出。
|
* 會附加目前階段與 Asia/Taipei 時區時間戳記,適合用於流程進度與狀態輸出。
|
||||||
*/
|
*/
|
||||||
function info(message) {
|
function info(message) {
|
||||||
const timestamp = new Date()
|
process.stdout.write(formatLogLine('INF', message));
|
||||||
.toLocaleString('sv-SE', { timeZone: 'Asia/Taipei', hour12: false })
|
|
||||||
.replace(/-/g, '/');
|
|
||||||
const stagePrefix = currentStage ? `[${currentStage}]` : '';
|
|
||||||
|
|
||||||
process.stdout.write(`${stagePrefix}[INF][${timestamp}]: ${message}\n`);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -398,12 +421,7 @@ async function main() {
|
|||||||
|
|
||||||
if (require.main === module) {
|
if (require.main === module) {
|
||||||
main().catch((error) => {
|
main().catch((error) => {
|
||||||
const timestamp = new Date()
|
process.stderr.write(formatLogLine('ERR', error.message));
|
||||||
.toLocaleString('sv-SE', { timeZone: 'Asia/Taipei', hour12: false })
|
|
||||||
.replace(/-/g, '/');
|
|
||||||
const stagePrefix = currentStage ? `[${currentStage}]` : '';
|
|
||||||
|
|
||||||
process.stderr.write(`${stagePrefix}[ERR][${timestamp}]: ${error.message}\n`);
|
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user