Java 在weblogic 9/10中使用log4j日志
在weblogic中,我可以在控制台中为Serverlog配置使用log4j而不是默认的JDK日志记录 但是,serverlog没有使用log4j.properties文件,而是使用config.xml中的配置 即使log4j.properties文件位于类路径中,并且我设置了以下属性:Java 在weblogic 9/10中使用log4j日志,java,logging,log4j,weblogic,Java,Logging,Log4j,Weblogic,在weblogic中,我可以在控制台中为Serverlog配置使用log4j而不是默认的JDK日志记录 但是,serverlog没有使用log4j.properties文件,而是使用config.xml中的配置 即使log4j.properties文件位于类路径中,并且我设置了以下属性: set JAVA_OPTIONS=%JAVA_OPTIONS% -Dlog4j.configuration=file:<path>/log4j.properties set JAVA_OPTIONS
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dlog4j.configuration=file:<path>/log4j.properties
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dweblogic.log.Log4jLoggingEnabled=true
set JAVA_OPTIONS=%JAVA_OPTIONS%-Dlog4j.configuration=文件:/log4j.properties
设置JAVA_选项=%JAVA_选项%-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
设置JAVA\u选项=%JAVA\u选项%-Dweblogic.log.Log4jLoggingEnabled=true
是否可以将log4j.properties配置用于Weblogic服务器日志记录,或者我只能使用java代码更改log4j配置?如果将log4j.xml放入类路径中,Weblogic将获取它。我在WebLogic中使用ApacheCommons日志和log4j,这很容易做到。不需要这些Java选项。您在哪里设置上述选项?请尝试将-Dlog4j选项放在每个将使用log4j而不是默认Java日志记录的托管服务器的服务器启动选项中:
* When you start the Administration Server, include the following Java option in the weblogic.Server command:
-Dweblogic.log.Log4jLoggingEnabled=true
From:我对WebLogic没有任何特别的了解,但是添加
-Dlog4j.debug
将导致log4j告诉您它在哪里查找它的配置。我以前在tomcat中跟踪日志记录问题时发现这是非常宝贵的
查看文档,了解log4j配置过程的详细信息。我从来没有按照预期工作过 我最终做的是创造一些工作。 我注册了一个侦听Weblogic服务器日志的处理程序。 从这个处理程序中,我自己记录到log4j。日志可以重定向到我想做的任何事情 创建自定义日志处理程序:
public class CustomLogHandler extends Handler {
..
public CustomLogHandler () throws SecurityException, IOException,
NamingException {
String log4jConfig = LogFilterConfiguration.getLog4jDirectory();
classlogger.info("log4j configured for file"+ log4jConfig );
PropertyConfigurator.configure(log4jConfig);
logFilterConfiguration = new LogFilterConfiguration();
}
public void publish(LogRecord record) {
WLLogRecord rec = (WLLogRecord) record;
if (!isLoggable(rec))
return;
if (getLoggerName().. is something i want to log) {
// do my own log4j logging
}
然后创建一个applicationLifeCycleStener。
使用启动后方法:
public void postStart(ApplicationLifecycleEvent evt) {
Logger logger = LoggingHelper.getServerLogger();
Handler oldHandler = null;
Handler[] currentHandlers = logger.getHandlers();
.. code to remove an old custom handler if exists...
with something like logger.removeHandler(oldHandler);
// add custom handler to serverlogger.
CustomLogHandler h = null;
try {
h = new CustomLogHandler ();
// If handler was removed we can add a new version.
if (!(unRemovedHandlerClasses.contains(h.getClass()))){
logger.addHandler(h);
registerMBean(h) ;
}
} catch (Exception nmex) {
classLogger.error("Error adding CustomLogHandler to serverlogger "
+ nmex.getMessage());
logger.removeHandler(h);
}
}
这是行不通的。使用所描述的java选项,应用程序已经使用log4j.properties配置正确地进行了日志记录,但我想要的是配置BEA服务器日志记录。显然,bea服务器日志并没有查看类路径中的log4j.xml。我看到我部署的自定义代码正在使用log4.properties,但Serverlog没有使用它(而且因为Serverlog的Aqualogic日志没有使用log4j.properties配置),我已经尝试过了,甚至在问题中记录了这一点。(第三个java选项)。这包含在我的管理服务器的java选项中,但没有达到我想要的效果。是否更改了config.xml中的设置?config.xml是根据控制台中所做的更改而更改的。看起来config.xml设置推翻了log4j.properties设置,因此日志记录是在config.xml中配置的,我不知道如何将其更改为log4j.properties configuration.whare应该添加-Dlog4j.debug?应该将
-Dlog4j.debug
选项添加到java的命令行参数中。对于WebLogic,它位于Servers//Server Start/Arguments中。