log4cxx:使用log4j.rootLogger以外的命名记录器
log4cxx: using a named logger other than log4j.rootLogger
我有一个基于属性的log4cxx,名为Log4cxxConfig.cfg。在其中,我添加了一个名为log4j.daemon的命名记录器。我还创建了一个称为QTermDaemonAppender的appender。以下是cfg文件的一部分:
log4j.rootLogger=info, rootFileAppender
log4j.StationControllertest=trace, rootConsoleAppender, rootFileAppender
log4j.log4test=trace, rootConsoleAppender
log4j.daemon=trace, QTermDaemonAppender
# QTermDaemonAppender
log4j.appender.QTermDaemonAppender.File=qterm_daemon.log
log4j.appender.QTermDaemonAppender.Append=true # set whether to overwrite or append to the file
log4j.appender.QTermDaemonAppender.MaxFileSize=10000KB
log4j.appender.QTermDaemonAppender.MaxBackupIndex=10
log4j.appender.QTermDaemonAppender=org.apache.log4j.RollingFileAppender
log4j.appender.QTermDaemonAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.QTermDaemonAppender.layout.ConversionPattern=%5p %d [%t] (%F:%L) - %m%n
在我的C++代码中,我已经尝试了我能想到的一切,以使我的输出写入qterm_daemon.log。除了没有写入任何内容外,该文件没有创建。
LoggerPtr logger(Logger::getLogger("daemon"));
int main(int argc, char* argv[])
{
// Initialise logger. Use the configuration file named 'log4cxx.properties'.
PropertyConfigurator::configureAndWatch("Log4cxxConfig.cfg");
我已经试过了。我已尝试将cfg文件的名称限定为"./Log4cxxConfig.cfg"。我已在路径中搜索该文件的重复项。我已经尝试使用记录器名称"log4j.daemon"而不是"daemon"。
我试过以下几种:
int main(int argc, char* argv[])
{
// Initialise logger. Use the configuration file named 'log4cxx.properties'.
PropertyConfigurator::configureAndWatch("Log4cxxConfig.cfg");
LoggerPtr logger(Logger::getLogger("log4j.daemon"));
同样,通过限定路径和更改记录器名称的各种组合。没有快乐!我到底做错了什么?我可以像冠军一样在AS400上使用Java和log4j1.4。顺便说一句,这是Raspbian和新的Pi 2。
好的,我已经完成了这个设置。
代码:
LoggerPtr logger(Logger::getLogger("daemon"));
int main(int argc, char* argv[])
{
// Initialise logger. Use the configuration file named 'Log4cxxConfig.cfg'.
PropertyConfigurator::configureAndWatch("Log4cxxConfig.cfg");
和配置文件:
log4j.logger.daemon=trace, QTermDaemonAppender
# QTermDaemonAppender
log4j.appender.QTermDaemonAppender.File=qterm_daemon3.log
log4j.appender.QTermDaemonAppender.Append=true # set whether to overwrite or append to the file
log4j.appender.QTermDaemonAppender.MaxFileSize=10000KB
log4j.appender.QTermDaemonAppender.MaxBackupIndex=10
log4j.appender.QTermDaemonAppender=org.apache.log4j.RollingFileAppender
log4j.appender.QTermDaemonAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.QTermDaemonAppender.layout.ConversionPattern=%5p %d [%t] (%F:%L) - %m%n
关键是获取正确的记录器名称并在代码中正确指定它。我确信有一些命名空间的事情正在进行,因为你必须将".logger"部分添加到你的记录器名称中。我会试着研究一下这是否属实。使用像"logger.daemon"或"log4j.logger.deamon"这样的字符串是不起作用的。
在任何情况下,我的日志文件qterm_daemon3.log都会被创建并写入输出。显然,"log4j"是正确的前缀,即使对于log4cxx也是如此。我在网上发现了一个使用"log4cplus"的例子,它只是导致了一个"请正确初始化log4cxx系统"。
相关文章:
- 创建 Spdlog 异步文件记录器时遇到困难
- 如何将自定义记录器与websocketpp一起使用?
- 在C++中隐藏键盘记录器的控制台窗口
- 随机自动点击器C++使用一个键进行开/关
- 为什么Qt Creator的应用程序输出不能从spdlog记录器打印
- 麻烦得到提升::记录器编译
- 我正在尝试用 c++ 制作一个日志记录框架,但信息没有传递给记录器的子组件,我做错了什么?
- 多态记录器(虚拟模板化函数?
- 设置提升记录器的线程名称
- Boost Log的琐碎记录器"lazy evaluation"是如何工作的?
- boost::log 设置"Channel"通道记录器中的属性
- C++ 当容器在使用前被破坏/修改时发出警告(通过引用元素或迭代器使用)
- 区分键盘记录器中的密码和其他类型的键盘输入
- 线程SCHED_RR Posix 计时器使用的是 100% CPU
- 使用常量字符*时如何使用带有模板的记录器
- Boost Log-使用全局记录器时未定义的参考
- log4cxx:使用log4j.rootLogger以外的命名记录器
- 如何使用静态记录器设置不同的日志位置
- 使用GetAsyncKeyState()的密钥侦听器/记录器
- 使用qInstallMessageHandler的记录器类找不到指向函数的指针