Nodejs günlük dosyasının depolandığı bir yer bulamıyorum. Düğüm sunucumda "Segmentasyon hatası" olduğundan, ek bilgi için günlük dosyasına bakmak istiyorum ...
Nodejs günlük dosyasının depolandığı bir yer bulamıyorum. Düğüm sunucumda "Segmentasyon hatası" olduğundan, ek bilgi için günlük dosyasına bakmak istiyorum ...
Yanıtlar:
Günlük dosyası yok. Her node.js "uygulaması" ayrı bir varlıktır. Varsayılan olarak hataları STDERR'a günlüğe kaydedecek ve STDOUT'a gönderecektir. Bunu, kabuğunuzdan çalıştırdığınızda bunun yerine bir dosyaya giriş yapmak için değiştirebilirsiniz.
node my_app.js > my_app_log.log 2> my_app_err.log
Alternatif olarak (önerilir), uygulamanızın içine günlük kaydını manuel olarak veya birçok günlük kitaplığından biriyle ekleyebilirsiniz:
sonsuza kadar ilginizi çekebilir. Günlük seçenekleriyle .js Dosyanızı 24/7 çalıştıracaktır. İşte yardım metninden iki pasaj:
[Uzun Süreli İşlem] Sonsuz süreç, konsola günlük mesajları göndermeye devam edecektir. ex. sonsuza kadar -o out.log -e err.log my-script.js
ve
[Daemon] Sonsuz süreç, hedef sürecin arka planda başlamasını sağlayacak bir arka plan programı olarak çalışacaktır. Bu, nohup kullanmadan basit node.js komut dosyalarını uzaktan başlatmak için son derece kullanışlıdır. -O -l, & -e ile start çalıştırılması önerilir. ex. sonsuza kadar başlat -l forever.log -o out.log -e err.log my-daemon.js sonsuza kadar my-daemon.js'yi durdur
Geliştiricinizde docker kullanıyorsanız, bunu başka bir kabukta yapabilirsiniz: docker attach running_node_app_container_name
Bu size STDOUT ve STDERR'ı gösterecektir.
Nodejs günlük dosyası için, console.log () ifadesi kullanıcısı winston.log () veya diğer winston yöntemlerinin yerine winston ve morgan kullanabilirsiniz. Winston ve morgan ile çalışmak için onları npm kullanarak kurmanız gerekir. Örnek: npm i -S winston npm i -S morgan
Ardından projenizde winston adında bir klasör oluşturun ve ardından bu klasörde bir config.js oluşturun ve aşağıda verilen bu kodu kopyalayın.
const appRoot = require('app-root-path');
const winston = require('winston');
// define the custom settings for each transport (file, console)
const options = {
file: {
level: 'info',
filename: `${appRoot}/logs/app.log`,
handleExceptions: true,
json: true,
maxsize: 5242880, // 5MB
maxFiles: 5,
colorize: false,
},
console: {
level: 'debug',
handleExceptions: true,
json: false,
colorize: true,
},
};
// instantiate a new Winston Logger with the settings defined above
let logger;
if (process.env.logging === 'off') {
logger = winston.createLogger({
transports: [
new winston.transports.File(options.file),
],
exitOnError: false, // do not exit on handled exceptions
});
} else {
logger = winston.createLogger({
transports: [
new winston.transports.File(options.file),
new winston.transports.Console(options.console),
],
exitOnError: false, // do not exit on handled exceptions
});
}
// create a stream object with a 'write' function that will be used by `morgan`
logger.stream = {
write(message) {
logger.info(message);
},
};
module.exports = logger;
Yukarıdaki kodu kopyaladıktan sonra, winston'a paralel veya istediğiniz yerde ad günlükleri olan bir klasör yapın ve bu günlükler klasöründe bir app.log dosyası oluşturun. Config.js'ye geri dönün ve 5. satırdaki "dosya adı:" yolunu ${appRoot}/logs/app.logsizin oluşturduğunuz ilgili app.log dosyasına ayarlayın.
Bundan sonra index.js'ye gidin ve aşağıdaki kodu içine ekleyin.
const morgan = require('morgan');
const winston = require('./winston/config');
const express = require('express');
const app = express();
app.use(morgan('combined', { stream: winston.stream }));
winston.info('You have successfully started working with winston and morgan');