引入:

这篇文章主要快速的研究下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,如需转载请自行联系原作者

opencms Log研究相关推荐

  1. 实现Android-JNI本地C++调试

    1.       原文链接:NDK单步调试方法 如有问题或者版权要求,请拜访原作者或者通知本人. 最近为了性能需求,开始搞JNI,白手起搞真心不容易.中间差点崩溃了好几次,最终总算得到一点心得. JN ...

  2. react:创建新项目

    React中文官方文档给出创建新应用的最佳方式(命令行). npx create-react-app my-app cd my-app npm start 终端直接报错,提示如下: bogon:~ j ...

  3. MongoDB错误:Failed global initialization:FileNotOpen: Failed to open “XXX”

    将MongoDB服务器作为Windows服务运行 重新打开一个cmd终端(一定要管理员身份C:\Windows\System32\cmd.exe,右键以管理员身份运行,这个超级重要),继续来到并目录下 ...

  4. JS高级群的日常!写一个从10到0的倒计时,用console.log打印,不可以用 setInterval!本来说好的研究avalonJS最后演变成了看着大神在那边互相比拼实力。。...

    JS高级群的日常!写一个从10到0的倒计时,用console.log打印,不可以用 setInterval!本来说好的研究avalonJS最后演变成了看着大神在那边互相比拼实力.. 小森 执行一个函数 ...

  5. Windows IIS 日志分析研究(Log Parser Log Parser Lizard Log Parser Studio) update...

    Windows主要有以下三类日志记录系统事件:应用程序日志.系统日志和安全日志. 存放目录:X:\Windows\System32\winevt\Logs\ System.evtx  系统日志 App ...

  6. Boost研究:Boost Log

    日志系统用于记录软件运行过程中的关键信息,是大型CAx软件系统的一个重要的组件. 本文拟对Boost.Log模块进行分析,旨在记录其技术要点. 注1:限于笔者研究水平,难免有理解不当,欢迎批评指正. ...

  7. 如何分析和研究Log文件 ,如何看日志信息

    如何分析和研究Log文件 ,如何看日志信息 . Log 在android中的地位非常重要,要是作为一个android程序员不能过分析log这关,算是android没有入门吧 . 下面我们就来说说如何处 ...

  8. 研究人员发布 VMware vRealize Log RCE 漏洞,立即打补丁

    Horizon3 攻击团队的安全研究人员将于下周发布一个针对漏洞链的漏洞利用程序,以在未打补丁的 VMware vRealize Log Insight 设备上获得远程代码执行. vRealize L ...

  9. slf4j的log.warn()的参数问题研究

    一.背景 今天我们探讨一下@Slf4j的log.warn()的参数问题. 二.上源码 我先给出下面的几个测试用例,大家想想分别会输出什么? import com.alibaba.fastjson.JS ...

  10. 【C#】【Log】Common.Logging.MultipleLogger及ETWLoggerd研究

    common.logging是基于java语言的一个日志门面框架,是Apache基金会下的commons项目下的一个子项目,让你的日志脱离具体的实现. Commong.Logging是.NET下的日志 ...

最新文章

  1. 阿里云 FTP 无法读取目录问题
  2. 课堂笔记——Ubiquitous Computing
  3. 程序员有必要参加软考吗?大一可以考的编程证书还有哪些
  4. jeecg社区第11期导师架构学习班开始报名了
  5. 19.CSS background
  6. sphinx 字符串转html,在Pycharm中获取Sphinx,以将我的文档字符串包含在生成的html中...
  7. Linux下载工具wget详解
  8. 用户空间与内核空间数据交换的方式(3)------seq_file
  9. 数据驱动的物流网络体系
  10. 学校技能节计算机专业方案,第十九届技能节展示方案
  11. 如何出售自己的代码并且不让人看到自己的源码?
  12. idea中各种颜色的含义
  13. 毕业前写了20万行代码,让我从成为同学眼里的面霸
  14. 用p5.js绘制创意自画像
  15. iOS音乐播放器详解(MusicPlayer1.0)
  16. 火狐Android 附加组件,Firefox Nightly 隐藏新功能,让 Android 机用上任意桌面端附加组件...
  17. 前端数字转为中文大写
  18. 唯品会5580万美元注资东方风行
  19. linux 脚本含参,linux shell脚本文件的入参
  20. 哪些专业适合学习人工智能?学了AI可以做什么职业?

热门文章

  1. [转载] 怎样彻底卸载anaconda?
  2. VLC ass字幕文件格式
  3. ALSA之Codec注册过程
  4. Linux 之查看 OpenCV 版本并卸载重装
  5. QT+VS开发界面入门(qt界面在VS2022实现自动生成槽函数)
  6. 深入理解加载FBX模型文件
  7. SSH和SSM的内容
  8. 面向对象软件测试开题报告,软件测试开题报告范文.doc
  9. java 实现生成公司的电子公章,并且盖章生成电子合同
  10. opencv获取图像的像素值