I'm trying to figure out the best way to set up logging for my \ndevelopment shop. In a nutshell, I'd like the advice of experienced \ndevelopers/designers to figure out how many logs I should have and where \nI should set each one up. To clarify what I mean, please allow me to \nsketch a hypothetical situation which would illustrate my concerns.\n\nLet's say that my company is called Foo Inc. My Java development is done \nusing Eclipse. Various projects are on the go, including Baz and Fuzz. \nThere is also a body of existing code that does various useful things, \nlike general utilities.\n\nThe Baz project has its own package, com.foo.baz, and includes all the \nclasses used exclusively by Baz, including:\n- Supremo (the main class that invokes the other Baz classes)\n- Alpha\n- Beta\n- Gamma\nThere is also a com.foo.baz.Resources package within the Baz project \ncontaining resource bundles used by Baz.\n\nThe Fuzz project has its own package, com.foo.fuzz, and includes all the \nclasses used by Fuzz, including:\n- Boss (the main class that invokes the other Fuzz classes)\n- Grunt1\n- Grunt2\n- Grunt3\nThere is also a com.foo.fuzz.Resources package within the Fuzz project \ncontaining resource bundles used by Fuzz.\n\nThe more general code is in its own project, Common, and is organized \ninto various specialized packages, including:\n- com.foo.common (miscellaneous common code)\n- com.foo.common.Resources (resource bundles for com.foo.common)\n- com.foo.common.error (common code used for error handling)\n- com.foo.common.error.Resources (resource bundles for \ncom.foo.common.error)\n- com.foo.common.utilities (commonly used utilties of one kind or \nanother)\n- com.foo.common.utilities.Resources (resource bundles for \ncom.foo.common.utilities)\n\nOkay, now that I've set the scene, let me ask some specific questions \nthat will help me figure out the best ways to organize my logging.\n\n1. Should I make use of levels of Loggers here? For example, should I \nhave a master Logger that contains all important messages written to any \npackage whose name starts with com.foo, i.e. any message written by any \nof my classes that is of appropriate severity? And then have separate \nproject-level Logger for com.foo.baz and com.foo.fuzz? Or should I not \nbother with the "master" log and just create separate logs for \ncom.foo.baz and com.foo.fuzz? I can see some advantages to having a \nmaster log: it could contain only records indicating relatively severe \nsituations so that management could exercise oversight (and verify that a \ngiven problem was being addressed) while all messages, serious and minor, \ncould be written to the project-level log for detailed monitoring by \ndevelopers.\n\n2. Should there be a separate log for log records written by common code, \ni.e. everything that has a package name starting with com.foo.common? Or \nshould log records generated by the common classes be written to the logs \nof common.foo.baz or common.foo.fuzz, depending on which project invoked \nthe common code? For example, let's say that com.foo.Fuzz.Grunt1 \ninstantiation com.foo.common.utilities.StringUtils and StringUtils wants \nto log something. Should StringUtils write to a log that is associated \nwith com.foo.Fuzz or one that is associated with com.foo.common?\n\nI think I'll have some followup questions once I've heard the answers to \nthese so I'll hold off for now.