avatar
我最喜欢的20首歌# Music - 天籁之音
m*g
1
I need some help with a small C++ project since I do not have background in
programming functions such as “Logger”. Any help would be really
appreciated. If you would point me to some tutorial of similar programming
problem will be great!
Problem Description:
You must provide a simple logging framework in C++ that conforms to the
following pseudocode interface:
pLogger
{
LogInfo( message )
LogWarning( message )
LogError( message )
}
Example of code using this logger would be:
FunctionA( pLogger )
{
pLogger->LogInfo( "This is an informational message" )
pLogger->LogWarning( "This is a warning message" )
pLogger->LogError( "This is an error message" )
}
Main()
{
pLogger = BuildLoggerSomehow()
FunctionA( pLogger )
pLogger = BuildLoggerSomeOtherWay()
FunctionA( pLogger )
}
Okay, simple enough in terms of usage. However, we have the following
requirements.
1) Extension Point : Logging Destination
We need to be able to support multiple logging destinations. For example we
would like to be able to have a logger that logs to the standard output, or
to a file, or to a remote server, or to the bit bucket, or whatever
destination is required in the future.
2) Extension Point : Message Format
We need to be able to support multiple message formats. For example:
10:09:56 : WARNING : This is a warning message
avatar
b*e
2
今天早上数据没出来时CNN的专家给的预测是下降20%,已经够多了,哪成想真实数据
更惨,1963年以来的最低点
avatar
S*4
3
我最喜欢的20首歌曲,与各位分享一下。看看这20首歌,你喜欢几首?
1、《ce train qui s'en va》
中文名叫:远去的列车,是法国歌手Helene Rolles的一首歌。《我的名字叫伊莲
》也是Helene的冠军单曲。
每个人的过去都可以看做是一趟承载了希望的列车,它曾经多次在我们的心灵驿站
上驻足停留,给我们留下了多少金色的行囊,留下了多少匆匆的过客,留下了多少深情
的回忆。如今,当我们目送列车远去,那渐渐消失在视线尽头的车辙,代表了它走过的
足迹。
2、《爱的协奏曲》
有一种曲子是要用心来听的,有一种曲子是要用爱来感受的,有一首曲子能让人感
觉到爱人般的温暖和缠绵,有一首曲子能驱散冬天的阴霾、带来无尽的阳光,这首曲子
就是巴赫《爱的协奏曲》。
3、《My all》
滨崎步的代表作品,是她对歌迷们谢意的一首歌。歌曲旋律轻快,犹如漫漫长路一
步一步,跌宕起伏的节奏就好似艰辛路途上的百转千回。曲风以欢快流畅的抒情旋律贯
彻始终,歌曲体现了一种坚定,一份执着,一个希望。——本人最喜欢的一首歌。
4、《Encore une Fois》——“我还是那个为你守候着的人,所以别再为过去掉泪
,我一直守候在你身旁。”
有人叫她法国温婉天后,有人叫她疗伤天后,她的歌声,只要飘扬在空气中便能舒
缓人的心灵。心情好,心情坏,只要有她的歌声嘴角便可生出微笑;是白昼,是深夜,
只要跟随她的声线便能到达安详所在。她就是Helene Segara。
5、《Burning》
用了5年的手机铃声,非常好听。
6、《星空》
曲子悠远,深邃,有某种不不舍的情怀,宁静中给人无限的想象,无论在任何一种
心灵的处境中,听这首曲子永远是徜徉仰望的心情,充满了各种思考与平静,夜与暗总
是激发人无边的探索。——上大学前最喜欢的曲子。
7、《Nemo》
Nightwish的代表作之一,“我感觉自己那么渺小那么虚无,我不知道自己究竟是
谁,也不知道我将去向何方。我只知道自己的过去,并企盼着回到从前。迷失、不知去
往哪里、不知目标是什么、绝望于生活中的一切,这就是这首歌的主题。”
8、《午夜的萨克斯》
Dave Koz——午夜的伤感。——一个人听这首曲子的时候,总是会让心情突然变得
感伤。
9、《If i could fly》
美·Joe Satriani——一首让人摆脱沮丧,增强信心的曲子,高潮部分让人心血澎
湃,个人认为是足球视频里最好听的背景音乐。
10、《Scarborough Fair》
中文名叫《斯卡波罗集市》,一首旋律优美的经典歌曲。——小时候经常在电视上
听到这首歌曲,和自己喜欢的人一起,听着这首音乐,会是多么浪漫的一个情景。
11、《Time to say goodbye》
莎拉·布莱曼与意大利盲人歌手波切利合唱的一首歌。德国有史以来最畅销的单曲
唱片,横扫古典流行跨界音乐领域。
12、《Walking in the air》
Nightwish仅有的几首抒情歌之一,尽管不是原唱,但却是最喜欢的版本。作为当
今世界上最有地位的古典歌唱家之一,Tarja的声音使得夜愿扬名国际。
13、《午夜的萨克斯》
——一首听了让人感到忧伤的曲子,个人最喜欢的萨克斯曲。
14、《she's gone》
一首听了想哭的歌。
15、《Room of Angel》
这首歌表达了一个被母亲遗弃的孩子长大成人后在面对着逝世的母亲时的复杂心情
。整首歌满溢着深深的哀伤、忧郁、暗黑的氛围。此歌常被误认为死亡歌曲《忏魂曲》
,带有深深阴郁感,整首歌带来的感觉是黑暗、恐惧、肃穆,又带着唱诗一般的虔诚,
有一种灵异,圣洁,幽怨,压抑的感觉。——当心情不好又一个人的时候,尽量不要听
这首歌。
16、《像现在这样》
最喜欢的一首韩国歌曲。——大学时迷恋上了跆拳道,训练时经常会放这首歌曲,
让人“动力十足”。
17、《The final countdown》
——最后的倒计时,一首劲道十足的摇滚旋律,在炽烈、激昂的合成乐器声中,令
乐迷们彷佛也感受到升空前的那种空气凝聚,随时会爆发的张力。
18、《克罗地亚狂想曲》
音乐描述了饱受战争创伤后克罗地亚灰烬中的残垣断壁,夕阳倒映在血泪和尘埃之
中的悲惨的画面。
此曲旋律激昂高亢,是21世纪新兴名曲,为马克西姆代表之作。
19、《祭奠之歌》
充满传统日本音乐味道,令人联想起冥冥穹苍的歌曲。——如果看过《僵尸道长》
,你一定会听过里面的《潇湘子》,而潇湘子这首曲子就是改编于这首祭奠之歌。
20、《When you believe》
两位天后玛丽亚凯利和惠特妮休斯顿共同演唱的歌曲,1999年奥斯卡最佳原创歌曲
奖。这首歌传达了一种精神:只要你相信,奇迹就会实现。
avatar
a*n
4
High performance考虑的话,一般专门起一个logging thread,其他线程用message
queue/blocking queue(或者直接用shared memory),把要写的log发到logging线程,同步文件写第一次大概300微秒(包括寻道), 以后每次大概20微秒(2.4GHZ CPU, 5400转硬盘)
使用linux的message queue 大概 4微秒可以push到queue
其实你也可以直接用log4cxx的异步logging, 不过那个很慢,我是自己实现的logger class, 大概就是4微秒每次logging
其他的feature应该不难
avatar
c*o
5
这个算是意料之中的吧
avatar
C*n
6
谢谢分享!很多都没有听过,几首听过的都喜欢。要不你做一个YouTube的playlist,
这样大家就不用一个个地去找了,怎么样?

