microsoft / playwright-java

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

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

Open valfirst opened 1 year ago

valfirst commented 1 year 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 1 year ago

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

valfirst commented 1 year 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 1 year 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 1 year 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 1 year 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 11 months ago

allure framework is a great logging solution

valfirst commented 10 months ago

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

rtretyak commented 6 months ago

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

melloware commented 1 month ago

SL4L API would be the way to go as its very popular and its super lightweight facade. I can also be convinced to use just java.util.logging since most logging facades have ways of getting to java.util.logging nowawadys including all the major libraries.

The benefit of java.util.logging is it adds 0 dependencies to Playwright.