C-keele logimise täielik juhend: põhitõed, logitasemed ja parimad tavad

1. Sissejuhatus

C-keel on programmeerimiskeel, mida kasutatakse paljudes valdkondades, näiteks süsteemiarenduses ja manussüsteemides. Eriti oluline on logiväljundi funktsioon, mis võimaldab programmi käitumist visualiseerida ning on hädavajalik silumiseks ja vigade avastamiseks. Käesolevas artiklis käsitleme põhjalikult C-keele logimise aluseid kuni tõhusate logihalduse meetoditeni. Logiväljundi põhiteadmiste ja rakendustehnikate mõistmine aitab neid teadmisi reaalses arendustöös rakendada.

2. C-keele matemaatikafunktsioon „log”

C-keeles on olemas standardne matemaatikafunktsioon „log”. Selles jaotises selgitame log-funktsiooni ülevaadet ja põhilist kasutamist.

„log” funktsiooni ülevaade ja kasutus

„log” funktsioon on defineeritud C-keele matemaatikateegis (math.h) ning arvutab naturaallogaritmi (alusega e). See on üks sagedamini kasutatavaid funktsioone statistilises analüüsis ja teaduslikes arvutustes.

#include <math.h>
double result = log(10.0);  // Arvutab arvu 10 naturaallogaritmi

Naturaallogaritmi ja kümnendlogaritmi erinevus

Naturaallogaritm on alusega e, kuid kümnendlogaritmi (alus 10) arvutamiseks kasutatakse funktsiooni log10.

double result = log10(100.0);  // Arvutab arvu 100 kümnendlogaritmi

Vigade käsitlemine

Kuna „log” funktsioon annab vea, kui sisend on negatiivne arv või 0, on vaja sisendit kontrollida.

if (number > 0) {
    result = log(number);
} else {
    printf("Palun sisestage positiivne arv\n");
}
年収訴求

3. Logiväljundi alused C-keeles

Logiväljund aitab jälgida programmi käitumist ning tuvastada ja lahendada probleeme. Siin selgitame põhilisi meetodeid logimise jaoks, kasutades standardväljundit ja failiväljundit.

Põhiline logiväljund standardväljundisse

Standardväljundisse logimiseks kasutatakse funktsiooni printf.

#include <stdio.h>
int main() {
    printf("Programmi käivitamine\n");
    int x = 5;
    printf("Muutuja x väärtus: %d\n", x);
    return 0;
}

Logiväljund faili

Logide salvestamiseks faili avatakse see funktsiooniga fopen ja kirjutatakse fprintf abil.

#include <stdio.h>
int main() {
    FILE *logfile = fopen("log.txt", "w");
    if (logfile != NULL) {
        fprintf(logfile, "Programmi käivitamine\n");
        fclose(logfile);
    } else {
        printf("Logifaili loomine ebaõnnestus\n");
    }
    return 0;
}

4. Logitasemete seadistamine ja haldus

Logitaseme määramine võimaldab kontrollida väljundit vastavalt sõnumi olulisusele. Allpool on toodud iga taseme roll ja näide rakendusest.

Logitasemete ülevaade

  • DEBUG: üksikasjalik silumisinfo
  • INFO: tavapärane tööinfo
  • WARN: hoiatussõnum
  • ERROR: veateade
  • FATAL: kriitiline viga

Logitasemete põhjal väljundi kontroll

#define LOG_LEVEL_DEBUG 0
#define LOG_LEVEL_INFO 1
#define LOG_LEVEL_WARN 2
int current_log_level = LOG_LEVEL_WARN;

void log_message(int level, const char *message) {
    if (level >= current_log_level) {
        printf("[%d] %s\n", level, message);
    }
}

5. Tõhus logimine makrode abil

Failinime ja rea numbri automaatseks lisamiseks logisõnumitele saab kasutada makrosid.

#include <stdio.h>
#define LOG(level, message) printf("[%s] %s:%d - %s\n", level, __FILE__, __LINE__, message)

int main() {
    LOG("INFO", "Programmi käivitamine");
    return 0;
}

6. Logimine mitme lõimega keskkonnas

Mitme lõimega keskkonnas tuleb kasutada lukustamist, et vältida logiväljundi konfliktide teket. Selleks saab kasutada pthread_mutex.

#include <stdio.h>
#include <pthread.h>

pthread_mutex_t log_mutex;

void log_message(const char *message) {
    pthread_mutex_lock(&log_mutex);
    FILE *logfile = fopen("log.txt", "a");
    if (logfile != NULL) {
        fprintf(logfile, "%s\n", message);
        fclose(logfile);
    }
    pthread_mutex_unlock(&log_mutex);
}

int main() {
    pthread_mutex_init(&log_mutex, NULL);
    log_message("Sõnum lõimest");
    pthread_mutex_destroy(&log_mutex);
    return 0;
}

7. Väliste teekide kasutamine logihalduseks

Log4c teegi kasutamine võimaldab logimist veelgi paindlikumalt hallata.

log4c paigaldamine ja põhiseadistus

log4c.rootCategory=INFO, R
log4c.appender.R=RollingFileAppender
log4c.appender.R.fileName=mylogfile.log
log4c.appender.R.layout=PatternLayout
log4c.appender.R.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

log4c koodinäide

#include <log4c.h>
int main() {
    log4c_init();
    log4c_category_t* mycat = log4c_category_get("mycategory");
    log4c_category_log(mycat, LOG4C_PRIORITY_INFO, "Programmi käivitamine");
    log4c_fini();
    return 0;
}

8. Kokkuvõte

Selles artiklis käsitlesime C-keele logimise aluseid ja edasijõudnud tehnikaid. Alustasime lihtsast logiväljundist, liikusime logitasemete seadistamise ja väliste teekide kasutamiseni. Õige logihaldus aitab parandada programmi töökindlust ja hooldatavust. Loodame, et lugejad saavad neid teadmisi oma projektides rakendada, et suurendada silumise tõhusust ja probleemide lahendamise kiirust.

侍エンジニア塾