2017-03-16 83 views
0

我正在构建我的项目中的日志系统,这是一个基于Sinatra的Ruby Web应用程序,类似于Rails。Web项目中的单个或多个记录器实例

我在Github上引用了很多日志框架,比如sinatra/logger,日志记录,语义记录器,我也看到了Rails的一些用法。

许多日志框架写道,我们应该为每个类创建多个日志实例,在调试时通过每个类来单独控制日志级别,我不知道它有什么好处。我认为我们可以通过从配置文件中读取日志级别来更改日志级别的动态。

当我开发android项目时,我们使用一个单一的日志实例,并且所有地方调用像“MyLog.info”这样的静态方法,这个解决方案可以让我在一个地方控制和格式化日志,我认为这是在项目中只创建一个日志实例的好处。

另外,我看到了Rails的用法,它也只有一个名为Rails.logger的实例,无论我在哪里想写日志,我都会调用Rails.logger.info“xxxxx”, 这很容易。

如果我为每个类编写多个记录器,我应该为日志编写很多重复代码,我对此持怀疑态度,有谁能告诉我哪一个更好或我该如何选择。

+0

你问在Sinatra每班如何启用日志记录? – nateleavitt

+0

不,我在问我们什么时候创建Web项目,我们有两种方法来创建日志:1.为每个类创建多个日志实例2.为所有类创建一个实例。哪种方式更好? – Jonyzz

回答

0

不能确定你问的这个语句我困惑什么:

另外,我看到了Rails的使用,它也有只有一个名为Rails.logger例如,无论地方我想写日志,我调用Rails.logger.info“xxxxx”,这很容易。

class AppName < Sinatra::Application 

    configure do 
    enable :logging 
    end 

    get '/' do 
    logger.info "Hello world.. This is AppName!" 
    end 
end 

编辑基于以下注释:

这真的取决于你的应用程序的结构。然而,我之前完成的一种方法是要求所有其他类位于主AppName类的顶部。像这样:Dir["./other-class-dir/*.rb"].each {|file| require file}将工作。其他类现在可以访问记录器实例。

+0

是的,如果你是在AppName类中,它是Sinatra :: Application的子类,那么你有request.logger,它被请求传递。所以logger.info是AppName的实例。但是在没有父类的其他普通类中,没有记录器实例。 – Jonyzz

+0

根据您的评论更新了答案。这取决于您的应用程序的结构。但这是完成它的一种方法。 – nateleavitt

+0

感谢您的回答,所以在哪种情况下,我们应该只在日志实例上使用,以及何时应该为每个类创建多个日志实例? – Jonyzz