### Summary

When developing a custom module on WSL2, and calling `AnsibleModule.log(msg)`, the underlying code in `ansible/module_utils/basic.py` incorrectly assumes systemd-journal is setup well as long as the corresponding python modules import correctly and do not throw errors.  WSL2 does not naturally support systemd, and therefore the log messages are not falling back into syslog, which is much better supported by WSL2.

Note that I do realize there is a workaround for systemd on WSL2 with `systemd-genie`, but that shouldn't be required just to get log messages out of Ansible.

### Issue Type

Bug Report

### Component Name

AnsibleModule.log()

### Ansible Version

```console
2.10.9
```


### Configuration

```console
$ ansible-config dump --only-changed
DEFAULT_HOST_LIST(/etc/ansible/ansible.cfg) = ['/etc/ansible/inventory_localhost.yml']
DEFAULT_VERBOSITY(/etc/ansible/ansible.cfg) = 0
DISPLAY_SKIPPED_HOSTS(/etc/ansible/ansible.cfg) = False
HOST_KEY_CHECKING(/etc/ansible/ansible.cfg) = False
INTERPRETER_PYTHON(/etc/ansible/ansible.cfg) = auto_silent
```


### OS / Environment

WSL2

### Steps to Reproduce

Just call `AnsibleModule.log()` on WSL2.

### Expected Results

Log messages should go to syslog on WSL2.

### Actual Results

```console
Log messages cannot be found.
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
clean_args.append('%s=********' % arg[:sep_idx])
                        continue
                    else:
                        is_passwd = True
                arg = heuristic_log_sanitize(arg, self.no_log_values)
                clean_args.append(arg)
            self._clean = ' '.join(shlex_quote(arg) for arg in clean_args)
        return self._clean
    def _restore_signal_handlers(self):
        
        if PY2 and sys.platform != 'win32':
            signal.signal(signal.SIGPIPE, signal.SIG_DFL)
    def run_command(self, args, check_rc=False, close_fds=True, executable=None, data=None, binary_data=False, path_prefix=None, cwd=None,
                    use_unsafe_shell=False, prompt_regex=None, environ_update=None, umask=None, encoding='utf-8', errors='surrogate_or_strict',
                    expand_user_and_vars=True, pass_fds=None, before_communicate_callback=None, ignore_invalid_cwd=True, handle_exceptions=True):
        '''
        Execute a command, returns rc, stdout, and stderr.
        :arg args: is the command to run
            * If args is a list, the command will be run with shell=False.
            * If args is a string and use_unsafe_shell=False it will split args to a list and run with shell=False
            * If args is a string and use_unsafe_shell=True it runs with shell=True.
        :kw check_rc: Whether to call fail_json in case of non zero RC.
            Default False
        :kw close_fds: See documentation for subprocess.Popen(). Default True
        :kw executable: See documentation for subprocess.Popen(). Default None
        :kw data: If given, information to write to the stdin of the command
        :kw binary_data: If False, append a newline to the data.  Default False
        :kw path_prefix: If given, additional path to find the command in.
            This adds to the PATH environment variable so helper commands in
            the same directory can also be found