使用 log4cxx 记录到不同的文件
我想在我的代码中记录不同的文件。
我如何在 Log4cxx 中使用 xml 配置或以编程方式在代码中执行此操作...
- 假设我有 1.k,k+1,..n 个组件。
- 它们在同一个应用程序中运行
- 我希望组件 k 记录到 Logger-k,k+1 组件记录到 Logger-k+1 同时
更新:
Logger.addAppender()方法:
log4cxx::helpers::Pool p;
std::string paramAppender = "appxNormalAppender";
std::string paramFileName = "\\Logs\\MyLog.txt";
LOG4CXX_DECODE_CHAR(logAppender, paramAppender );
LOG4CXX_DECODE_CHAR(logFileName, paramFileName );
FileAppenderPtr fileAppender =
logger->getLoggerRepository()->getRootLogger()->getAppender(logAppender);
if(fileAppender!= NULL)
{
fileAppender->setFile(logFileName);
fileAppender->activateOptions(p);
}
这不起作用,因为
假设我将 k 组件的 FileName 设置为 Logger-k,它会记录到 Logger-k,然后我将组件 k+1 的文件名设置为 Logger-k+1,然后是组件 k, 和 k+1 记录相同的 loggerk+1 文件。看来最后一个文件名会覆盖或影响所有其他文件名...
并且
所有组件组件 1,...组件 k,组件 k+1,.... 组件 n 在同一个应用程序中...
I want to log to different files in my code.
How can i do that in Log4cxx with xml configuration or programatically in code...
- Suppose that I have 1.k,k+1,..n components.
- They run in the same application
- I want component k log to Logger-k, k+1 component log to Logger-k+1
at the same time
Update:
Logger.addAppender() approach:
log4cxx::helpers::Pool p;
std::string paramAppender = "appxNormalAppender";
std::string paramFileName = "\\Logs\\MyLog.txt";
LOG4CXX_DECODE_CHAR(logAppender, paramAppender );
LOG4CXX_DECODE_CHAR(logFileName, paramFileName );
FileAppenderPtr fileAppender =
logger->getLoggerRepository()->getRootLogger()->getAppender(logAppender);
if(fileAppender!= NULL)
{
fileAppender->setFile(logFileName);
fileAppender->activateOptions(p);
}
This does not work because
Suppose that i set FileName to Logger-k for k component, it logs to
Logger-k, then i set file name to Logger-k+1 for compoent k+1, then both component k,
and k+1 log the same loggerk+1 file. It seems last file name overrides or effects all others...
And
All compoenent compenent 1, ...compoeent k, componentk+1,....
component n are in the same application...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
正常创建每个记录器,然后通过 Logger.addAppender() 方法为每个记录器添加一个 FileAppender 设置到所需的文件。
Create Each of the Loggers as normal, and then for each logger add a FileAppender set to the desired file via the Logger.addAppender() method.
您确实需要为记录器创建单独的附加程序。在我的示例中,我创建了 afile1 和 afile2 附加程序。我还创建了两个记录器:my.logger1 和 my.logger2。当您使用 my.logger1 时,它会记录到 mylog1 文件,当您使用 my.logger2 时,它会记录到 mylog2文件。
这是我的 log.properties 文件:
这是一个示例程序:
example.cpp:
这是 Makefile(我想我的 log4cplus 是在父目录中构建的):
尝试这个示例,您应该了解附加程序如何工作
Log4cplus 与 log4j 非常相似。所以你可以阅读log4j的基本原理。
要获取类名称,您必须访问 log4cplus.sourceforge.net
关于日志格式。 log4cplus 的文档仅在 doxygen 中可用。因此,您可以在这里阅读有关模式布局中的格式
如果您想记录进程 id ,那么您应该在布局转换模式中使用 %i
示例:
它将记录进程 ID 和消息
You do need to create separate appenders for you loggers. In my example i've created afile1 and afile2 appenders. I have also created two loggers : my.logger1 and my.logger2. When you use my.logger1 it logs to mylog1 file, When you use my.logger2 it logs to mylog2 file.
Here is my log.properties file:
Here is an example programm:
example.cpp:
Here is Makefile( i suppose my log4cplus is built in parent dirrectory):
Try this example and you should understand how appenders works
Log4cplus is mostly like log4j. so you can read basic principles log4j.
And To get classes names you got to visit log4cplus.sourceforge.net
About log format. Documentation for log4cplus is available only in doxygen . so here you can read about formating in pattern layout
And if you want to log process id , than you should use %i in your layout conversion pattern
example:
It will log process id and message
对于动态组件,请尝试以下操作:
使用简单的trace.xml
For dynamic components try this:
with simple trace.xml
这是在对当前解决方案感到非常沮丧之后,在 log4cxx 中使用带有
MDC
类的线程上下文进行动态日志记录的另一个解决方案。它基本上允许将instanceid
前缀添加到FileAppender
的File
属性中。它需要在加载配置文件之前正确编译和定义自定义FileAppender
。适用于通常的旧 log4cxx 0.10.0 版本。它可以与以下代码片段一起使用:可以与此属性配置文件一起使用:
XFileAppender header:
XFileAppender source:
This is another solution for dynamic logging using thread context in log4cxx with class
MDC
, after big frustration with current solutions. It basically allows to have aninstanceid
prefix added to theFile
property of aFileAppender
. It requires a customFileAppender
to be properly compiled and defined before loading of a configuration file. Works with usual old log4cxx 0.10.0 version. It can be used with the following snippet:Can be used with this property configuration file:
XFileAppender header:
XFileAppender source: