Die Strapi-Konfiguration ist vollständig und wird im internen Code von Strapi gut verwendet.
Aber obwohl ich die Protokollfunktion an puppeteer übergeben habe, funktioniert sie nicht.
Die Ausgabe wird auf der Konsole ausgegeben, aber die Meldung in der Auswertung von puppeteer ist nicht sichtbar.
Was ist das Problem?
Die Hauptfunktionen und Strapi-Einstellungen sind unten angehängt.
Code: Select all
// puppeteer code
export const test = async (log?) => {
const cluster = getCluster();
const jobData = {
url: 'https://google.com',
};
const data = await cluster.execute(jobData,
async ({ page, data }) => {
const { url } = data;
page.setDefaultNavigationTimeout(0);
log && page.on('console', (msg) => log('[Log]:', msg.text()));
await page.goto(url, { waitUntil: 'load' });
const results = await page.evaluate(async () => {
const tic = Date.now();
try {
} catch (err) {
console.error('Detail fetch error:', err);
}
// const data = [];
// ...somethings
console.log(`Elapsed time: ${Date.now() - tic}ms`);
return data;
}); // evaluate
return results;
}); // cluster.execute
return data;
};
Code: Select all
// call puppeteer function in cron tab
await test(strapi.log.debug.bind(strapi.log));
Code: Select all
// result in console
strapi | debug: [Log]:
strapi | debug: [Log]:
strapi | debug: [Log]:
Code: Select all
// ./config/middleware.ts
export default [
{
name: 'strapi::logger',
config: {
level: 'debug',
exposeInContext: true,
requests: true,
},
},
...
Code: Select all
// ./config/logger.ts
import { winston, formats } from '@strapi/logger';
const { prettyPrint } = formats;
export default {
transports: [
new winston.transports.Console({
level: 'debug',
format: winston.format.combine(
winston.format.errors({ stack: true }),
prettyPrint({ timestamps: 'YYYY-MM-DD hh:mm:ss.SSS' })
),
}),
],
};
Code: Select all
// puppeteer cluster settings
import { Cluster } from 'puppeteer-cluster';
let cluster: Cluster | null = null;
export async function initCluster() {
if (!cluster) {
cluster = await Cluster.launch({
concurrency: Cluster.CONCURRENCY_PAGE,
maxConcurrency: 5,
puppeteerOptions: {
headless: true,
executablePath: '/usr/bin/chromium-browser',
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-dev-shm-usage',
'--disable-gpu',
],
ignoreHTTPSErrors: true,
},
timeout: 60 * 1000,
monitor: true,
});
// 에러 핸들러 등록(선택)
cluster.on('taskerror', (err, data) => {
console.error(`Error in task: ${err.message}`, data);
});
}
return cluster;
}
export function getCluster(): Cluster {
if (!cluster) {
throw new Error('Cluster is not initialized. Call initCluster() first.');
}
return cluster;
}