在遊戲服務器上線以後,會記錄不少統計日誌,這些日誌是第三方須要的數據,經過linux 的 rsync方式同步給第三方。日誌規則 每十分鐘會建立一個日誌文件。而後後臺有一個rsync進程,每隔十分鐘向第三方服務器同步一第二天志文件。測試的時候沒有問題,可是上線以後,發如今整點的時候,好比3:30,3:50的時候,日誌文件只有前幾秒的數據。通過分析,在這個時候發生了rsync同步的操做,同步操做以後,日誌就再也寫不進去了。html
解決方法是,把產生日誌的時間和同步的時間錯開,好比九分鐘產生一個日誌文件,十分鐘同步一次。並且把當前寫入的日誌文件不要同步,只同步已經再也不寫的日誌文件。logback的配置以下:linux
<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是自定義 的一個策略類,詳細見:http://www.javashuo.com/article/p-nkymolqa-cm.html json
這樣配置,當前寫入的日誌文件是stat.log,而再也不寫入的文件是stat_時間.json的文件。同步的時候只同步.json的文件便可。服務器