Skip to content


Subversion checkout URL

You can clone with
Download ZIP
A reliable, high-performance, thread safe, flexsible, clear-model, pure C logging library.
C Makefile Other
Pull request Compare This branch is 6 commits ahead, 187 commits behind master.

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.


0. What is zlog?

zlog is a high efficent, thread safe, flexsible, clear model, pure c logging library.

  Actually, in the c world there is NO good logging library for application like logback in java or log4cxx in c++. printf can work, but can not be easily redirected or reformat, syslog is slow and is designed for system use. 
  So I write zlog. 
  It is faster, safer and more powerful than log4c. So it can be widely used. 

1. Install


uncompress, install 
$ tar -zxvf zlog-latest-stable.tar.gz
$ cd zlog-0.9.0/
$ ./configure --enable-test # complie test program
$ make
$ sudo make install
default install in /usr/local/, include and zlog.h

2. Introduce configure file

There are 3 important conception in zlog: category,format,rule

Category is designed for different input. In source code name of category variable is a charactor string. In program, get different category for log will distinguish them from each other.

Format describes log pattern, like with or without time stamp, source file, source line.

Rule consists of category, level, output file(or other channel) and format. In brief, if category string in rule of configure file equals name of category variable in source, they match. Still there is complex match range of category. Rule decouples variable conditions. For example, log4j must specify a level for each logger(or inherit from father logger). That's not convenient when each grade of logger has its own level for output(child logger output at the level of debug, when father logger output at the level of error)

Now write configure file. No matter what's the file name is or where it locates, zlog_init() will read file from agruments.
$ cat /etc/zlog.conf

&simple                 "%m%n"
my_cat.DEBUG            >stdout; simple

In configure file now, you can see, logs, whose category of "my_cat", >= debug level, will be output to standard output, with the format of simple(%m - usermessage %n - newline).If you want output to a file and control its size, write like this

my_cat.DEBUG            "/var/log/aa.log", 1M; simple

3. Using zlog API in C source file
$ vi test_hello.c

#include <stdio.h> 

#include "zlog.h"

int main(int argc, char** argv)
	int rc;
	zlog_category_t *c;

	rc = zlog_init("/etc/zlog.conf");
	if (rc) {
		printf("init failed\n");
		return -1;

	c = zlog_get_category("my_cat");
	if (!my_cat) {
		printf("get cat fail\n");
		return -2;

	ZLOG_INFO(c, "hello, zlog");


	return 0;

4. Complie, and run it!s

$ cc -c -o test_hello.o test_hello.c -I/usr/local/include
$ cc -o test_hello test_hello.o -L/usr/local/lib -lzlog
$ ./test_hello
hello, zlog

5. Advance Using
 * syslog style configure file, easy for understand and use
 * log format Customization, like pattern layout in log4j
 * range-category model, which is more flexible and more clear than hierarchy model of log4j
 * multiple output, include static file path, dynamic file path, stdout, stderr, syslog
 * runtime refreash configure to change output flow or output format, just need to call one function -- zlog_reload()
 * high efficieny, on my laptop, record 720'000 log per second, about 200 times faster than syslog(3) with rsyslogd
 * user can define his own log level without change and rebuild library
 * safely rotate log file by size when multiple process or multiple threads write to one same log file
 * accurate to microseconds
 * dzlog, a default category log API for easy use
 * MDC, a log4j style key-value map, expand user defined field in dynamic log file path or log format, is also useful in multi-thread programming
 * self debugable, can output zlog's self debug&error log at runtime
 * Not depend on any other 3rd party library, just base on POSIX system.

6. Links:

GettingStart: in doc directory of zlog-0.9.0.tar.gz, GettingStart-CN.txt GettingStart-EN.txt
UsersGuide: in doc directory of zlog-0.9.0.tar.gz, UsersGuide-CN.pdf UsersGuide-EN.pdf
Homepage(in English):
Homepage(in Chinese):
Author's Blog(in Chinese):
Author's Email:
Something went wrong with that request. Please try again.