You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Using Exceptionless for nodejs causes problems with AWS Lambda functions #140
When running the program as an AWS Lambda function, it throws the following error:
{
"errorType": "Error",
"errorMessage": "ENOENT: no such file or directory, mkdir '/var/task/.exceptionless'",
"code": "ENOENT",
"errno": -2,
"syscall": "mkdir",
"path": "/var/task/.exceptionless",
"stack": [
"Error: ENOENT: no such file or directory, mkdir '/var/task/.exceptionless'",
" at Object.mkdirSync (node:fs:1398:3)",
" at LocalStorage._init (/var/task/node_modules/node-localstorage/LocalStorage.js:174:16)",
" at new LocalStorage (/var/task/node_modules/node-localstorage/LocalStorage.js:114:14)",
" at NodeExceptionlessClient.startup (file:///var/task/node_modules/@exceptionless/node/dist/NodeExceptionlessClient.js:13:57)",
" at ExceptionlessService.startup (file:///var/task/dist/services/exceptionless.service.js:27:29)",
" at AppModule.getAppContext (file:///var/task/dist/app.module.js:34:40)",
" at async AppModule.getAppService (file:///var/task/dist/app.module.js:40:25)",
" at async handle (file:///var/task/dist/index.js:17:24)",
" at async Runtime.handler (file:///var/task/dist/index.js:6:5)",
" at async Runtime.handleOnceStreaming (file:///var/runtime/index.mjs:1206:26)"
]
}
This is caused by the NodeExceptionlessClient class using the LocalStoragePolyfill.
It's not possible to write to the partition where the script runs on AWS Lambda as far as I know. I couldn't find a way to override the usage of the LocalStoragePolyfill to use memory storage either. Am I overlooking something or is this an issue that needs to be addressed?
@ejsmith I tried that but get the same issue. It seems that the localstorage on line 22 gets initialized before the chance to override which happens after line 35.
If I try/catch it, the Node* plugins being added on the following lines after line 22 won't have been added. I'm assuming that they are important and that I want to use them of course.
It would be better if I could somehow communicate to the NodeExceptionlessClient that it should not use the localstorage but leave the memorystorage as is.
Or, delay initialization of the localstorage, allowing for override to happen during startup.
Activity
ejsmith commentedon Oct 23, 2023
https://github.com/exceptionless/Exceptionless.JavaScript/blob/main/packages/node/src/NodeExceptionlessClient.ts
That is setting up localstorage, there is also an InMemoryStorage implementation.
I believe you can do something like:
kareldonk commentedon Oct 23, 2023
@ejsmith I tried that but get the same issue. It seems that the localstorage on line 22 gets initialized before the chance to override which happens after line 35.
ejsmith commentedon Oct 23, 2023
Hmm... that stinks. Guess we should put this line in a try catch and fallback to using InMemoryStorage if it fails. Could you create a PR for that?
niemyjski commentedon Oct 23, 2023
Should just need to try catch it. If it fails then it will default to in memory out of the box
kareldonk commentedon Oct 24, 2023
If I try/catch it, the Node* plugins being added on the following lines after line 22 won't have been added. I'm assuming that they are important and that I want to use them of course.
It would be better if I could somehow communicate to the
NodeExceptionlessClientthat it should not use the localstorage but leave the memorystorage as is.Or, delay initialization of the localstorage, allowing for override to happen during startup.
niemyjski commentedon Oct 24, 2023
@kareldonk This has been fixed in https://github.com/exceptionless/Exceptionless.JavaScript/releases/tag/v3.0.5 Please let us know if you have any questions.
kareldonk commentedon Oct 24, 2023
Thanks, that was quick. I already deployed it and it works.