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.