On Saturday, 4 February 2023 at 14:48:55 UTC, Richard (Rikki) Andrew Cattermole wrote:
I.e. here are my functions for syslog and Windows Event log (I won't copy it all, it won't be helpful & the file log function is giant compared).

```d
            void syslog() {
                version (Posix) {
                    import core.sys.posix.syslog : syslog;

syslog(prioritySyslogForLevels[level], unsafeTextMessageComposite.ptr);
                }
            }

            void windowsEvents() {
                version (Windows) {
import core.sys.windows.windows : ReportEventA, WORD, DWORD, EVENTLOG_INFORMATION_TYPE, EVENTLOG_WARNING_TYPE, EVENTLOG_ERROR_TYPE;

                    static WORD[] WTypes = [
EVENTLOG_INFORMATION_TYPE, EVENTLOG_INFORMATION_TYPE, EVENTLOG_WARNING_TYPE, EVENTLOG_ERROR_TYPE, EVENTLOG_ERROR_TYPE, EVENTLOG_ERROR_TYPE
                    ];

static DWORD[] dwEventID = [0, 0, 0, 0, 0, 0];
                    const(char)*[2] messages = [
                        ModuleLine2.ptr,
cast(char*)unsafeTextMessageComposite.ptr + unsafeDateTime.length + ModuleLine.length
                    ];

ReportEventA(windowsEventHandle, WTypes[level], 0, dwEventID[level], cast(void*)null, 2, 0,
                            &messages[0], cast(void*)null);
                }
            }
```

Note: you also need to setup an event source on Windows i.e.

```d
import core.sys.windows.windows : RegisterEventSourceA;
windowsEventHandle = RegisterEventSourceA(null, cast(char*)processName.ptr);
```

and to close it:

```d
import core.sys.windows.windows : DeregisterEventSource;
DeregisterEventSource(windowsEventHandle);
```

I tried to make a simple recording, but when compiling, he swears at linking.

```d
import core.sys.windows.windows;

void writeToEventLog(LPCSTR pszSrcName, LPCSTR message) {
    HANDLE hEventLog = RegisterEventSourceA(NULL, pszSrcName);
ReportEventA(hEventLog, EVENTLOG_ERROR_TYPE, 0, 0, NULL, 1, 0, &message, NULL);
    DeregisterEventSource(hEventLog);
}

void main() {
        writeToEventLog("test", "This is test message");
}
```

```ps
PS C:\sources\d-journals> dub
Starting Performing "debug" build using C:\D\dmd2\windows\bin64\dmd.exe for x86_64. Building d-journals ~master: building configuration [application]
     Linking d-journals
lld-link: error: undefined symbol: RegisterEventSourceA
referenced by C:\sources\d-journals\source\app.d:4
C:\Users\alexander\AppData\Local\dub\cache\d-journals\~master\build\application-debug-windows-x86_64-dmd_v2.102.0-dirty-92393AAC9FC80DD3A486D7D072118EACA853FFECDE2EEAA8920EDA92F0620E60\d-journals.obj:(_D3app15writeToEventLogFPxaQdZv)

lld-link: error: undefined symbol: ReportEventA
referenced by C:\sources\d-journals\source\app.d:5
C:\Users\alexander\AppData\Local\dub\cache\d-journals\~master\build\application-debug-windows-x86_64-dmd_v2.102.0-dirty-92393AAC9FC80DD3A486D7D072118EACA853FFECDE2EEAA8920EDA92F0620E60\d-journals.obj:(_D3app15writeToEventLogFPxaQdZv)

lld-link: error: undefined symbol: DeregisterEventSource
referenced by C:\sources\d-journals\source\app.d:6
C:\Users\alexander\AppData\Local\dub\cache\d-journals\~master\build\application-debug-windows-x86_64-dmd_v2.102.0-dirty-92393AAC9FC80DD3A486D7D072118EACA853FFECDE2EEAA8920EDA92F0620E60\d-journals.obj:(_D3app15writeToEventLogFPxaQdZv)
Error: linker exited with status 1
Error C:\D\dmd2\windows\bin64\dmd.exe failed with exit code 1.
```

What could I have missed?
  • Re: Logging logs in Windows Alexander Zhirov via Digitalmars-d-learn

Reply via email to