【在 S********4 的大作中提到】
: 我最喜欢的20首歌曲,与各位分享一下。看看这20首歌,你喜欢几首?
: 1、《ce train qui s'en va》
: 中文名叫:远去的列车,是法国歌手Helene Rolles的一首歌。《我的名字叫伊莲
: 》也是Helene的冠军单曲。
: 每个人的过去都可以看做是一趟承载了希望的列车,它曾经多次在我们的心灵驿站
: 上驻足停留,给我们留下了多少金色的行囊,留下了多少匆匆的过客,留下了多少深情
: 的回忆。如今,当我们目送列车远去,那渐渐消失在视线尽头的车辙,代表了它走过的
: 足迹。
: 2、《爱的协奏曲》
: 有一种曲子是要用心来听的,有一种曲子是要用爱来感受的,有一首曲子能让人感

avatar
m*g
7
多谢回复!
我不懂多线程编程,不止能否速成一下?有何好建议?
能否参考一下你的code?

程,
logger

【在 a****n 的大作中提到】
: High performance考虑的话,一般专门起一个logging thread,其他线程用message
: queue/blocking queue(或者直接用shared memory),把要写的log发到logging线程,同步文件写第一次大概300微秒(包括寻道), 以后每次大概20微秒(2.4GHZ CPU, 5400转硬盘)
: 使用linux的message queue 大概 4微秒可以push到queue
: 其实你也可以直接用log4cxx的异步logging, 不过那个很慢,我是自己实现的logger class, 大概就是4微秒每次logging
: 其他的feature应该不难

