@@ -3,7 +3,7 @@ import type { ClarityConfig, EncryptionConfig, Formatter, LogEntry, LoggerOption
3
3
import { Buffer } from 'node:buffer'
4
4
import { createCipheriv , createDecipheriv , randomBytes } from 'node:crypto'
5
5
import { closeSync , createReadStream , createWriteStream , existsSync , fsyncSync , openSync , writeFileSync } from 'node:fs'
6
- import { mkdir , readdir , rename , stat , unlink , writeFile } from 'node:fs/promises'
6
+ import { access , constants , mkdir , readdir , rename , stat , unlink , writeFile } from 'node:fs/promises'
7
7
import { join } from 'node:path'
8
8
import { pipeline } from 'node:stream/promises'
9
9
import { createGzip } from 'node:zlib'
@@ -88,6 +88,12 @@ export class Logger {
88
88
this . config . logDirectory = defaultConfig . logDirectory
89
89
}
90
90
91
+ // Ensure storage/logs folder structure exists
92
+ if ( ! isBrowserProcess ( ) ) {
93
+ mkdir ( this . config . logDirectory , { recursive : true , mode : 0o755 } )
94
+ . catch ( err => console . error ( 'Failed to create log directory:' , err ) )
95
+ }
96
+
91
97
this . currentLogFile = this . generateLogFilename ( )
92
98
93
99
this . encryptionKeys = new Map ( )
@@ -166,9 +172,16 @@ export class Logger {
166
172
const operationPromise = ( async ( ) => {
167
173
let fd : number | undefined
168
174
try {
169
- // Ensure log directory exists
175
+ // Ensure storage/logs folder structure exists
170
176
try {
171
- await mkdir ( this . config . logDirectory , { recursive : true , mode : 0o755 } )
177
+ // First check if directory exists to avoid unnecessary mkdir calls
178
+ try {
179
+ await access ( this . config . logDirectory , constants . F_OK | constants . W_OK )
180
+ }
181
+ catch {
182
+ // If directory doesn't exist or isn't writable, create it
183
+ await mkdir ( this . config . logDirectory , { recursive : true , mode : 0o755 } )
184
+ }
172
185
}
173
186
catch ( err ) {
174
187
console . error ( 'Debug: [writeToFile] Failed to create log directory:' , err )
0 commit comments