`

配置log4j的日志文件为Tomcat的logs目录的方法

阅读更多
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="CONSOLE"class="org.apache.log4j.ConsoleAppender">

        <layout class="org.apache.log4j.PatternLayout">

            <param name="ConversionPattern"

                value="%p - %C{1}.%M(%L) | %m%n"/>

        </layout>

    </appender>

 

    <appender name="apcmsSysLogFile"class="org.apache.log4j.DailyRollingFileAppender">


   <param name="File"value="${catalina.home}/logs/apcms/apcms_sys.log"/>


   <param name="DatePattern"value="'_'yyyyMMdd'.log'"/>  


   <layout class="org.apache.log4j.PatternLayout">

           <param name="ConversionPattern"

               value="%d{yyyyMMdd HH:mm:ss} %p - %C{1}.%M(%L) | %m%n"/>


   </layout>


</appender>


   <appender name="apcmsDataSyncLogFile"class="org.apache.log4j.DailyRollingFileAppender">


   <param name="File"value="${catalina.home}/logs/apcms/apcms_dataSync.log"/>


   <param name="DatePattern"value="'_'yyyyMMdd'.log'"/>  


   <layout class="org.apache.log4j.PatternLayout">

           <param name="ConversionPattern"

               value="%d{yyyyMMdd HH:mm:ss} %p - %C{1}.%M(%L) | %m%n"/>


   </layout>


</appender>


<appender name="FILE"class="org.apache.log4j.DailyRollingFileAppender">  

        <param name="File"value="${catalina.home}/logs/apcms/SystemAll.log"/>    

        <param name="DatePattern"value="'_'yyyy-MM-dd'.log'"/>    

        <layout class="org.apache.log4j.PatternLayout">  

         <param name="ConversionPattern"   

            value="[%d{yyyyMMdd HH:mm:ss SSS} %-5p] [%t] %c{3} - %m%n"/>  

        </layout>    

    </appender>  



    <logger name="org.apache">

        <level value="WARN"/>

    </logger>

 

    <logger name="org.directwebremoting">

        <level value="WARN"/>

    </logger>

 

 

    <logger name="org.springframework">

        <level value="WARN"/>

    </logger>

 

    <logger name="org.codehaus.xfire">

        <level value="WARN"/>

    </logger>

</log4j>


${catalina.home}在系统环境配置了CATALINA_HOME环境变量

方法一、 解决的办法自然是用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs/app.log


其中“${WORKDIR}/”是个变量,会被System Property中的“WORKDIR”的值代替。这样,我们就可以在log4j加载配置文件之前,先用System.setProperty ("WORKDIR", WORKDIR);设置好根路径,此操作可通过一初始的servlet进行。

方法二、可以使用服务器环境变量
log4j的配置文件支持服务器的vm的环境变量,格式类似${catalina.home}
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/logs_tomcat.log
log4j.appender.R.MaxFileSize=10KB
其中的${catalina.home}并非windows系统的环境变量,这个环境变量就不需要在Windows系统的环境变量中设置。之所以这样,你可以看看tomcatbincatalina.bat(startup,shutdown都是调用这个)里面自带有-Dcatalina.home="%CATALINA_HOME%"。继承这个思想,所以你也可以自己设定一个参数-Dmylog.home="D:/abc/log"到对应的服务器java启动的vm参数中
在Tomcat 5.5中的Log4j日志文件的默认相对路径是:bin目录下,  如果要配置到你的应用程序的目录下只需这样:      >如果用myEclipse开发环境下用:"../webapps/你的工程目录/日志文件名";      >如果直接用tomcat5.5启动:"./webapps/你的工程目录/日志文件名";

其实应该把它放到tomcat的logs目录下就可以了  log4j.appender.R.File=../logs/log4j.log

-----------------------------------------------------------------------------------------------------------

方法一、 解决的办法自然是用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs/app.log 其中“${WORKDIR}/”是个变量,会被System Property中的“WORKDIR”的值代替。这样,我们就可以在log4j加载配置文件之前,先用System.setProperty ("WORKDIR", WORKDIR);设置好根路径,此操作可通过一初始的servlet进行。 方法二、可以使用服务器环境变量 log4j的配置文件支持服务器的vm的环境变量,格式类似${catalina.home} log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=${catalina.home}/logs/logs_tomcat.log log4j.appender.R.MaxFileSize=10KB 其中的${catalina.home}并非windows系统的环境变量,这个环境变量就不需要在Windows系统的环境变量中设置。之所以这样,你可以看看tomcatbincatalina.bat(startup,shutdown都是调用这个)里面自带有-Dcatalina.home="%CATALINA_HOME%"。继承这个思想,所以你也可以自己设定一个参数-Dmylog.home="D:/abc/log"到对应的服务器java启动的vm参数中 方法三、通过servlet初始化init()方法中加载file属性实现相对路径 具体实现:做一个servlet,在系统加载的时候,就把properties的文件读到一个properties文件中.那个file的属性值(我使用的是相对目录)改掉(前面加上系统的根目录),让后把这个properties对象设置到propertyConfig中去,这样就初始化了log的设置.在后面的使用中就用不着再配置了 一般在我们开发项目过程中,log4j日志输出路径固定到某个文件夹,这样如果我换一个环境,日志路径又需要重新修改,比较不方便,目前我采用了动态改变日志路径方法来实现相对路径保存日志文件 (1).在项目启动时,装入初始化类: public class Log4jInit extends HttpServlet { static Logger logger = Logger.getLogger(Log4jInit.class); public Log4jInit() { } public void init(ServletConfig config) throws ServletException { String prefix = config.getServletContext().getRealPath("/"); String file = config.getInitParameter("log4j"); String filePath = prefix + file; Properties props = new Properties(); try { FileInputStream istream = new FileInputStream(filePath); props.load(istream); istream.close(); //toPrint(props.getProperty("log4j.appender.file.File")); String logFile = prefix + props.getProperty("log4j.appender.file.File");//设置路径 props.setProperty("log4j.appender.file.File",logFile); PropertyConfigurator.configure(props);//装入log4j配置信息 } catch (IOException e) { toPrint("Could not read configuration file ["+ filePath +"]."); toPrint("Ignoring configuration file ["+ filePath +"]."); return; } } public static void toPrint(String content) { System.out.println(content); } } 实际上log4j的配置文件log4j.properties如为默认名,可放置在JVM能读到的classpath里的任意地方,一般是放在WEB- INF/classes目录下。当log4j的配置文件不再是默认名,则需要另外加载并给出参数,如上 “ropertyConfigurator.configure(props);//装入log4j配置信息” (2).Web.xml中的配置 <servlet><servlet-name>log4j-init</servlet-name><servlet-class>Log4jInit</servlet-class><init-param><param-name>log4j</param-name><param-value>WEB-INF/classes/log4j.properties</param-value></init-param><load-on-startup>1</load-on-startup></servlet> 注意:上面的load-on-startup设为0,以便在Web容器启动时即装入该Servlet。log4j.properties文件放在根的properties子目录中,也可以把它放在其它目录中。应该把.properties文件集中存放,这样方便管理。 (3).log4j.properties中即可配置log4j.appender.file.File为当前应用的相对路径. 以上是网上log4j日志文件的相对路径配置的三种方法(我能找到的就三种),分析: 方法一主要是扩展了log4j的RollingFileAppender类,其他的FileAppender同样道理。扩展的方法,就是用一个子类去覆盖setFile方法,这个方法在log4j读取配置文件生成appender的时候调用,传入的就是配 置文件中的路径,这样我就可以按照自己的想法在路径前面加上根路径了。这种方法可以在log4j.properties中用相对路径自由配置log4j.appender.A1.File属性来决定生成的日志相对web应用根 目录的位置。 方法二是利用服务器vm中已经存在的环境变量如${catalina.home}来设置相对于${catalina.home}的日志路径,日志只能放到服务器子目录里,而且如果是用的其它服务器,则要改对应的环境变量。此方法平台移植不方便。 方法三是扩展ActionServlet类,覆盖其init()方法,新方法中载入log4j.properties位置的参数,可以自由配置log4j的配置文件的名字和存放位置。也可自由配置log4j日志文件的相对于当前应用的路径。详 细代码如下: 程序代码 package wbb.bysxxglxt.util; import org.apache.struts.action.*; import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.Log; import javax.servlet.ServletException; import java.util.Properties; import java.io.InputStream; import org.apache.log4j.PropertyConfigurator; import java.io.FileInputStream; import java.io.IOException; public class ExtendedActionServlet extends ActionServlet { private Log log = LogFactory.getLog(this.getClass().getName()); public ExtendedActionServlet() {} public void init() throws ServletException { log.info( "Initializing, My MyActionServlet init this System's Const Variable"); String prefix = this.getServletConfig().getServletContext().getRealPath( "/"); String file = this.getServletConfig().getInitParameter("log4j"); String filePath = prefix + file; Properties props = new Properties(); System.out.println(prefix); System.out.println(file); System.out.println(filePath); try { FileInputStream log4jStream = new FileInputStream(filePath); props.load(log4jStream); log4jStream.close(); String logFile = prefix + props.getProperty("log4j.appender.A1.File"); //设置路径 System.out.println(logFile); props.setProperty("log4j.appender.A1.File", logFile); PropertyConfigurator.configure(props); //装入log4j配置信息 } catch (IOException e) { e.printStackTrace(); } log.info("Initializing, end My Init"); super.init();//应用了struts,此方法不能省,ActionServlet覆盖了的此方法中有很多重要操作 } } **********************应用web.xml 关键部分*************************** 程序代码 <servlet><servlet-name>action</servlet-name><servlet-class>wbb.bysxxglxt.util.ExtendedActionServlet</servlet-class><init-param><param-name>config</param-name><param-value>/WEB-INF/struts-config.xml</param-value></init-param><init-param><param-name>log4j</param-name><param-value>propertieslog4j.properties</param-value></init-param><init-param><param-name>debug</param-name><param-value>0</param-value></init-param><init-param><param-name>application</param-name><param-value>ApplicationResources</param-value></init-param><load-on-startup>0</load-on-startup></servlet><servlet-mapping><servlet-name>action</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping> 注意log4j参数中相对路径的斜杠线的写法,而且log4j属性文件如放置在web-inf/classes目录或web-inf等目录中最好改名,因为在加载此Servlet之前,服务器如tomcat启动时会自动搜索web-inf目录和web-inf/classes目录中log4j.properties文件,如有则自动加载。log4j属性文件加载后,由于该属性文件中log4j.appender.A1.File的值用的是相对路径,自动加载配置便会出错: log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException: WEB-INFlogsbysxxglxt.log (系统找不到指定的路径。) 不知道log4j为什么会这么早自动启动。尽管后面加载扩展的ActionServlet中正确设置了log4j属性文件并正常加载了,但报的这个错还是怪不爽的,于是只有更改log4j属性文件名字或者更改其存放位置,让其不能自动加载了,不过还是有两个警告: log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax). log4j:WARN Please initialize the log4j system properly. 这样做就算是掩耳盗铃了,如果你有更好的解决办法,希望能在此贴出来,大家一起研究。 ********************log4j.properties***************************** ### 设置logger级别 ### 程序代码 log4j.rootLogger=DEBUG,stdout,A1 ### appender.stdout输出到控制台 ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern= [%5p] [BYSXXGLXT] %d{yyyy-MM-dd HH:mm:ss}: %-4r [%-5p] [%t] ( %F,%L ) - %m%n ### appender.A1输出到日志文件 ### log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender log4j.appender.A1.File=WEB-INF\logs\bysxxglxt.log ##注意上面日志文件相对应用根目录路径的写法 log4j.appender.A1.DatePattern='.'yyyy-MM-dd'.log' log4j.appender.A1.Append=true ## 输出DEBUG级别以上的日志 log4j.appender.A1.Threshold=DEBUG log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern= [%5p] [BYSXXGLXT] %d{yyyy-MM-dd HH:mm:ss}: %-4r [%t] ( %F,%L ) - %m%n
分享到:
评论

相关推荐

    tomcat下的log4j日志配置

    ### Tomcat 下的 Log4j 日志配置详解 在日常的 Web 开发中,日志记录对于调试问题、监控系统状态以及后期维护来说至关重要。在使用 Apache Tomcat 作为服务器时,合理配置日志框架(如 Log4j)能够极大地提高开发...

    tomcat9 slf4j+log4j2 写日志.zip

    2. **配置Log4j2**:Tomcat 9允许你在`$CATALINA_BASE/conf`目录下创建`log4j2.xml`文件来定制日志配置。`tomcat9-log4j2.xml`应该包含了如下内容: ```xml [%t] %-5level %logger{36} - %msg%n"/&gt; ...

    tomcat下用Log4j 按文件大小,生成catalina.out日志文件

    在Tomcat中配置Log4j,可以实现按照文件大小生成日志文件,如`catalina.out`,从而避免单个日志文件过大导致的管理不便。 首先,我们需要理解Log4j的工作原理。Log4j主要包括三个核心组件:Logger(日志器)、...

    Tomcat使用Log4j输出catalina.out日志

    以上就是关于如何使用Log4j输出Tomcat的catalina.out日志的详细步骤和配置方法。希望这些信息能对使用Tomcat的Java Web开发者和运维人员有所帮助。在实际操作过程中,务必小心谨慎,做好备份,避免因配置错误导致...

    Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式

    2. **配置Log4j**:创建一个`log4j.properties`或`log4j.xml`配置文件,定义日志级别、输出目的地、布局模式等。例如: ```properties # log4j.properties 示例 log4j.rootLogger=DEBUG, FILE log4j.appender....

    Tomcat下使用Log4j接管生成日志文件

    创建一个名为`log4j.properties`或`log4j.xml`的配置文件,放置在Web应用的`WEB-INF/classes`目录下。例如,`log4j.properties`配置如下: ```properties # 设置全局日志级别为INFO log4j.rootLogger=INFO, FILE #...

    tomcat日志log4j配置的jar

    要启用Log4j,我们首先需要创建一个名为`logging.properties`的文件,并将其放入Tomcat的`conf`目录下。在这个文件中,我们将配置JULI(Java Util Logging)来使用Log4j。 ```properties # logging.properties ...

    log4j 配置日志文件,把日志信息输出到项目的某个文件夹下

    首先,我们需要创建一个`log4j.properties`或`log4j.xml`配置文件,这个文件通常放在项目的`src/main/resources`目录下。在这个配置文件中,我们将定义日志的输出级别、布局模式以及输出目的地。 以下是一个基本的`...

    tomcat6 配置log4j步骤

    将 Log4j 的 `.jar` 文件及配置文件放入 Tomcat 的 `lib` 目录中: - **log4j.jar** - **log4j.properties** 具体步骤如下: 1. 将 `log4j.jar` 复制到 Tomcat 的 `lib` 目录下。 2. 创建或修改 `log4j....

    log4j tomcat日志jar包 tomcat-juli-adapters,log4j-1.2.15.jar,tomcat-juli.jar

    然而,JULI的功能相对有限,不如Log4j强大,因此许多开发者倾向于将Tomcat的日志系统替换为Log4j。 为了将Tomcat的日志系统与Log4j结合,引入了`tomcat-juli-adapters.jar`。这个适配器库允许Tomcat的JULI接口与Log...

    log4j中配置日志文件相对路径方法分析

    log4j中配置日志文件相对路径方法分析 方法一、 解决的办法自然是用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs/app.log 其中“${...

    Tomcat 不显示详细日志的问题

    首先,需要将 Log4j 的 lib 包放在 Tomcat 的 lib 目录下,然后在 lib 目录新建一个 log4j.properties 文件,该文件用于配置 Log4j 的日志记录行为。下面是一个示例性的 log4j.properties 文件: log4j.rootLogger=...

    tomcat配置生成的日志文件按照日期新建工具

    在Tomcat的`conf/logging.properties`或`conf/log4j.properties`(取决于所使用的日志框架)文件中,我们可以进行日志配置。 为了使Tomcat生成的日志文件按照日期每天新建,我们需要在配置文件中指定一个包含日期的...

    tomcat5.5 log配置所需文件

    2. **Log4j配置文件**:通常,Log4j的配置文件名为`log4j.properties`或`log4j.xml`,这个文件定义了日志输出的级别(如DEBUG, INFO, WARN, ERROR, FATAL)、输出目的地(控制台、文件、电子邮件等)以及日志布局。...

    tomcat日志分割

    通过以上步骤,我们可以利用Log4j的强大功能为Tomcat服务器实现日志分割,这不仅能优化日志管理,还能提高系统维护的效率。日志分割的实施,使得运维人员能够更加有效地分析和监控应用的运行状况,从而确保服务的...

    tomcat配置log4j

    2. **创建Log4j配置文件**:在你的项目资源目录或者Tomcat的conf目录下,创建一个名为`log4j.properties`或`log4j.xml`的配置文件。配置文件定义了日志的输出级别、输出位置、格式等。 3. **配置Log4j**:在配置...

    tomcat log4j 配置及需要的几个jar

    2. **配置Log4j**: 在你的项目或Tomcat的类路径下(通常是`conf`目录)创建一个名为`log4j.properties`的文件。这个文件用于定义Log4j的行为。例如,你可以设置以下内容来指定日志输出级别和输出目的地: ``` log...

    WAS上log4j日志不能输出(ibatis)sql语句解决办法[借鉴].pdf

    WAS 上 log4j 日志不能...解决 WAS 上 log4j 日志不能输出(ibatis)sql 语句的问题需要改变 WAS 的默认 LogFactory 实现类,使其使用 log4j 框架下的 LogFactory 实现类,并且需要正确配置 log4j.properties 文件。

    tomcat控制台详细错误日志设置

    如果你的应用使用了log4j作为日志框架,那么你可以在`WEB-INF/classes`或者`lib`目录下放置`log4j.properties`或`log4j.xml`配置文件,来定制你的日志输出级别和格式。例如,你可以设置如下: ```xml &lt;!...

    tomcat8 slf4j+log4j2 写日志.zip

    总的来说,理解和解决“tomcat8 slf4j+log4j2 不写日志”的问题,需要关注依赖管理、配置文件的正确性、以及Tomcat的类加载机制。通过仔细检查和调整这些方面,你将能够实现高效且可靠的日志记录。

Global site tag (gtag.js) - Google Analytics