avatar
a*n
8
速成。。。多做项目把
另外boost message queue 你可以直接用, 跨平台的
linux 直接支持异步文件,
avatar
a*l
9
这个问题的最上层的基本设计就有问题,下面也不用看了,搞笑罢了.

in

【在 m****g 的大作中提到】
: I need some help with a small C++ project since I do not have background in
: programming functions such as “Logger”. Any help would be really
: appreciated. If you would point me to some tutorial of similar programming
: problem will be great!
: Problem Description:
: You must provide a simple logging framework in C++ that conforms to the
: following pseudocode interface:
: pLogger
: {
: LogInfo( message )

avatar
m*g
10
什么问题?能否道来听听?

【在 a****l 的大作中提到】
: 这个问题的最上层的基本设计就有问题,下面也不用看了,搞笑罢了.
:
: in

avatar
a*l
11
LogInfo( message )
LogWarning( message )
LogError( message )
是一个非常不好的做法.

【在 m****g 的大作中提到】
: 什么问题?能否道来听听?
avatar
b*n
12
一般debug,warning,error这些logging levels给个parameter就行了,没人会写成什
么LOGWARNING, LOGERROR吧。

【在 m****g 的大作中提到】
: 什么问题?能否道来听听?
avatar
a*n
13
一般logger class 都会这么实现 logwarning, logerror, logdebug, loginfo, 里面
再设开关, 打开或者关闭某个level的log message
avatar
s*n
14
实现一个industrial level的logger可能要花你一年以上时间。
里面设计的要点很多,例如提高性能可以采用buffer,用binary不要转化为string.只在
display时才形成readable的内容等等。看看windows 的ETW是怎么设计的把。
这个题目写程序比较搞笑,连框架一个小时都说不完。

【在 m****g 的大作中提到】
: 什么问题?能否道来听听?
avatar
a*n
15
ETW 使用的是kernel buff, 而且只能在windows下使用, 每写一条log大概需要10~15微
秒, 不过好处就是, 它的纪录比较详细, 包括了cpu使用率等一系列东西, 而且如果当
你的程序crash, logging 会从kernel buff dump 出来, 不至于丢失
我是使用app level logging, 可以用logging线程 + blocking queue (4微秒)或者
logging进程 + shared memory (这个算是ETW一个简单的 app level 实现), 性能上都
还可以, 而且可以跨平台
所谓工业实现, 我不觉得, 最关键的是适合你的 project, 比如 log4cxx功能是很多,
但是performance 实在不咋地
avatar
l*e
16
你在重新做轮子呀
没听说过boost.log?呵呵

,

【在 a****n 的大作中提到】
: ETW 使用的是kernel buff, 而且只能在windows下使用, 每写一条log大概需要10~15微
: 秒, 不过好处就是, 它的纪录比较详细, 包括了cpu使用率等一系列东西, 而且如果当
: 你的程序crash, logging 会从kernel buff dump 出来, 不至于丢失
: 我是使用app level logging, 可以用logging线程 + blocking queue (4微秒)或者
: logging进程 + shared memory (这个算是ETW一个简单的 app level 实现), 性能上都
: 还可以, 而且可以跨平台
: 所谓工业实现, 我不觉得, 最关键的是适合你的 project, 比如 log4cxx功能是很多,
: 但是performance 实在不咋地

avatar
a*n
17
我当时做项目的时候boost log 还不是正式boost lib 的一部分,
另外我也没有测过他的异步logging性能
其实我也想重用,不过主要看项目的要求, 如果要求一个function < 10 微秒执行完, 你就不能用同步 logging, 而log4cxx 异步的执行时间也远高于 10us

【在 l******e 的大作中提到】
: 你在重新做轮子呀
: 没听说过boost.log?呵呵
:
: ,

avatar
l*e
18
你显然没看boost.log的文档呀,呵呵
boost.log的作者之所以再写一个logger lib,就是为了high performance。

完, 你就不能用同步 logging, 而log4cxx 异步的执行时间也远高于 10us

【在 a****n 的大作中提到】
: 我当时做项目的时候boost log 还不是正式boost lib 的一部分,
: 另外我也没有测过他的异步logging性能
: 其实我也想重用,不过主要看项目的要求, 如果要求一个function < 10 微秒执行完, 你就不能用同步 logging, 而log4cxx 异步的执行时间也远高于 10us

avatar
a*n
19
我刚才查了boost的 official web, 貌似boost log还不在boost里面?
谢谢推荐,不过用之前我肯定还要测试
文档说socket send, instance return 测试结果10G nic上 10us, 一般的nic, 30us
文档说ETW是高性能logger, 测试结果 10~15us
另外我做的logger功能很简单,支持fake output,stdout,和file,info, warning, 和error, 加上logging thread, blocking queue, 也就是4个文件, 而且每条logging也就是4~5us,对于我的项目是足够了,所以也不是很费劲,缺点就是如果程序crash,在queue里面的log可能会丢失。

【在 l******e 的大作中提到】
: 你显然没看boost.log的文档呀,呵呵
: boost.log的作者之所以再写一个logger lib,就是为了high performance。
:
: 完, 你就不能用同步 logging, 而log4cxx 异步的执行时间也远高于 10us

avatar
l*e
20
不在,加上不难
如果是网络测试,结果受运行环境影响的因素太多了

30us

【在 a****n 的大作中提到】
: 我刚才查了boost的 official web, 貌似boost log还不在boost里面?
: 谢谢推荐,不过用之前我肯定还要测试
: 文档说socket send, instance return 测试结果10G nic上 10us, 一般的nic, 30us
: 文档说ETW是高性能logger, 测试结果 10~15us
: 另外我做的logger功能很简单,支持fake output,stdout,和file,info, warning, 和error, 加上logging thread, blocking queue, 也就是4个文件, 而且每条logging也就是4~5us,对于我的项目是足够了,所以也不是很费劲,缺点就是如果程序crash,在queue里面的log可能会丢失。

avatar
a*n
21
不算网络, 只有文件操作
一般同步的肯定不考虑了(同步文件第一次300微秒, 以后平均20微秒)
异步文件, windows不是直接支持异步文件操作(虽然linux支持)
所以异步logging基本上都是threading的实现
这样的话bottleneck主要在blocking queue 上,我测试过boost.的message queue 大概
是5us
所以我估计boost log 应该在5us +

【在 l******e 的大作中提到】
: 不在,加上不难
: 如果是网络测试,结果受运行环境影响的因素太多了
:
: 30us

avatar
l*e
22
windows支持呀
overlapped i/o
不过无所谓了,asio都wrap起来了

【在 a****n 的大作中提到】
: 不算网络, 只有文件操作
: 一般同步的肯定不考虑了(同步文件第一次300微秒, 以后平均20微秒)
: 异步文件, windows不是直接支持异步文件操作(虽然linux支持)
: 所以异步logging基本上都是threading的实现
: 这样的话bottleneck主要在blocking queue 上,我测试过boost.的message queue 大概
: 是5us
: 所以我估计boost log 应该在5us +

avatar
m*g
23
大侠,你们说的我都不懂哇!这面试我可能搞不定了!说真的,我连logger是干吗使的
都不知道哇!
能不能给我发个简单的logger的code让我参考参考?或者介绍logger的文章也行。多谢
了!

【在 a****n 的大作中提到】
: 不算网络, 只有文件操作
: 一般同步的肯定不考虑了(同步文件第一次300微秒, 以后平均20微秒)
: 异步文件, windows不是直接支持异步文件操作(虽然linux支持)
: 所以异步logging基本上都是threading的实现
: 这样的话bottleneck主要在blocking queue 上,我测试过boost.的message queue 大概
: 是5us
: 所以我估计boost log 应该在5us +

avatar
a*n
24
那我搞错了,不过asio 貌似没有封装跨平台的async file io

【在 l******e 的大作中提到】
: windows支持呀
: overlapped i/o
: 不过无所谓了,asio都wrap起来了

avatar
a*n
25
http://www.cnblogs.com/slime/archive/2010/06/26/1765607.html
以前写的一个同步的logger, 异步的不能给你, 呵呵

【在 m****g 的大作中提到】
: 大侠,你们说的我都不懂哇!这面试我可能搞不定了!说真的,我连logger是干吗使的
: 都不知道哇!
: 能不能给我发个简单的logger的code让我参考参考?或者介绍logger的文章也行。多谢
: 了!

avatar
a*n
27
哦对, 直接看boost log 最好, 那个肯定比我写的好,呵呵
史公公应该不是我把, 我没这个名字。。。

【在 l******e 的大作中提到】
: 分特,让人直接看boost.log不就结了
: ps,原来你是史版的史公公?

avatar
l*e
28
你这个blog不是slime么

【在 a****n 的大作中提到】
: 哦对, 直接看boost log 最好, 那个肯定比我写的好,呵呵
: 史公公应该不是我把, 我没这个名字。。。

avatar
a*n
29
恩,blog是我的。。不过我不是史版的史公公
avatar
m*g
30


【在 a****n 的大作中提到】
: 恩,blog是我的。。不过我不是史版的史公公
avatar
m*g
31
多谢楼上几位大侠,在下立马就去研读。。。

【在 m****g 的大作中提到】

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。