The logger is present by default in the container. The app that is logging is set automatically. Nextcloud uses a PSR3 logger.

The logger can be used in the following way:

namespace OCA\MyApp\Service;

use Psr\Log\LoggerInterface;

class AuthorService {
    private LoggerInterface $logger;
    private string $appName;

    public function __construct(LoggerInterface $logger, string $appName){
        $this->logger = $logger;
        $this->appName = $appName;

    public function log($message) {
        $this->logger->error($message, ['extra_context' => 'my extra context']);

In cases where you can not inject a logger into a class, you can use the \OCP\Log\logger function to acquire a logger instance. As a first argument you need to pass the app ID.


use function OCP\Log\logger;

logger('calendar')->warning('look, no dependency injection');