除了 log4j xml、属性文件和源代码(主要是 java)之外,配置日志的方法?

Ways to configure logs other than log4j xml, properties file, and source code (mainly java)?

我正在查看某个应用程序的源代码。它正在使用 Spring 框架、Apache Tiles、JSP、Log4j、java、javascript、jquery、jqplot、Jsch,等等

我知道日志是在哪里创建的。 (a/b/logs) 但是,当我查看源代码时,我不知道如何在文件夹名称'logs' 下创建日志。我查看了 log4j.xml、web.xml、属性 文件。我找到了如何创建路径 'a/b' 的代码,但没有找到日志。该文件夹还有 4 种类型的日志。它们的名称采用类似 access.20181227001、errors.20182111 的模式。我想知道我必须在哪里查找日志是如何以这种方式创建的。

Log4J.xml

<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %5p [%c] %m%n" />
    </layout>
</appender>

<appender name="console-infolog" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %5p %m%n" />
    </layout>  
</appender> 

<!-- Application Loggers -->
<logger name="com.dsmentoring.chakan" additivity="false">
    <level value="debug" />
    <appender-ref ref="console"/>
</logger>

<!-- 3rdparty Loggers -->
<logger name="org.springframework.core">
    <level value="error"/> 
</logger>

<!-- Bean logger -->
<logger name="org.springframework.beans">
    <level value="error"/> 
</logger>

<!-- Context logger -->
<logger name="org.springframework.context">
    <level value="error"/> 
</logger>

<!-- Web logger -->
<logger name="org.springframework.web">
    <level value="error"/> 
</logger>

<logger name="org.springframework.ldap" additivity="true">
    <level value="error"/> 
</logger>
<!-- LDAP logger -->
<logger name="com.unboundid.ldap" additivity="true">
    <level value="error"/> 
</logger>

<!-- Root Logger -->
<root>
    <priority value="off" />
    <appender-ref ref="console" />
</root>

总结一下:

1) 除了 log4j.xml、xml 文件和 属性 文件之外,是否可以配置创建日志的位置和创建方式(4 种类型的日志)?我查看了所有 java、jsp、js 代码,但似乎找不到日志配置。所以我想知道是否有其他方法可以做到这一点,或者我应该在哪里寻找这些配置。

2) 'logs' 文件夹可能是 log4j 的默认文件夹?

ldap.properties

#LDAP Connection Info
ldap.host=192.168.0.17 
ldap.port=22389 
ldap.userName=cn=directory manager 
ldap.password= 9074B18A0DE2D50C068D37B60BE5DFDE 
ldap.baseDN=o=sso30root 
ldap.defaultLoadSize=1000 
ldap.start=start-ds 
ldap.stop=stop-ds 
ldap.workdir=/home/KB_openDJ     // logs are created under this path
                                 // /home/KB_openDJ/logs 

在其他java class中,他们使用这个。

@Value("${ldap.workdir}")
private String WORK_DIR;

//  I ommited many lines in between

try{
            diskUsage = sigar.getFileSystemUsage(WORK_DIR);
            diskIOInfo.setDiskRead((int)(diskUsage.getDiskReadBytes()));
            diskIOInfo.setDiskWrite((int)(diskUsage.getDiskWriteBytes()));
        }catch(SigarException sigarEx){
            log.debug("Disk Usage info load Error : " + sigarEx.getMessage());
        }

我多次使用 Eclipse 中的 'Search' 功能。 ( 日志,WORK_DIR 和 4 种类型的日志名称,等等。我无法找到有关日志记录配置的代码。:(

我的 log4j 版本

1.2.15

好的,看来有一个解决方案可能会对您有所帮助。它需要对 org.apache.log4j.LogManager class 的静态初始化块进行一些调试。这个 class 负责加载记录器配置文件。这是一份完整描述初始化过程的文档 link:link.
以下是 LogManager 源文件的摘录:

String configurationOptionStr = OptionConverter.getSystemProperty(DEFAULT_CONFIGURATION_KEY, null);
String configuratorClassName = OptionConverter.getSystemProperty(CONFIGURATOR_CLASS_KEY, null);

我想在这里向您展示的是,您的记录器配置文件可能被指定为提供给您的应用程序服务器的 JVM 选项。这就是您无法确定正在使用的实际文件的原因。

即使此方法失败,我也建议您调查在 运行 时间检索到的附加程序列表。这是一个描述如何执行此操作的 Whosebug 线程:link.