【问题标题】:java game room logging to a separate log file using log4j is a good idea?使用 log4j 将 java 游戏室记录到单独的日志文件是个好主意吗?
【发布时间】:2012-09-27 02:57:23
【问题描述】:

我正在开发一个基于别人的顶层框架netty和spring的游戏服务器。

我想知道使用 log4j 为每个游戏房间生成单独的文件是否是一种好方法。由于许多游戏室服务器必须保持打开大量日志文件。另一方面,如果只有一个日志文件,那将是一团糟,在分析问题时需要解析和过滤。

当我需要知道如何实现它时,如果许多日志文件仍然是一个好方法。我看过这个问题configure log4j to log to custom file at runtime,但第一个答案并不清楚,如何最小化每次尝试写入单独的日志文件所需的代码行。我已经通过放入配置文件尝试了第二个答案

log4j.appender.logfile.File=${logfile.name}

但是框架有

PropertyConfigurator.configure(System.getProperty("log4j.configuration"));

如果在开始时未指定日志文件,则会失败。

欢迎任何想法和cmets!谢谢

UPD:这个链接对我来说似乎也很有帮助。 Log4j logging to separate files 但是:这是个好主意吗?如何以最少的编码动态切换输出日志文件。

【问题讨论】:

    标签: java spring logging log4j netty


    【解决方案1】:

    真的,归根结底,为游戏室拥有多个日志文件将是矫枉过正。文件 I/O 会对性能产生影响,即使可以忽略不计。此外,作为程序员,我们可以使用许多工具来解析和过滤信息,因此事后这样做似乎更合理。

    例如,只要每个游戏室在登录时都匹配特定模式,您就可以轻松地使用 grep 和 Linux > 运算符解析游戏室 X 的所有数据并写入另一个文件以供您分析它分开。让您的生产服务器执行此操作,而您可能会也可能不会查看日志,这并不是对资源的最佳利用。

    例如,运行此命令可以快速获取我需要的有关游戏室 X 的所有信息:

    grep "game room x" mainLog.log > outputToAnalyze.log
    

    【讨论】:

      【解决方案2】:

      我同意 jmort253,但如果您真的想要每个房间有一个文件,请为每个房间创建一个附加程序:

      如果房间是静态的,只需在 log4j 配置文件中定义附加程序,如果不是在运行时进行:

      这正是here 接受的答案所说的:

        SimpleLayout layout = new SimpleLayout();    
        FileAppender appender = new FileAppender(layout,"<room_file_name>",false);    
        logger.addAppender(appender);
      

      基本上,您不需要配置文件,那里的代码替换它并使用其文件名动态定义附加程序,所以我建议:

      1. 编写一个方法来创建接收文件名作为参数的动态附加程序(并可能返回记录器或接收记录器并将附加程序添加到其中)
      2. 在创建房间的地方调用该方法
      3. 将带有新附加程序的记录器分配给每个房间并使用它

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-12
        • 1970-01-01
        • 1970-01-01
        • 2011-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-05
        相关资源
        最近更新 更多