in src/native/windows/src/log.c [176:264]
HANDLE apxLogOpen(
APXHANDLE hPool,
LPCWSTR szPath,
LPCWSTR szPrefix,
DWORD dwRotate)
{
WCHAR sPath[SIZ_PATHLEN];
WCHAR sName[SIZ_PATHLEN];
SYSTEMTIME sysTime;
apx_logfile_st *h;
if (_pt_sys_loglock == NULL) {
InitializeCriticalSection(&_st_sys_loglock);
_pt_sys_loglock = &_st_sys_loglock;
}
GetLocalTime(&sysTime);
if (!szPath) {
if (GetSystemDirectoryW(sPath, MAX_PATH) == 0)
return INVALID_HANDLE_VALUE;
lstrlcatW(sPath, MAX_PATH, L"\\LogFiles");
if (!SHCreateDirectoryExW(NULL, sPath, NULL) && GetLastError() != ERROR_ALREADY_EXISTS) {
if (!SHCreateDirectoryExW(NULL, sPath, NULL))
return INVALID_HANDLE_VALUE;
}
lstrlcatW(sPath, MAX_PATH, L"\\Apache");
if (!SHCreateDirectoryExW(NULL, sPath, NULL) && GetLastError() != ERROR_ALREADY_EXISTS) {
if (!SHCreateDirectoryExW(NULL, sPath, NULL))
return INVALID_HANDLE_VALUE;
}
}
else {
lstrlcpyW(sPath, MAX_PATH, szPath);
}
if (!szPrefix)
szPrefix = L"commons-daemon";
if (dwRotate != 0 && dwRotate < 86400)
StringCchPrintf(sName,
SIZ_PATHLEN,
L"\\%s" LOGF_EXR,
szPrefix,
sysTime.wYear,
sysTime.wMonth,
sysTime.wDay,
0,
0,
0);
else
StringCchPrintf(sName,
SIZ_PATHLEN,
L"\\%s" LOGF_EXT,
szPrefix,
sysTime.wYear,
sysTime.wMonth,
sysTime.wDay);
if (!(h = (apx_logfile_st *)apxPoolCalloc(hPool, sizeof(apx_logfile_st))))
return INVALID_HANDLE_VALUE;
/* Set default level to info */
h->dwLogLevel = APXLOG_LEVEL_INFO;
SHCreateDirectoryExW(NULL, sPath, NULL);
h->sysTime = sysTime;
lstrlcpyW(h->szPath, MAX_PATH, sPath);
lstrlcpyW(h->szFile, MAX_PATH, sPath);
lstrlcatW(h->szFile, MAX_PATH, sName);
lstrlcpyW(h->szPrefix, MAX_PATH, szPrefix);
h->hFile = CreateFileW(h->szFile,
GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH | FILE_FLAG_SEQUENTIAL_SCAN,
NULL);
if (h->hFile == INVALID_HANDLE_VALUE) {
/* Make sure we write somewhere */
h = &_st_sys_errhandle;
apxDisplayError(FALSE, NULL, 0,
"Unable to create logger at '%S'\n", h->szFile);
return (HANDLE)h;
}
else {
h->dwRotate = dwRotate;
}
/* Set this file as system log file */
if (!_st_sys_loghandle)
_st_sys_loghandle = h;
return (HANDLE)h;
}