R 1
Roksam
[DEV]AB 1
[DEV]AB
Sevdamsın 1
Sevdamsın
farkmt2official 1
farkmt2official
emirhanHCL 1
emirhanHCL
Scarlet 1
Scarlet
Best Studio 1
Best Studio
Hikaye Ekle

[NODE JS] fs.appendFile ile Dosyaya Ekleme

Türkiye'de ilk Mobil & PC Aynı Anda Metin2 Oyna. Triarchonline kalıcı ve uzun ömürlü yapısı ile 24 Temmuz'da açılıyor. | 1-99 Mobil Metin2 Triarch HEMEN TIKLA!

nodejs.png


[NODE JS] fs.appendFile ile Dosyaya Ekleme​


Selam arkadaşlar. Bugün dosyaya ekleme işlemini göreceğiz. fs.appendFile, mevcut dosyanın sonuna yeni içerik ekler. writeFile'dan farkı, dosyanın mevcut içeriğini silmeden sonuna ekleme yapmasıdır. Ben en çok log dosyaları ve sürekli büyüyen veri dosyaları için kullanıyorum.

appendFile Kullanımı​


appendFile çok basit bir fonksiyon: dosya varsa sonuna ekler, yoksa yeni dosya oluşturur. writeFile ile aynı parametreleri alır ama davranışı farklıdır. Dosya sonuna satır satır veri eklemek istiyorsanız appendFile doğru tercih. Her ekleme sonuna yeni satır karakteri koymayı unutmayın, aksi halde her şey alt alta değil yan yana yazılır.

Log sistemi kurarken appendFile çok işe yarıyor. Her istek, her hata, her olay dosyaya ekleniyor ve zaman içinde büyüyor. Ama dikkat etmeniz gereken bir şey var: çok yoğun yazma işlemlerinde appendFile yerine write stream kullanmak daha performanslı. Ben bir projede saniyede binlerce log yazıyordum ve appendFile yetmedi, stream'e geçtim.

JavaScript:
// === fs.appendFile ile DOSYAYA EKLEME ===

const fs = require('fs');
const path = require('path');

const logDosyasi = path.join(__dirname, 'uygulama.log');

// Önceki dosyayı temizle (varsa)
try { fs.unlinkSync(logDosyasi); } catch {}

// 1. Senkron ekleme
console.log('=== Senkron Ekleme ===');
fs.appendFileSync(logDosyasi, 'Uygulama başlatıldı\n', 'utf-8');
fs.appendFileSync(logDosyasi, 'Veritabanı bağlantısı kuruldu\n', 'utf-8');
fs.appendFileSync(logDosyasi, 'Sunucu 3000 portunda dinliyor\n', 'utf-8');

console.log('Log dosyası içeriği:');
console.log(fs.readFileSync(logDosyasi, 'utf-8'));

// 2. Asenkron ekleme - Callback
fs.appendFile(logDosyasi, 'Yeni bir istek geldi\n', 'utf-8', (hata) => {
    if (hata) {
        console.error('Ekleme hatası:', hata.message);
        return;
    }
    console.log('Callback ile ekleme başarılı');
});

// 3. Asenkron ekleme - Promise
async function logEkle(mesaj) {
    const tarih = new Date().toISOString();
    const satirFormatli = `[${tarih}] ${mesaj}\n`;
    await fs.promises.appendFile(logDosyasi, satirFormatli, 'utf-8');
}

async function testLoglar() {
    await logEkle('GET /api/kullanicilar - 200 OK');
    await logEkle('POST /api/giris - 401 Unauthorized');
    await logEkle('GET /api/urunler - 200 OK');
    await logEkle('DELETE /api/kullanicilar/5 - 403 Forbidden');

    console.log('\nGüncel log dosyası:');
    console.log(fs.readFileSync(logDosyasi, 'utf-8'));
}
testLoglar();

// 4. Basit Logger sınıfı
class DosyaLogger {
    constructor(dosyaYolu) {
        this.dosyaYolu = dosyaYolu;
        this.seviyeler = { DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3 };
        this.minSeviye = this.seviyeler.DEBUG;
    }

    _yaz(seviye, mesaj) {
        if (this.seviyeler[seviye] < this.minSeviye) return;

        const tarih = new Date().toISOString().replace('T', ' ').substr(0, 19);
        const satir = `[${tarih}] [${seviye.padEnd(5)}] ${mesaj}\n`;

        fs.appendFileSync(this.dosyaYolu, satir, 'utf-8');
        console.log(satir.trim());
    }

    debug(mesaj) { this._yaz('DEBUG', mesaj); }
    info(mesaj) { this._yaz('INFO', mesaj); }
    warn(mesaj) { this._yaz('WARN', mesaj); }
    error(mesaj) { this._yaz('ERROR', mesaj); }

    setSeviye(seviye) {
        this.minSeviye = this.seviyeler[seviye] || 0;
    }
}

const logger = new DosyaLogger(path.join(__dirname, 'app-logger.log'));
logger.info('Uygulama başlatıldı');
logger.debug('Konfigürasyon yüklendi');
logger.warn('Bellek kullanımı %75 üzerinde');
logger.error('Veritabanı bağlantısı koptu');

// 5. CSV dosyasına ekleme
const csvDosyasi = path.join(__dirname, 'satislar.csv');

function csvBaslikEkle(dosya, basliklar) {
    if (!fs.existsSync(dosya)) {
        fs.writeFileSync(dosya, basliklar.join(',') + '\n', 'utf-8');
    }
}

function csvSatirEkle(dosya, degerler) {
    const satir = degerler.map(d => {
        const str = String(d);
        return str.includes(',') ? `"${str}"` : str;
    }).join(',') + '\n';
    fs.appendFileSync(dosya, satir, 'utf-8');
}

csvBaslikEkle(csvDosyasi, ['Tarih', 'Ürün', 'Adet', 'Fiyat', 'Toplam']);
csvSatirEkle(csvDosyasi, ['2026-07-12', 'Laptop', 2, 25000, 50000]);
csvSatirEkle(csvDosyasi, ['2026-07-12', 'Mouse', 5, 500, 2500]);
csvSatirEkle(csvDosyasi, ['2026-07-12', 'Klavye', 3, 1200, 3600]);

console.log('\nCSV İçeriği:');
console.log(fs.readFileSync(csvDosyasi, 'utf-8'));

// Temizlik
setTimeout(() => {
    [logDosyasi, path.join(__dirname, 'app-logger.log'), csvDosyasi].forEach(d => {
        try { fs.unlinkSync(d); } catch {}
    });
}, 1500);

appendFile günlük geliştirmede çok sık kullanılan bir fonksiyon. Log sistemi, CSV dışa aktarma, veri toplama gibi senaryolarda vazgeçilmez. Yoğun yazma gerektiren durumlarda stream kullanmayı, ve log dosyalarının boyutunu kontrol etmeyi unutmayın. Kolay gelsin.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst