设为首页 加入收藏

TOP

C++、Java、JavaScript中的日志(log)(一)
2015-07-20 17:17:11 来源: 作者: 【 】 浏览:12
Tags:Java JavaScript 日志 log

编程思想之日志记录


什么是log?

相信你一定用日记写过点滴心事,或是用空间、微信、微博刷着动态,记录你每天的喜怒哀乐!在程序中也有一种类似的东西,记录着他主人(应用程序)每天的行踪,他叫日志(log)。日记――是人类生活的记事本,日志(log)――是程序运行状况的记事本。

顾名思义,日志(log,后面均以log称之)就是用来记录程序每天的运行状况的,比如程序出现异常的情况,或是某个关键点,功某个重要的数据或交易等。这里的每天不是说每天一记,可以是伴随着程序运行的始终,只要程序在运行着就一直在记录,一般一天的日志记录在同一个文件中,每天的日志以不同的文件名分开。

下面让我们看看log在C++、Java、java script中的记录方式。

给程序加log

C++中的log:

C++中有很多记录log的库,比较常用的有log4cpp(log4cxx)、Google Glog 。下面主要讲一个log4cpp(log4cxx)的用法。

log4cxx是apache软件基金会的一个开源库,是由log4j移植过来的跨平台的日志处理跟踪项目。从官网下载的log4cxx只有源码,需要自己编译。

log4cxx的编译

1.下载apache-log4cxx-0.10.0.zip、apr-1.2.11-win32-src.zip、apr-util-1.2.10-win32-src.zip。

2.解压apache-log4cxx-0.10.0.zip、apr-1.2.11-win32-src.zip、apr-util-1.2.10-win32-src.zip。

3.重命名apr-1.2.11为apr,重命名apr-util-1.2.10为apr-util;并将apr和apr-util拷贝apache-log4cxx-0.10.0根目录下。

4.以管理员的身份运行cmd.exe,并定位到log4cxx的当前apache-log4cxx-0.10.0目录下,执行以下命令:

configure

configure-aprutil

当执行configure-aprutil时,提示:“ 'sed' 不是内部或外部命令,也不是可运行的程序或批处理文件”。这是因为 configure-aprutil.bat 文件中使用了 Linux 下的 sed 命令,windows下找不到sed命令。解决的方法有以下几种:1.下载一个sed for windows的工具;2.使用Cygwin(windows平台上运行的类UNIX模拟环境 ),再运行 configure-aprutil.bat;3.手动修改。

还是手动改来的方便,将.\apr-util\include\apu.hw下的#define APU_HAVE_APR_ICONV 1改为#define APU_HAVE_APR_ICONV 0 将.\apr-util\include\apr_ldap.hw下的#define APR_HAS_LDAP 1改为#define APR_HAS_LDAP 0。

5.用VC6或更高版本的Visual Studio工具打开 projects/log4cxx.dsw,在打开的时候会依次要求你选择apr、aprutil、xml工程的工作目录,在apache-log4cxx-0.10.0的子目录中找到对应的apr.dsp、aprutil.dsp、xml.dsp文件打开即可。

6.选择log4cxx为Active工程并编译。

7.在编译过程中可能报错:无法打开包括文件:“apr.h”和“apu.h”,找到对应的apr.hw重命名为apr.h,apu.h重命名为apu.h即可。

log4cxx的使用

<1>简单样例:

创建一个工程,设置log4cxx的头文件路径和lib库的路径,并加载log4cxx.lib文件。测试代码如下,日志信息会在命令行中输出。

#include "stdafx.h"

#include "log4cxx/logger.h"
#include "log4cxx/basicconfigurator.h"
#include "log4cxx/helpers/exception.h"

using namespace std;
using namespace log4cxx;
using namespace log4cxx::helpers;


int main()
{
	//@todo 重定向到文件
	LoggerPtr logger(Logger::getLogger("LogTest"));
	//初始化配制
	BasicConfigurator::configure();

	//输出DEBUG级别的日志
	LOG4CXX_DEBUG(logger, "debug log");
	//输出TRACE级别的日志
	LOG4CXX_TRACE(logger, "debug log");
	//输出INFO级别的日志
	LOG4CXX_INFO(logger, "info log");
	
	//输出WARN级别的日志
	LOG4CXX_WARN(logger, "debug log");
	//输出ERROR级别的日志
	LOG4CXX_ERROR(logger, "debug log");
	//输出FATAL级别的日志
	LOG4CXX_FATAL(logger, "debug log");

	//ASSERT判断条件是否正确, 条件为false时,输出信息
	LOG4CXX_ASSERT(logger, 1 == 2, "1 == 2");
	
	return 0;
}


注:我用VC6.0编译log4cxx的源码,然后在VS2010中使用log4cxx库时,编译会报错:unresolved external symbol "__declspec(dllimport) public: void __thiscall log4cxx::Logger::forcedLog

这是因为不同版本的编译器编译的库可能会有不同,要在VS2010上使用,需要在VS2010上重新编译源码。

<2>.设置配制文件:

如果要将日志信息输出到文件,或同时输出到命令行和文件,则要修改配制文件。

log4cxx.properties:

# 设置root logger为DEBUG级别,使用了ca和fa两个Appender
log4j.rootLogger=DEBUG, consoleAppender, fileAppender


#对Appender fileAppender(输出到文件)进行设置:
# 这是一个文件类型的Appender,
log4j.appender.fileAppender=org.apache.log4j.FileAppender
# 将日志信息输出到./log4cxxTest.log,
log4j.appender.fileAppender.File=./log4cxxTest.log
# 输出方式为文件末尾追加
log4j.appender.fileAppender.Append=true
# 设置输出格式(layout)为PatternLayout
log4j.appender.fileAppender.layout=org.apache.log4j
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇leetcode_01_Two sum 下一篇hdu 1072 Nightmare BFS,第一次刷..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)
·使用华为开发者空间 (2025-12-27 04:19:24)
·Getting Started wit (2025-12-27 03:49:24)
·Ubuntu 上最好用的中 (2025-12-27 03:49:20)