在游戲服務器上線之后,會記錄很多統計日志,這些日志是第三方需要的數據,通過linux 的 rsync方式同步給第三方。日志規則 每十分鍾會創建一個日志文件。然后后台有一個rsync進程,每隔十分鍾向第三方服務器同步一次日志文件。測試的時候沒有問題,但是上線之后,發現在整點的時候,比如3:30,3:50的時候,日志文件只有前幾秒的數據。經過分析,在這個時候發生了rsync同步的操作,同步操作之后,日志就再也寫不進去了。
解決方法是,把產生日志的時間和同步的時間錯開,比如九分鍾產生一個日志文件,十分鍾同步一次。而且把當前寫入的日志文件不要同步,只同步已經不再寫的日志文件。logback的配置如下:
<appender name="Stat_log" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.home}/logs/stat/stat.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- daily rollover --> <fileNamePattern>${log.home}/logs/stat/stat_%d{yyyyMMddHHmm}.json </fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="MyTimeBasedFileNamingAndTriggeringPolicy"> <multiple>10</multiple> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>72000</maxHistory> </rollingPolicy> <encoder> <pattern> %msg%n </pattern> </encoder> </appender>
配置中MyTimeBasedFileNamingAndTriggeringPolicy是自定義 的一個策略類,詳細見:https://www.cnblogs.com/wgslucky/p/10071791.html
這樣配置,當前寫入的日志文件是stat.log,而不再寫入的文件是stat_時間.json的文件。同步的時候只同步.json的文件即可。