Yes, it was buffering. That got me closer. Thanks.
Now I get an 'Invalid Log Message' when I try to log. My log message is
exactly:
["log",{"log" : "The process started"}]
( which I coded as strcpy(buffer,"[\"log\",{\"log\" : \"The process
started\"}]\n"); )
Because the doc says the message must be a JSON. As shown below:
----------------------------------------------------------------
7.3.2. Logging API
There’s also an API for adding messages to CouchDB’s logs. Its simply:
["log", $MESG]\n
Where $MESG is any arbitrary JSON. There is no response from this command. As
with the config API, the trailing \n represents a newline
byte.-----------------------------------------------------------------
The error that is reported is:
-------------------------------------------------------------
[info] [<0.36.0>] Apache CouchDB has started on http://0.0.0.0:5984/
[error] [<0.139.0>] Invalid log message from daemon "my_test": {[{<<"log">>,
<<"The
process started">>}]}
-------------------------------------------------------------
Any idea what it is really expecting?
-Scott
________________________________
From: Paul Davis <[email protected]>
To: "[email protected]" <[email protected]>; Scott Weber
<[email protected]>
Sent: Monday, February 3, 2014 12:21 AM
Subject: Re: Cannot get os_daemon api to function
I reckon your stdout is buffered. Try adding an fflush call after the
second fputs.
On Sat, Feb 1, 2014 at 11:40 PM, Scott Weber <[email protected]> wrote:
> I am using version 1.5. I can get the daemon to start, but there does not
> appear to be any communication on stdin/stdout.
>
> Below are my settings, and a simple C example. I would expect this simple
> code to log a message, then give me a reply of the config settings. However
> nothing happens.
>
> Couch does restart the daemon if I change a config setting under
> [os_daemons]. And the settings do appear in the config page of Futon.
>
> The example program does also exit when Couch closes the stdin connection, as
> expected.
>
>
> Any advice is appreciated.
>
> -Scott
>
>
> CONFIG SETTINGS:
> [log]
> level = info
>
> [os_daemons]
>
> my_test = c:/path/nativeDaemon/debug/NativeDaemon.exe
>
> [my_test]
> Value = 10,002
> OtherValue = The other value
>
>
>
> Actual C code (uses Windows Sleep, otherwise is agnostic) :
>
>
> int main() {
> char buffer[257];
>
> LogMessage("\nSTART:", "Daemon Startup"); // My own log file to disk
> Sleep(3000);
>
> fputs("[\"log\",{\"log\" : \"The process started\"}]\n",stdout);
> fputs("[\"get\", \"os_daemons\"]\n",stdout);
>
> do {
> fgets(buffer,256,stdin);
> if (feof(stdin)) {
> LogMessage("\nCLOSE:","Closed STDIN"); // This does exit when
>expected
> break;
> }
>
>
> // etc... into loop.