The Simple Injector documentation states:
There will be at most one instance of the registered service type and the container will hold on to that instance until the container is disposed or goes out of scope. Clients will always receive that same instance from the container. [...] Simple Injector guarantees that there is at most one instance of the registered Singleton inside that Container instance, but if multiple Container instances are created, each Container instance will get its own instance of the registered Singleton.
Another part of the documentation describes that:
You should typically create a single Container instance for the whole application (one instance per app domain); Container instances are thread-safe.
This means that since you will typically create just one container instance, Singleton registrations will have only one instance for the complete AppDomain. So every user and every request will use that same instance.
It is your responsibility to make sure that such implementation is thread-safe and can be used by multiple threads in parallel.
In case you can't guarantee thread-safety, such instance should be registered as Scoped or Transient.
You should consult the documentation of the used logging library to find out whether instances of the type are thread-safe or not.
Instead of injecting a 3rd party library abstraction in your code, do consider the alternative design described here.