simplesamlphp / simplesamlphp/simplesamlphp

PSR-3 compliant logger

Open
#371 4 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement low maintainability
Dominant language
PHP
Stars
1.1k
Forks
704
Avg merge
1d 15h
Merged PRs (30d)
4

Description

We should make our logger PSR-3 compliant, and make all the classes logging something to use this. This is especially useful for unit testing because we could get rid of the static methods, and also for the SAML2 library, which could use our logger or some other instead.

In general, the steps would be:

  • Add a $context parameter to all the methods defined by Psr\Log\LoggerInterface.
  • Make the \SimpleSAML\Logger::log() method public and make it throw a \Psr\Log\InvalidArgumentException if the log level is unknown.
  • Extract the log levels definition from \SimpleSAML\Logger and use the ones defined by Psr\Log\LogLevel instead.
  • Change the formatting that we have today. This means going from %option to {option}. We also need to think how to handle dates, since those have sub-formats using the strftime() date and time formatting rules. We would probably need to split the log format and the format for dates, and handle replacements manually.
  • Make all the classes logging something to implement the Psr\Log\LoggerAwareInterface interface. That is, adding a setLogger() method, and using the internal logger object to log the messages.
  • Make all the logging methods defined in Psr\Log\LoggerInterface non-static (they are static today). This means we need to add a constructor for the Logger. A Singleton approach would probably be the way to go, with a static getInstance() method to retrieve a logger that can be passed to setLogger(). This also cleans the logger initialization we have today, and would allow us to get rid of the logging handlers and have just loggers that extend the basic logging class.
  • Make the \SimpleSAML\Logger class extend Psr\Log\AbstractLogger.
  • Exceptions should also be logger-aware, and pass themselves to the logger object when logging something in the context.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the PSR-3 LoggerInterface, LoggerAwareInterface, and the existing SimpleSAML\Logger entry points. Review the remaining checklist items, including format handling, non-static logging, logger-aware classes, and exceptions. Done means the unchecked compatibility and injection work is implemented consistently and covered by the project's tests.

Written by the indexing model from the issue text.

Assessment

Tech stack
php
Domain
backend, developer-experience
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.