- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在使用 ruby 标准记录器,我想要每天轮换一次,所以在我的代码中我有:
Logger.new("#{$ROOT_PATH}/log/errors.log", 'daily')
它运行完美,但它创建了两个文件 errors.log.20130217
和 errors.log.20130217.1
。
如何强制它每天只创建一个文件?
最佳答案
您的代码对于长时间运行的应用程序是正确的。
发生的事情是您在给定的一天多次运行代码。
第一次运行时,Ruby 会创建一个日志文件“errors.log”。
当日期改变时,Ruby 将文件重命名为“errors.log.20130217”。
但不知何故你再次运行代码,也许你正在运行两个使用相似代码的应用程序(或进程,或工作人员,或线程),并且你的记录器看到文件名“errors.log.20130217”已经存在.
您的记录器不想破坏该文件,但仍需要将“errors.log”重命名为日期,因此记录器创建了一个不同的文件名“errors.log.20130217.1”
要解决此问题,只需运行一次您的代码。
如果您正在运行多个名为“foo”和“bar”的应用,则使用“foo-errors.log”和“bar-errors.log”等日志文件名。或者,如果您使用多个工作人员,请为每个工作人员提供自己的日志文件名(例如,通过使用工作人员的进程 ID、工作人员池数组索引,或者您跟踪工作人员的任何方式)。
如果您真的想使用 Ruby 记录器解决这个问题,您需要覆盖记录器#shift_log_period,这样它就不会选择“.1”后缀。您可以将 Logger 子类化并编写您磨损的#shift_log_period 来检测是否存在该日期的现有日志文件,如果存在,则使用它而不是重命名文件。
这是来自记录器的代码:
def shift_log_period(period_end)
postfix = period_end.strftime("%Y%m%d") # YYYYMMDD
age_file = "#{@filename}.#{postfix}"
if FileTest.exist?(age_file)
# try to avoid filename crash caused by Timestamp change.
idx = 0
# .99 can be overridden; avoid too much file search with 'loop do'
while idx < 100
idx += 1
age_file = "#{@filename}.#{postfix}.#{idx}"
break unless FileTest.exist?(age_file)
end
end
@dev.close rescue nil
File.rename("#{@filename}", age_file)
@dev = create_logfile(@filename)
return true
没有解决方案(据我所知)使用 Ruby 记录器及其内置旋转器来同时管理由多个应用程序(也称为工作程序、进程、线程)写入的日志。这是因为每个应用程序都有自己的日志文件句柄。
或者,使用任何好的日志轮转器工具,例如 Tin Man 用户在问题评论中建议的 logrotate:http://linuxcommand.org/man_pages/logrotate8.html
一般来说,logrotate 将是您最好的选择恕我直言。
关于ruby-on-rails - 使用 Ruby 标准 Logger 每天只创建一个日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14927418/
作为一个新人中的菜鸡,最近在看一个项目的代码其中有这么一段看得我很是费解 public class AssembleMsgService { private static Logger logger
我已更改 Gradle 构建脚本以使用 Spring 2.0.1 而不是 1.5.9。当我运行 gradle build 时,出现错误:找不到符号 Logger logger = Logger.get
这是我的示例代码: public class Logs { private static Logs logHandler; public static Logs handler() {
我目前正在使用 Java 日志记录。我有一个记录器 cwh.A 和 cwh.B。是否可以通过 Java 从记录器 cwh 获取这些记录器,而不知道它们的名称? 最佳答案 可以通过日志管理器获取所有记录
在我的应用程序中,有一次我将 java.util.logging 的根 Logger 及其所有处理程序设置为 Level.FINEST,如下所示: Logger.getLogger("").setLe
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 7 年前。 Improv
我刚刚将 Java 插件升级到 1.7.0_25,这导致我几年前编写的一个小程序出现 fatal error (此后一直在维护)。 在小程序的 init() 方法的早期,我调用了 logger = L
logger.debug 和 logger.info 有什么区别? logger.debug什么时候打印? 最佳答案 我建议你看看这篇名为 "Short Introduction to log4j"
Fixed I tried reinstalling the plugin but that didn't work so i completely cleared my inteljii idea
我定义了一个记录器实例如下: private static final Logger LOGGER = Logger.getLogger(Main.class.getName()); 我有一个要记录的
我正在 Windows 下使用 Python 3.4.2。就我而言, import logging logger = logging.getLogger('logger') logger.setLev
我目前正在使用 C# 开发一个新的 Prism 项目,并想在我的 Bootstrapper 类中创建一个 NLog Logger。不幸的是,无论我做什么,它都拒绝构建,并告诉我... 'Logger.
我已经有几年没有使用 Log4J 了。我现在正在使用 org.jboss.logging 包在 JBoss 5 下开发一个应用程序。当我以前这样做时,将 logger.info() 消息包含在日志记录
ActiveRecord::Base.logger = Logger.new(STDOUT) 的 redis 等价物是什么?我想看看redis在做什么。 最佳答案 $redis.client.logg
我正在尝试使用 log4js 创建日志文件。完成所有配置后运行 Node app.js 时,我收到以下错误。 错误: TypeError: logger.setLevel is not a funct
我在一个拥有大约 50 多名开发人员的 IT 部门工作。它曾经有大约 100 多名开发人员,但由于经济衰退而被削减。 当我们的部门规模扩大时,我们雄心勃勃地努力建立一个特殊的架构小组。 这个小组决定做
我正在尝试找出跨多个模块使用 python 日志记录的最佳实践。我在这里看到:http://docs.python.org/2/howto/logging#logging-from-multiple-
我想将 Logger 注入(inject)到在 WildFly 10 上运行的 Maven 动态 Web 项目中的 bean 中。 我在 POM 中添加了依赖项。 WildFly 中提供了范围:
Java 9 引入了一个新的记录器,即 java.lang.System.Logger但我们总是有java.util.logging.Logger . 此记录器有什么新功能以及它有何改进? 最佳答案
我在 eclipse Mars 中配置了我的环境,但是 log4j 出现错误。我使用 spring 4 和 Maven 作为依赖管理器。部分代码: Eclipse 在这一行显示了一个错误,等于后的第二
我是一名优秀的程序员,十分优秀!