opencms Log研究

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

引入:

这篇文章主要快速的研究下opencms所采用的日志系统以及各自的log文件。


分析:

(1)安装opencms时的log

因为在opencms安装时候会自动调用$CATALINA_HOME/opencms/WEB-INF目录下的setup.bat(如果是UNIX机器则是setup.sh)

而这个执行脚本中,会配置真实执行的命令是

1
2
3
4
5
6
7
...
rem Set standard  command  for  invoking Java.
set  _RUNJAVA= "%JAVA_HOME%\bin\java.exe"
set  MAINCLASS=org.opencms.setup.CmsAutoSetup
...
rem execute OPENCMS
%_RUNJAVA% %JAVA_OPTS% -classpath  "%OPENCMS_HOME%\classes%CLASSPATH%%OPENCMS_CP%%TOMCAT_LIB%"  %MAINCLASS% %CMD_LINE_ARGS%

所以,它其实会去执行CmsAutoSetup类,而这个执行向导(wizard)实际是通过CmsAutoSetupBean来完成的:

1
2
3
4
5
6
     public  CmsAutoSetup(CmsAutoSetupProperties props) {
 
         m_props = props;
         m_bean =  new  CmsSetupBean();
         m_bean.init(props.getSetupWebappPath(), props.getServeltMapping(), props.getSetupDefaultWebappName());
     }

而CmsAutoSetupBean中定义了安装向导中的日志文件位置:

1
2
3
4
5
     /** Location for log file.  */
     protected  String m_logFile = CmsSystemInfo.FOLDER_WEBINF + CmsLog.FOLDER_LOGS +  "setup.log" ;
 
     /** Location for logs relative to the webapp folder.  */
     protected  String m_logsFolder = CmsSystemInfo.FOLDER_WEBINF + CmsLog.FOLDER_LOGS;

可以看出这个m_logFile的位置是在 $CATALINA_HOME/webapps/opencms/WEB-INF/logs目录下的setup.log.



(2)运行时的Log

因为org.opencms.main.OpenCms类提供了Opencms系统的运行时,它的getLog()方法会调用CmsLog类的静态方法getLog()方法。我们查看了CmsLog类,可以发现它的静态初始块中有如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
  /**
      * Initializes the OpenCms logger configuration.<p>
      */
     static  {
         try  {
             // look for the log4j.properties that shipped with OpenCms
             URL url = Loader.getResource( "log4j.properties" );
             if  (url !=  null ) {
                 // found some log4j properties, let's see if these are the ones used by OpenCms
                 String path = CmsFileUtil.normalizePath(url,  '/' );
                 // in a default OpenCms configuration, the following path would point to the OpenCms "WEB-INF" folder
                 String webInfPath = CmsResource.getParentFolder(CmsResource.getFolderPath(path));
                 // check for the OpenCms configuration file
                 // check for the OpenCms tld file
                 String tldFilePath = webInfPath + CmsSystemInfo.FILE_TLD;
                 File tldFile =  new  File(tldFilePath);
                 if  (tldFile.exists()) {
                     // assume this is a default OpenCms log configuration                
                     CmsParameterConfiguration configuration =  new  CmsParameterConfiguration(path);
                     // check if OpenCms should set the log file environment variable
                     boolean  setLogFile = configuration.getBoolean( "opencms.set.logfile" false );
                     if  (setLogFile) {
                         // set "opencms.log" variable 
                         String logFilePath = CmsFileUtil.normalizePath(webInfPath + FOLDER_LOGS + FILE_LOG,  '/' );
                         File logFile =  new  File(logFilePath);
                         m_logFileRfsPath = logFile.getAbsolutePath();
                         m_logFileRfsFolder = CmsFileUtil.normalizePath(logFile.getParent() +  '/' , File.separatorChar);
                         System.setProperty( "opencms.logfile" , m_logFileRfsPath);
                         System.setProperty( "opencms.logfolder" , m_logFileRfsFolder);
                         // re-read the configuration with the new environment variable available
                         PropertyConfigurator.configure(path);
                     }
                 }
                 // can't localize this message since this would end in an endless logger init loop
                 INIT.info( ". Log4j config file    : "  + path);
             }
        ...
     }

这就说明,它会在配置文件log4j.properties中检查key为opencms.set.logfile对应的value,如果是true,则会把运行时的log文件设置在WEB-INF/logs目录下的opencms.log文件。

而log4j.properties中已经把这个开关设为true 了:

1
2
3
4
5
6
7
# OpenCms provides a special variable ${opencms.logfile} to the environment, which contains
# the log file path. The location of this file is calculated relative to this 
# "log4j.properties" file on OpenCms startup. If this file is located in the folder "${classes}",
# then the log is written to "${classes}../logs/opencms.log". 
# To disable this mechanism, you must set ${opencms.set.logfile} to "false". In this case 
# you must configure the log output file manually.
opencms.set.logfile=true

所以我们明白,运行时的日志,都存在了$CATALINA_HOME/webapps/opencms/WEB-INF/logs目录下的opencms.log.






本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1587167,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
3月前
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
|
Java API
LOG4J2-MDC-全链路跟踪等功能研究
LOG4J2-MDC-全链路跟踪等功能研究
320 0
|
Java 测试技术
slf4j的log.warn()的参数问题研究
slf4j的log.warn()的参数问题研究
327 0
|
监控 数据库 Windows
Log“.NET研究”4Net 全方位跟踪程序运行
  前端日子自己写了一个简单的日志跟踪程序,现在目前正在做的一个项目中使用以便于跟踪程序异常和运行状况,但是被否认了!可能是没有权威性,于是自己总结了一下Log4net日志跟踪系统,这里分享大家学习一下。
1050 0
|
C#
小巧的日志记录组件 - 开源研究系列文章
  今天给大家带来一个小巧的日志记录组件LogHelper。这个组件是由Log4Net这个组件的由来而来的,不过只是写入.txt文本文件而已。如果能够对大家的项目有帮助那就更好了。   首先,打开.SLN解决方案,添加引用日志组件。
1009 0
|
Unix
深入研究Clang(九) Clang代码阅读之打log读流程2
继续上一篇,同样的hello.c,同样的执行过程,只不过继续添加了一些log信息,而且对代码进行了更近一步的挖掘。先看输入和输出的log信息(前半部分): shining@shining-VirtualBox:~/llvm-3.
1450 0
深入研究Clang(八) Clang代码阅读之打log读流程1
这个过程简单的分为几步。 第一步:写一个简单的小程序,hello.c。内容如下: #includeint main() {  printf("Hello world!\n");} 第二步:找出如何在LLVM里面输出信息,最后选择采用llvm::errs(),等于采用了LLVM的错误机制。
1238 0
|
监控 网络协议
iptables学习与研究(使用LOG记录失败日志)
原文地址: http://blog.csdn.net/fafa211/article/details/2307581   通常情况下,iptables的默认政策为DROP,不匹配的数据包将被直接丢弃。
844 0