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).
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.
import core.sys.windows.windows : RegisterEventSourceA;
windowsEventHandle = RegisterEventSourceA(null, cast(char*)processName.ptr);
and to close it:
import core.sys.windows.windows : DeregisterEventSource;
DeregisterEventSource(windowsEventHandle);
I tried to make a simple recording, but when compiling, he swears at linking.
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 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?