Ami*_*hum 41 java eclipse pmd java.util.logging
我正在使用PMD插件进行eclipse,在使用System.out.println()解释时它给出了一个错误:
系统.(out | err).print使用,考虑使用记录器.
我的问题是 - 什么是记录器?它是如何用于打印到屏幕的?为什么更好?
mat*_*t b 29
请参阅log4j的简短介绍.
问题在于使用System.out打印调试或诊断信息.这是一种不好的做法,因为您无法轻松更改日志级别,将其关闭,自定义等.
但是,如果您合法地使用System.out向用户打印信息,则可以忽略此警告.
Mic*_*zka 11
如果您使用System.out | err.println(..)在应用程序的main() - 方法中打印出控制台上的用户信息,那么您没有做错任何事.您可以通过插入注释"// NOPMD"来删除该消息.
System.out.println("Fair use of System.out.println(..).");// NOPMD
Run Code Online (Sandbox Code Playgroud)
为此目的,在PMD-Violations Outline中有一个"Mark as review"选项.
当然,你可以使用以下代码片段欺骗PMD:
PrintStream out=System.out;
out.println("I am fooling PMD.");
Run Code Online (Sandbox Code Playgroud)
在main()之外 - 方法使用Log-System,例如Log4j.
更新:
您还可以修改PMD规则"SystemPrintln"以使用以下XPath:
//MethodDeclaration[@MethodName!="main"]//Name[
starts-with(@Image, 'System.out.print')
or
starts-with(@Image, 'System.err.print')
] | //Initializer//Name[
starts-with(@Image, 'System.out.print')
or
starts-with(@Image, 'System.err.print')
]
Run Code Online (Sandbox Code Playgroud)
这将在代码中名为"main"的任何方法中忽略System.out.println等,但在初始化代码中检查System.out.println.我喜欢这个,因为从我的角度来看,System.out.println在方法'main(String args [])'中是安全的.但请谨慎使用,我必须检查,AST中的System.out.println也可以在哪里发生,并且必须调整XPath.
此链接提供有关如何使用Log4j的更简明信息:不要使用System.out.println!但它只有一个小缺陷,你不应该把库放入/jre/lib/ext,而只是放在应用程序的运行时类路径中并随之发送.
优点是您可以使用日志记录级别来指示信息的重要性,以便您可以在外部配置要在输出中显示/隐藏的级别(这样您就不会被以后的所有无用信息所困扰) ,输出应该如何(例如包括时间戳,线程ID,类名,方法名等)以及应该将输出写入的位置(例如控制台,文件,电子邮件等)以及例如文件的情况还应该如何创建它们(例如按年,月和/或日分组).
有几个记录器实现,如Java SE的内置java.util.logging.Logger,方便的Apache Commons Logging,流行的Apache Log4j,它的后继Logback等.您可以使用Slf4j作为额外的抽象层,以便在需要时在任何这些记录器之间切换.
小智 5
记录器有多个级别用于记录.
如果我们正在编写一个真正的短程序,仅仅为了学习目的System.out.println是好的,但是当我们开发一个高质量的软件项目时,我们应该使用专业的记录器,并且应该避免使用SOP.
专业记录仪提供不同级别的记录和灵活性.我们可以相应地获取日志消息.例如,组X消息应仅在PRODUCTION上打印,组Y消息应在ERROR上打印等.
我们对重定向消息的选项有限System.out,但是在记录器的情况下,您有提供多个选项的appender.我们甚至可以创建自定义输出选项并将其重定向到该选项.
| 归档时间: |
|
| 查看次数: |
69646 次 |
| 最近记录: |