`
sean
  • 浏览: 16586 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

在pseudo-model中使用logger

阅读更多
用rubyonrails开发已有三个月左右, 还没有在model中使用过logger.今天碰巧需要在一个pseudo-model(不继承ActiveRecord::Base, 即不对应数据库中的表)中使用logger, 突然不知道应该从哪里获取logger.如果在Controller和Model的方法中, 可以直接引用logger, 例如:
ruby 代码
 
  1. # use logger in controller  
  2. class ProductsController < ApplicationController  
  3.     def index  
  4.       logger.info 'index action....'  
  5.     end   
  6.   
  7. end   
  8.   
  9. # use logger in model  
  10. class Product < ActiveRecord::Base  
  11.     def products_on_sale  
  12.         logger.info "products_on_sale"  
  13.     end  
  14. end   
看了一下wiki.rubyonrails.org/rails/pages/HowtoConfigureLogging ,基本明白了rails中logger工作原理:
logger的配置是由environment.rb初始化完成的,主要有两个步骤,
首先为整个rails环境定义了一个默认的全局logger:
ruby 代码
 
  1. begin  
  2.   RAILS_DEFAULT_LOGGER = Logger.new("#{RAILS_ROOT}/log/#{RAILS_ENV}.log")  
  3. rescue StandardError  
  4.   RAILS_DEFAULT_LOGGER = Logger.new(STDERR)  
  5.   RAILS_DEFAULT_LOGGER.level = Logger::WARN  
  6.   RAILS_DEFAULT_LOGGER.warn(  
  7.     "Rails Error: Unable to access log file. Please ensure that log/#{RAILS_ENV}.log exists and is chmod 0666. " +  
  8.     "The log level has been raised to WARN and the output directed to STDERR until the problem is fixed."   
  9.   )  
  10. end  

接着将这个logger分别分配给rails中的主要的components: ActiveRecord, ActionController, ActionMailer
ruby 代码
  1. [ActiveRecord, ActionController, ActionMailer].each { |mod| mod::Base.logger ||= RAILS_DEFAULT_LOGGER }  

根据以上原理, 我们可以得出结论:

  1. 在ActiveRecord/ActionController/ActionMailer中我们可以直接引用logger(如上面代码所示)
  2. 在除这些rails主要的component之外的类中,可以直接引用全局常量:RAILS_DEFAULT_LOGGER,例如:
ruby 代码
  1. # this is a pseudo-model class, so it does not associate with any specific rails class
  2. class CartItem  
  3.   def price  
  4.      RAILS_DEFAULT_LOGGER.info 'in price method'  
  5.   end  
  6. end  

分享到:
评论

相关推荐

    前端开源库-pseudo-elements

    标题“前端开源库-pseudo-elements”指向的是一个专门收集和整理CSS伪元素相关资源的开源项目,可能包含了一个详尽的伪元素列表,以及如何在实际项目中使用它们的示例和最佳实践。 描述中的“所有CSS伪元素的列表”...

    Python库 | pseudo-python-0.2.12.tar.gz

    在Python生态系统中,有许多开源库可供选择,其中之一就是"pseudo-python"。这个库的版本为0.2.12,它被打包成一个名为"pseudo-python-0.2.12.tar.gz"的压缩文件。该文件格式通常是Linux和Unix系统中常见的tarball,...

    前端开源库-has-pseudo-class

    "has-pseudo-class"库的使用方法通常是将其引入到项目中,然后调用其提供的API,传入一个CSS选择器字符串,它会返回一个布尔值,表明该选择器是否含有伪类。这在某些场景下非常有用,比如: 1. **优化CSS性能**:...

    前端开源库-pseudo-elements.zip

    为了更好地利用这个压缩包,你可以打开其中的文件,查看示例代码或阅读文档,理解如何在实际项目中使用这些`pseudo-elements`。同时,了解它们与CSS选择器、盒模型、布局和其他前端技术的配合,将有助于提升你的前端...

    前端开源库-has-pseudo-element

    通过使用has-pseudo-element库,你可以轻松地检查用户提供的样式字符串,如果其中包含了伪元素,就可以提前给出警告或自动移除。 此外,这个库的源码也是学习和理解CSS选择器和伪元素工作原理的好材料。开发者可以...

    SalFBNet Learning Pseudo-Saliency Distribution via Feedback Con

    实验结果表明,尽管参数较少,SalFBNet在公共显著性检测基准测试中取得了竞争力的结果,这证明了提出的反馈模型和Pseudo-Saliency数据的有效性。 关键词:反馈网络、人类注视、伪显著性、选择性固定和非固定错误 ...

    Pseudo-Mask Matters in Weakly-Supervised Semantic.pdf

    【伪掩模在弱监督语义分割中的重要性】\n\n在计算机视觉领域,语义分割是一项基础任务,它需要耗时的像素级手动注释。为了减轻标注负担,弱监督语义分割方法应运而生,这些方法利用了如涂鸦注释、边界框、点或图像级...

    Hadoop pseudo-distributed environment (1).mp4

    Hadoop分布式环境搭建教程一

    # End-to-end Pseudo-LiDAR for Image-Based 3D Object Detection Th

    本篇文章将深入探讨"End-to-end Pseudo-LiDAR for Image-Based 3D Object Detection"这一主题,以及如何通过伪LiDAR技术实现视觉与LiDAR的高效融合。 首先,我们要理解什么是伪LiDAR。传统的LiDAR系统能够提供高...

    tailwindcss-pseudo-element-plugin:一个为Tailwind CSS提供之前和之后的变体以及伪内容{value}实用工具类的插件

    @ shimyshack / tailwindcss-pseudo-element-plugin 提供一个插件before和after的变体以及pseudo-content-{value}实用工具类,顺风CSS。 安装 从npm安装插件: # Using npm npm install @shimyshack/tailwindcss-...

    前端开源库-pseudo-classes

    前端开源库-pseudo-classes伪类,获取所有CSS伪类的列表。

    tailwindcss-pseudo-elements:TailwindCSS插件,添加伪元素的变体

    tailwindcss-pseudo-elements TailwindCSS插件,添加伪元素的变体( ::before , ::after , ::first-letter等)。 用法 安装 NPM npm install tailwindcss-pseudo-elements --save-dev 纱 yarn add tailwindcss-...

    pseudo-LiDAR_e2e:伪LiDAR_e2e

    作者: , , , , , , , 和 引文@inproceedings{qian2020end, title={End-to-End Pseudo-LiDAR for Image-Based 3D Object Detection}, author={Qian, Rui and Garg, Divyansh and Wang, Yan and You, Yurong ...

    MATLAB实现伪距单点定位_MATLAB_to_achieve_pseudo-distance_s_-Pseudo--

    在MATLAB环境中实现伪距单点定位涉及到多个步骤和关键技术。首先,需要收集GPS信号数据,包括卫星的星历信息、时间信息和各个卫星的伪距值。接下来,需要对这些数据进行初步处理,包括数据同步、去除大气延迟等误差...

    Color_pseudo-random_array_in_the_application_of_th_三维 结构光_伪随机_结构

    是采用伪随机编码结构光照明主动视觉技术,用编码结构光照明被测场景,实现动态三维场景的重建

    Python库 | pseudo-0.2.4-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:pseudo-0.2.4-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    stylelint-selector-pseudo-class-lvhfa:链接选择器中LVHFA顺序的Stylelint规则

    npm install stylelint-selector-pseudo-class-lvhfa --save-dev 用法 将此配置添加到您的.stylelintrc : { " plugins " : [ " stylelint-selector-pseudo-class-lvhfa " ], " rules " : [ " plugin/...

    前端开源库-pseudo-classes.zip

    在这个名为“前端开源库-pseudo-classes.zip”的压缩包中,很可能是包含了关于如何在各种开源前端库中使用和实现伪类的相关示例或代码库。虽然没有具体的标签提供更多信息,但我们可以深入探讨一下伪类在前端开发中...

    Pseudo-LiDAR from Visual Depth Estimation.pdf

    标题:“Pseudo-LiDAR from Visual Depth Estimation.pdf” 揭示了在自动驾驶领域中,利用视觉深度估计得到的伪激光雷达数据(Pseudo-LiDAR)来提高3D目标检测性能的研究。此研究由康奈尔大学的研究团队完成,该研究...

Global site tag (gtag.js) - Google Analytics