Skip to content

When I use tinylog in multiprocess, it make me confuse.  #6

@jesson3264

Description

@jesson3264

The another.log file only record the parent process's print info, Did I lack of some func revoke?

#include "tlog.h"

#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <time.h>
#define PID_IS_CHILD 0

tlog_log *log = NULL;
int printlog()
{
	int i = 0;
	tlog_printf(log, "This is child log stream %d\n", i++);
	while (i<1000)
	{
		tlog_printf(log, "This is child log stream %d\n", i++);
		usleep(10);
	}

	return 0;
}


int paraentprint()
{
	int i = 0;
	while (i<10000)
	{
		tlog_printf(log, "This is paraent log stream %d\n", i++);
		usleep(10);
	}

	return 0;
}
int main(int argc, char *argv[])
{

    /* init and output log message */
    tlog_init("example.log", 1024 * 1024, 8, 0, 0);
    //tlog(TLOG_INFO, "This is a log message.\n");

    /* c++ cout style log */
    //tlog_info << "This is a c++ style log.\n";
    
    /* open another log file, and output message*/
    log = tlog_open("another.log", 1024*1024 * 1024, 8, 0, TLOG_SEGMENT);
    tlog_printf(log, "This is a separate log stream\n");
    /* c++ style log */
    tlog_out(log) << "This is a separate c++ log stream\n"; 
    

	int pid = fork();
	if (pid == PID_IS_CHILD)
	{
		fprintf(stderr, "child func start\n");
		printlog();
	}
	else if (pid < 0) 
	{
		tlog_printf(log, "bad func start\n");
	}
	else 
	{
		tlog_printf(log, "is parent func start\n");
	}

	paraentprint();
    /* close log stream */
	sleep(100);
    tlog_close(log);

    /* flush pending message, and exit tlog */
    tlog_exit();
    return 0;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions