单个进程中的多个 log4cxx Dom 配置器
Multiple log4cxx Dom Configurator in single process
我有 2 个不同的 com 组件,它们在同一进程中实例化。这两个组件都使用 Log4cxx DomConfigurator 并配置不同的 log4cxx config xml 文件。每个都指定不同的日志路径。但日志是在最新实例化的 com 组件指定的路径中创建的。
我希望这 2 个 COM 组件日志将位于单独的文件中。如何实现这一点?
如果您使用相同的进程或线程,则 logcxx 尝试覆盖前一个进程或线程。因此,最好启动另一个线程并分配logcxx执行下一个日志记录。然后一切都会好起来的。
组件 1 具有此代码,或者您可以在任何组件都可以使用的 logcxx 包装器公共类中编写。
strPath = "AppLog1.dat";
log4cxx::BasicConfigurator::configure();
log4cxx::File cfgFile(strPath);
log4cxx::PropertyConfigurator::configureAndWatch(cfgFile, 60000);
组件 2 具有相同的代码和不同的 AppLog2.dat 文件
示例 DAT 文件 。
#Log4cxx configuration file .
#Final version of log4cxx config
#Author - Sri 4/5/2012
# Root logger set to DEBUG using the A2 apender defined above.
# Set options for appender named 'DT'
# DT's layout is TTCC, using the
# ISO8061 date format with context printing enabled.
log4j.appender.DT=RollingFileAppender
log4j.appender.DT.layout=TTCCLayout
log4j.appender.DT.File=.\log\log.log
log4j.appender.DT.layout.ContextPrinting=enabled
log4j.appender.DT.layout.DateFormat=ISO8601
log4j.appender.DT.rollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.DT.rollingPolicy.FileNamePattern=.\log\log-%d.log.zip
# Set options for appender named 'RawAppender'
# RawAppender's layout is PatternLayout
log4j.appender.RawAppender=RollingFileAppender
log4j.appender.RawAppender.layout=TTCCLayout
log4j.appender.RawAppender.File=.\log\Raw.log
log4j.appender.RawAppender.layout.ContextPrinting=enabled
log4j.appender.RawAppender.layout.DateFormat=ISO8601
log4j.appender.RawAppender.rollingPolicy=org.apache.log4j.rolling.
TimeBasedRollingPolicy
log4j.appender.RawAppender.rollingPolicy.FileNamePattern=.\log\RawData-%d.log.zip
# Set options for appender named 'ErrorAppender'
# ErrorAppender's layout is TTCC, using the
# ISO8061 date format with context printing enabled.
log4j.appender.ErrorAppender=RollingFileAppender
log4j.appender.ErrorAppender.MaxBackupIndex=10
log4j.appender.ErrorAppender.layout=TTCCLayout
log4j.appender.ErrorAppender.File=.\log\Error.log
log4j.appender.ErrorAppender.layout.ContextPrinting=enabled
log4j.appender.ErrorAppender.layout.DateFormat=ISO8601
log4j.appender.ErrorAppender.rollingPolicy=org.apache.log4j.rolling.
TimeBasedRollingPolicy
log4j.appender.ErrorAppender.rollingPolicy.FileNamePattern=.\log\Error-%d.log.zip
# Root logger set to DEBUG using the A2 apender defined above.
log4j.rootLogger=DEBUG, DT
# The logger 'DTError' inherits its level from the
# logger hierarchy. Output will go to the appender's of the root
# logger, DT in this case.
log4j.logger.DTError=INHERIT,ErrorAppender
///当您编写第二个组件的配置文件时,只需更改日志路径或文件名即可。
干杯。
我意识到这个线程已经有几年的历史了......但不要觉得它得到了回答。
您的问题是如何将日志记录输出到每个组件的不同文件。 这个问题的标题"单个进程中的多个 DOM 配置器"...不是您要做的事情的正确答案。
如果您使用的是 DOM 配置,则可以轻松定义多个将写入不同文件的追加器。
<appender name="LogFileA" class="org.apache.log4j.FileAppender">
<param name="file" value="/tmp/logs/logA.log"/>
<param name="append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %c %-5p (%F:%L) - %m%n"/>
</layout>
</appender>
<appender name="LogFileB" class="org.apache.log4j.FileAppender">
<param name="file" value="/tmp/logs/logB.log"/>
<param name="append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %c %-5p (%F:%L) - %m%n"/>
</layout>
</appender>
然后为每个组件定义一个将使用相应追加器的记录器。
<logger name="componentA">
<priority value="all"/>
<appender-ref ref="LogFileA"/>
</logger>
<logger name="componentB">
<priority value="all"/>
<appender-ref ref="LogFileB"/>
</logger>
配置并检索指向相应记录器的指针:
log4cxx::xml::DOMConfigurator::configure("xml_config_file");
log4cxx::LoggerPtr componentA = log4cxx::Logger::getLogger("componentA");
log4cxx::LoggerPtr componentB = log4cxx::Logger::getLogger("componentB");
虽然我怀疑这个答案会对你有所帮助...我希望它能帮助其他人解决类似的问题。
相关文章:
- 未定义的符号 - 在 CentOS 7 中使用 log4cxx
- 带有log4cxx的自定义和动态附加程序的配置
- Log4cxx <<运算符导致访问冲突
- 在 CMake 中使用 Log4cxx
- 如何从C++程序中检索 DOM 元素?
- 如何在 Windows 上使用 log4cxx RollingFileAppender
- 在 c++ 中,两个日志行与 log4Cxx 混合在一起
- 是否有可能以及如何使用log4cxx库每个进程创建独立的记录仪
- 自定义重载运算符<<带有 log4cxx
- Accessing DOM from EMSCRIPTEN
- 如何在不使用 C/C++ (Windows) 中的 DOM 的情况下检查 XML 文件中的标记
- C++17 使用 std::variant 来表示 DOM
- IE 探索 11 < c++ ATL COM 浏览器帮助程序对象(加载项)来替换 DOM 中的文本
- 使用QT的C 处理DOM处理后的XML属性顺序
- 使用log4cxx中的UTF-8字符
- 在Visual Studio 2012中使用Log4cxx
- log4cxx 日志,没有源文件路径
- 使用RapidXML遍历一个简单的DOM Xml文档
- 将 Visual Studio 2008 配置为在程序/库中使用 log4cxx
- 单个进程中的多个 log4cxx Dom 配置器