microsoft / playwright-java

Java version of the Playwright testing and automation library
https://playwright.dev/java/
Apache License 2.0
1.13k stars 206 forks source link

[Feature] Replace `System.out`/`System.err` with logging framework or logging facade #1418

Open valfirst opened 10 months ago

valfirst commented 10 months ago

Why is System.out/System.err poor? Here is just one example of multiple explanations: https://owasp.org/www-community/vulnerabilities/Poor_Logging_Practice

Proposal: Replace System.out/System.err with logging facade SLF4J: https://www.slf4j.org/. Having this approach users will have freedom in choosing actual logging framework and will be able to configure log levels and log outputs (console, file, etc.)

yury-s commented 10 months ago

Do you have a particular use case where current logging approach causes problems?

valfirst commented 10 months ago

I'm working on implementation of PW plugin for test automation solution. We redirect logs to files and our reporting system (technically endpoint is REST API). If there are solutions to redirect System.out/System.err streams, please share.

yury-s commented 10 months ago

Without knowing much about the plugin and how it runs playwright it's hard to provide a solution. You can use System.setOut/setErr to capture standard output in-process. If it runs in a separate process, just redirect the output to a file with > bash operator or pipe it (|) to you log processor.

valfirst commented 10 months ago

here is an example of repo with implementation of Log4J2 Appender: https://github.com/reportportal/logger-java-log4j.

but it seems my original idea behind this request was lost, let me put the quote:

The problem is that writing directly to standard output or standard error is often used as an unstructured form of logging. Structured logging facilities provide features like: Logging levels, uniform formatting, a logger identifier, timestamps, and perhaps most critically; the ability to direct the log messages to the right place.

yury-s commented 10 months ago

Ok, let's collect more feedback. So far I'm not convinced that there is a good justification for adding complexity of such logging frameworks to the project. One of the main reasons is that for debugging tests we recommend recording Playwright traces, they contain way more details than printed to stdout/err and in a better structured form. Such trace files would have to be uploaded to the report separately anyway.

nirtal85 commented 9 months ago

allure framework is a great logging solution

valfirst commented 8 months ago

Allure is a reporting framework, but not logging. Logging frameworks are Log4J, Logback, JUL. SLF4J is a logging facade.

rtretyak commented 4 months ago

Using println is not a logging solution at all. Or at least not a recommended one in Java world