PageRenderTime 24ms CodeModel.GetById 30ms RepoModel.GetById 5ms app.codeStats 0ms

/pmd-4.2.5/docs/rules/logging-java.html

#
HTML | 246 lines | 101 code | 145 blank | 0 comment | 0 complexity | 2393b86e87c036a8c8de4a7f2397b52e MD5 | raw file
Possible License(s): BSD-3-Clause
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><title>PMD - Rule Set: Java Logging Rules</title><style type="text/css" media="all">
  2. @import url("../style/maven-base.css");
  3. @import url("../style/maven-theme.css");</style><link rel="stylesheet" href="../style/print.css" type="text/css" media="print"></link><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></meta><meta name="author" content="Tom Copeland"></meta><meta name="email" content="tom@infoether.com"></meta></head><body class="composite"><div id="banner"><a href="http://pmd.sourceforge.net/" id="organizationLogo"><img alt="InfoEther" src="http://sourceforge.net/sflogo.php?group_id=56262&amp;type=5"></img></a><a href="http://pmd.sourceforge.net/" id="projectLogo"><img alt="PMD" src="../images/pmd_logo_small.jpg"></img></a><div class="clear"><hr></hr></div></div><div id="breadcrumbs"><div class="xleft"></div><div class="xright">
  4. <a href="http://pmdapplied.com/" class="externalLink" title="External Link">**** Get the book! ****</a>
  5. <span class="separator">|</span>
  6. <a href="http://sourceforge.net/projects/pmd" class="externalLink" title="External Link">SourceForge.net Project Page</a>
  7. <span class="separator">|</span>
  8. <a href="http://sourceforge.net" class="externalLink" title="External Link">Hosted by SourceForge</a>
  9. </div><div class="clear"><hr></hr></div></div><div id="leftColumn"><div id="navcolumn"><div id="menuOverview"><h5>Overview</h5><ul><li class="none"><a href="http://sourceforge.net/project/showfiles.php?group_id=56262&amp;package_id=51441&amp;release_id=632850" class="externalLink" title="External Link">Download PMD 4.2.5</a></li><li class="none"><a href="http://sourceforge.net/project/shownotes.php?release_id=632850&amp;group_id=56262" class="externalLink" title="External Link">What's new in PMD 4.2.5</a></li><li class="none"><a href="../news.html">PMD in the news</a></li><li class="none"><a href="../products.html">PMD-related products and books</a></li><li class="none"><a href="../bestpractices.html">Best practices</a></li><li class="none"><a href="../future.html">Future directions</a></li><li class="none"><a href="../similar-projects.html">Similar projects</a></li><li class="none"><a href="../credits.html">Credits</a></li><li class="none"><a href="../license.html">License</a></li><li class="none"><a href="../meaning.html">What does 'PMD' mean?</a></li></ul></div><div id="menuUsage"><h5>Usage</h5><ul><li class="none"><a href="../installing.html">Installation</a></li><li class="none"><a href="../running.html">Command line usage</a></li><li class="none"><a href="../ant-task.html">Ant task usage</a></li><li class="none"><a href="../maven-plugin.html">Maven plugin usage</a></li><li class="none"><a href="../mvn-plugin.html">Mvn plugin usage</a></li><li class="none"><a href="../integrations.html">IDE plugin usage</a></li><li class="none"><a href="../suppressing.html">Suppressing warnings</a></li><li class="none"><a href="../cpd.html">Finding duplicated code</a></li><li class="none"><a href="../jspsupport.html">JSP support</a></li></ul></div><div id="menuCustomizing_PMD"><h5>Customizing PMD</h5><ul><li class="none"><a href="../compiling.html">Compiling PMD</a></li><li class="none"><a href="../howtowritearule.html">How to write a rule</a></li><li class="none"><a href="../xpathruletutorial.html">Writing XPath rules</a></li><li class="none"><a href="../howtomakearuleset.html">How to make a rule set</a></li><li class="none"><a href="../howitworks.html">How it works</a></li><li class="none"><a href="../rule-guidelines.html">Rule guidelines</a></li></ul></div><div id="menuFor_example"><h5>For example</h5><ul><li class="none"><a href="../scoreboard.html">Run PMD on a Sourceforge project</a></li></ul></div><div id="menuRule_Sets"><h5>Rule Sets</h5><ul><li class="none"><a href="../rules/index.html">Index</a></li><li class="none"><a href="../rules/android.html">Android</a></li><li class="none"><a href="../rules/basic.html">Basic</a></li><li class="none"><a href="../rules/braces.html">Braces</a></li><li class="none"><a href="../rules/codesize.html">Code Size</a></li><li class="none"><a href="../rules/clone.html">Clone</a></li><li class="none"><a href="../rules/controversial.html">Controversial</a></li><li class="none"><a href="../rules/coupling.html">Coupling</a></li><li class="none"><a href="../rules/design.html">Design</a></li><li class="none"><a href="../rules/finalizers.html">Finalizers</a></li><li class="none"><a href="../rules/imports.html">Import Statements</a></li><li class="none"><a href="../rules/j2ee.html">J2EE</a></li><li class="none"><a href="../rules/javabeans.html">Javabeans</a></li><li class="none"><a href="../rules/junit.html">JUnit Tests</a></li><li class="none"><strong><a href="../rules/logging-java.html">Logging (Java)</a></strong></li><li class="none"><a href="../rules/logging-jakarta-commons.html">Logging (Jakarta)</a></li><li class="none"><a href="../rules/migrating.html">Migrating</a></li><li class="none"><a href="../rules/naming.html">Naming</a></li><li class="none"><a href="../rules/optimizations.html">Optimizations</a></li><li class="none"><a href="../rules/strictexception.html">Strict Exceptions</a></li><li class="none"><a href="../rules/strings.html">Strings</a></li><li class="none"><a href="../rules/sunsecure.html">Sun Security</a></li><li class="none"><a href="../rules/unusedcode.html">Unused Code</a></li><li class="none"><a href="../rules/basic-jsp.html">Java Server Pages</a></li><li class="none"><a href="../rules/basic-jsf.html">Java Server Faces</a></li></ul></div><div id="menuProject_Documentation"><h5>Project Documentation</h5><ul><li class="none"><a href="../index.html">About</a></li><li class="collapsed"><a href="../project-info.html">Project Info</a></li><li class="collapsed"><a href="../maven-reports.html">Project Reports</a></li><li class="none"><a href="../development-process.html">Development Process</a></li></ul></div><div id="legend"><h5>Legend</h5><ul><li class="externalLink">External Link</li><li class="newWindow">Opens in a new window</li></ul></div><a href="http://maven.apache.org/" title="Built by Maven" id="poweredBy"><img alt="Built by Maven" src="../images/logos/mavenlogo_builtby_w.png"></img></a></div></div><div id="bodyColumn"><div class="contentBox"><div class="section"><a name="Java_Logging_Rules"></a><h2>Java Logging Rules</h2>
  10. The Java Logging ruleset contains a collection of rules that find questionable usages of the logger.
  11. <div class="subsection"><a name="MoreThanOneLogger"></a><h3>MoreThanOneLogger</h3>
  12. <p>Since: PMD 2.0</p>
  13. <p>
  14. Normally only one logger is used in each class.
  15. </p>
  16. <p>This rule is defined by the following Java class:
  17. <a href="../xref/net/sourceforge/pmd/rules/MoreThanOneLogger.html">net.sourceforge.pmd.rules.MoreThanOneLogger</a>
  18. </p>
  19. <p>Example:</p>
  20. <div class="source"><pre>
  21. class Foo{
  22. Logger log = Logger.getLogger(Foo.class.getName());
  23. // It is very rare to see two loggers on a class, normally
  24. // log information is multiplexed by levels
  25. Logger log2= Logger.getLogger(Foo.class.getName());
  26. }
  27. </pre></div>
  28. </div>
  29. <div class="subsection"><a name="LoggerIsNotStaticFinal"></a><h3>LoggerIsNotStaticFinal</h3>
  30. <p>Since: PMD 2.0</p>
  31. <p>
  32. In most cases, the Logger can be declared static and final.
  33. </p>
  34. <p>This rule is defined by the following XPath expression:</p>
  35. <div class="source"><pre>
  36. //VariableDeclarator
  37. [parent::FieldDeclaration]
  38. [../Type/ReferenceType
  39. /ClassOrInterfaceType[@Image='Logger']
  40. and
  41. (..[@Final='false'] or ..[@Static = 'false'] ) ]
  42. </pre></div>
  43. <p>Example:</p>
  44. <div class="source"><pre>
  45. class Foo{
  46. Logger log = Logger.getLogger(Foo.class.getName());
  47. // It is much better to declare the logger as follows
  48. // static final Logger log = Logger.getLogger(Foo.class.getName());
  49. }
  50. </pre></div>
  51. </div>
  52. <div class="subsection"><a name="SystemPrintln"></a><h3>SystemPrintln</h3>
  53. <p>Since: PMD 2.1</p>
  54. <p>
  55. System.(out|err).print is used, consider using a logger.
  56. </p>
  57. <p>This rule is defined by the following XPath expression:</p>
  58. <div class="source"><pre>
  59. //Name[
  60. starts-with(@Image, 'System.out.print')
  61. or
  62. starts-with(@Image, 'System.err.print')
  63. ]
  64. </pre></div>
  65. <p>Example:</p>
  66. <div class="source"><pre>
  67. class Foo{
  68. Logger log = Logger.getLogger(Foo.class.getName());
  69. public void testA () {
  70. System.out.println("Entering test");
  71. // Better use this
  72. log.fine("Entering test");
  73. }
  74. }
  75. </pre></div>
  76. </div>
  77. <div class="subsection"><a name="AvoidPrintStackTrace"></a><h3>AvoidPrintStackTrace</h3>
  78. <p>Since: PMD 3.2</p>
  79. <p>
  80. Avoid printStackTrace(); use a logger call instead.
  81. </p>
  82. <p>This rule is defined by the following XPath expression:</p>
  83. <div class="source"><pre>
  84. //PrimaryExpression
  85. [PrimaryPrefix/Name[contains(@Image,'printStackTrace')]]
  86. [PrimarySuffix[not(boolean(Arguments/ArgumentList/Expression))]]
  87. </pre></div>
  88. <p>Example:</p>
  89. <div class="source"><pre>
  90. class Foo {
  91. void bar() {
  92. try {
  93. // do something
  94. } catch (Exception e) {
  95. e.printStackTrace();
  96. }
  97. }
  98. }
  99. </pre></div>
  100. </div>
  101. </div></div></div><div class="clear"><hr></hr></div><div id="footer"><div class="xright">Š 2002-2009, InfoEther</div><div class="clear"><hr></hr></div></div></body></html>