相关疑难解决方法(0)

错误处理/记录策略

你们可以分享你对asp.net 3.5基于web的应用程序的错误处理/日志记录策略的了解吗?

c# asp.net

7
推荐指数
2
解决办法
4888
查看次数

您在软件中编写日志以处理可能的大量日志消息的策略是什么?

感谢您的宝贵时间,感谢抱歉!

我的工作环境

Linux C/C++(但我是Linux平台的新手)

我的问题简单

在我正在处理的软件中,我们将大量日志消息写入本地文件,这使得文件大小快速增长并最终耗尽所有磁盘空间(哎哟!).我们希望这些日志消息用于故障排除,特别是在软件发布到客户站点之后.我认为占用客户计算机的所有磁盘空间当然是不可接受的,但我不知道如何处理这个问题.所以我想知道是否有人在这里有任何好主意.更多信息如下.

我不是在问什么

1).我不是要求推荐的C++日志库.我们自己写了一个记录器.

2).我不是在询问应该在日志消息中写入什么细节(例如时间戳,线程ID,函数名称等).一些建议可以在这里找到.

我在我的软件中做了什么

我将日志消息分为3类:

  • SYSTEM:仅记录我软件中的重要步骤.示例:外部调用我的软件的接口方法.背后的想法是从这些消息我们可以看到软件中通常发生的事情.有没有很多这样的消息.

  • 错误:仅记录错误情况,例如找不到ID.通常没有太多这样的消息.

  • 信息:记录我的软件中运行的详细步骤.例如,当调用接口方法时,如上所述编写SYSTEM日志消息,并且将使用INFO消息记录接口方法内的内部模块中整个调用例程.背后的想法是这些消息可以帮助我们识别详细的调用堆栈以进行故障排除或调试.这是耗尽磁盘空间问题根源:当软件正常运行时,总会有SO MANY INFO消息.

我的尝试和想法

1).我试图不记录任何INFO日志消息. 这解决了磁盘空间问题,但我也失去了很多调试信息. 想一想:我的客户在不同的城市,经常去那里很贵.此外,他们使用的是一个100%无法从外部访问的内部网.因此:我们不能总是在遇到问题时立即派遣工程师到现场; 我们无法启动远程调试会话.因此,我认为日志文件是我们可以用来找出问题根源的唯一方法.

2).也许我可以在运行时使日志记录策略可配置(目前它在软件运行之前),即:在正常运行时,软件只记录SYSTEM和ERROR日志; 当出现问题时,有人可以更改日志记录配置,以便记录INFO消息.但仍然是:谁可以在运行时更改配置?也许我们应该教育软件管理员?

3).也许我总是可以将INFO消息登录,但是会定期将日志文件打包到压缩包中? 嗯...

最后...

您在项目/工作中的经历是什么?欢迎任何想法/想法/意见!

编辑

感谢您的所有努力!以下是所有回复中关键点的摘要(我会试一试):

1).不要使用大型日志文件.使用相对较小的.

2).定期处理最老的(删除它们或压缩并将它们放到更大的存储空间中).

3).实现运行时可配置的日志记录策略.

c++ linux logging

7
推荐指数
2
解决办法
2080
查看次数

代码执行期间报告信息:最佳设计

在设计正确的执行报告时,我总是怀疑.

假设你有以下(愚蠢,简单)的情况.我将使用python.

def doStuff():
    doStep1()
    doStep2()
    doStep3()
Run Code Online (Sandbox Code Playgroud)

现在,假设您想要报告各种步骤,如果出现问题等等.不是真正的调试:只是应用程序的信息行为.

第一个简单的解决方案是打印

def doStuff():
    print "starting doing stuff"
    print "I am starting to do step 1"
    doStep1()
    print "I did step 1"
    print "I am starting to do step 2"
    doStep2()
    print "I did step 2"
    print "I am starting to do step 3"
    doStep3()
    print "I did step 3"
Run Code Online (Sandbox Code Playgroud)

总的来说,这非常糟糕.假设这段代码最终会进入库中.我不希望我的图书馆打印出来的东西.我希望它能默默地完成这项工作.尽管如此,有时我想提供信息,不仅在调试情况下,而且还要让用户知道事情正在完成的过程中.打印也很糟糕,因为您无法控制邮件的处理.它只是去stdout,除了重定向之外,你无能为力.

另一种解决方案是拥有一个用于记录的模块.

def doStuff():
    Logging.log("starting doing stuff")
    Logging.log("I am starting to do step 1")
    doStep1()
    Logging.log("I did step 1")
    Logging.log("I am starting to …
Run Code Online (Sandbox Code Playgroud)

debugging logging

6
推荐指数
1
解决办法
506
查看次数

标签 统计

logging ×2

asp.net ×1

c# ×1

c++ ×1

debugging ×1

linux ×1