Open valfirst opened 1 year ago
Do you have a particular use case where current logging approach causes problems?
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.
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.
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.
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.
allure framework is a great logging solution
Allure is a reporting framework, but not logging. Logging frameworks are Log4J, Logback, JUL. SLF4J is a logging facade.
Using println is not a logging solution at all. Or at least not a recommended one in Java world
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.
Why is
System.out
/System.err
poor? Here is just one example of multiple explanations: https://owasp.org/www-community/vulnerabilities/Poor_Logging_PracticeProposal: 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.)