Where is the correct location to put Log4j.properties in an Eclipse project?

后端 未结 10 1535
伪装坚强ぢ
伪装坚强ぢ 2020-11-27 11:19

Where in my Eclipse project should I add the log4j.properties file so that it will work as intended?

相关标签:
10条回答
  • 2020-11-27 11:57

    This question is already answered here

    The classpath never includes specific files. It includes directories and jar files. So, put that file in a directory that is in your classpath.

    Log4j properties aren't (normally) used in developing apps (unless you're debugging Eclipse itself!). So what you really want to to build the executable Java app (Application, WAR, EAR or whatever) and include the Log4j properties in the runtime classpath.

    0 讨论(0)
  • 2020-11-27 11:57

    Put log4j.properties in the runtime classpath.

    This forum shows some posts about possible ways to do it.

    0 讨论(0)
  • 2020-11-27 11:59

    Add the log4j.properties file to the runtime class path of the project. Some people add this to the root of the source tree (so that it gets copied to the root of the compiled classes).

    Edit: If your project is a maven project, you can put the log4j.properties in the src/main/resources folder (and the src/test/resources for your unit tests).

    If you have multiple environments (for example development and production), want different logging for each environment, and want to deploy the same jar (or war, or ear) file to each environment (as in one build for all environments) then store the log4j.properties file outside of the jar file and put it in the class path for each environment (configurable by environment). Historically, I would include some known directory in each environment in the classpath and deploy environment specific stuff there. For example, ~tomcat_user/localclasspath where ~tomcat_user is the home directory of the user that will be running the tomcat instance to which my war file will be deployed.

    0 讨论(0)
  • 2020-11-27 12:02

    In general I put it in a special folder "res" or "resources as already said, but after for the web application, I copy the log4j.properties with the ant task to the WEB-INF/classes directory. It is the same like letting the file at the root of the src/ folder but generally I prefer to see it in a dedicated folder.

    With Maven, the usual place to put is in the folder src/main/resources as answered in this other post. All resources there will go to your build in the root classpath (e.g. target/classes/)

    If you want a powerful logger, you can have also a look to slf4j library which is a logger facade and can use the log4j implementation behind.

    0 讨论(0)
  • 2020-11-27 12:03

    I'm finding out that the location of the log4j.properties file depends on the type of Eclipse project.

    Specifically, for an Eclipse Dynamic Web Project, most of the answers that involve adding the log4j.properties to the war file do not actually add the properties file in the correct location, especially for Tomcat/Apache.

    Here is some of my research and my solution to the issue (again specifically for a Dynamic Web Project running on Tomcat/Apache 6.0)

    • Please refer to this article around how Tomcat will load classes. It's different than the normal class loader for Java. (https://www.mulesoft.com/tcat/tomcat-classpath) Note that it only looks in two places in the war file, WEB-INF/classes and WEB-INF/lib.

    • Note that with a Dynamic Web Project, it is not wise to store your .properties file in the build/../classes directory, as this directory is wiped whenever you clean-build your project.

    • Tomcat does not handle .property files in the WEB-INF/lib location.

    • You cannot store the log4j.properties file in the src directory, as Eclipse abstracts that directory away from your view.

    • The one way I have found to resolve this is to alter the build and add an additional directory that will eventually load into the WEB-INF/classes directory in the war file. Specifically....

    (1) Right click your project in the project explorer, select 'New'->'Folder'. You can name the folder anything, but the standard in this case is 'resources'. The new folder should appear at the root level of your project.

    (2) Move the log4j.properties file into this new folder.

    (3) Right click the project again, and select 'Build-Path'->'Configure Build Path'. Select the 'Sources' tab. Click the 'Add Folder' button. Browse to find your new folder you created in step (1) above. Select 'OK'.

    (4) Once back to the eclipse Project Explorer view, note that the folder has now moved to the 'Java Resources' area (ie it's no longer at the root due to eclipse presentation abstraction).

    (5) Clean build your project.

    (6) To validate that the .properties file now exists in WEB-INF/classes in your war file, export a war file to an easy location (right click Project -> Export -> War file) and checkout the contents. Note that the log4j.properties file now appears in the WEB-INF/classes.

    (7) Promote your project to Tomcat/Apache and note that log4j now works.

    Now that log4j works, start logging, solve world problems, take some time off, and enjoy a tasty adult beverage.

    0 讨论(0)
  • 2020-11-27 12:05

    You do not want to have the log4j.properties packaged with your project deployable -- that is a bad idea, as other posters have mentioned.

    Find the root Tomcat installation that Eclipse is pointing to when it runs your application, and add the log4j.properties file in the proper place there. For Tomcat 7, the right place is

    ${TOMCAT_HOME}/lib

    0 讨论(0)
提交回复
热议问题