AS3中强大的日志记录工具:as_logger Logger类介绍

需积分: 10 0 下载量 105 浏览量 更新于2024-12-27 收藏 23KB ZIP 举报
资源摘要信息:"as_logger:AS3 Logger类" ActionScript是Adobe公司推出的一种编程语言,主要用于Flash平台上的开发工作。AS3(ActionScript 3.0)是ActionScript的最新版本,它引入了ECMAScript的规范,并增强了对面向对象编程的支持。在此背景下,as_logger库的Logger类为AS3开发者提供了一个灵活且强大的日志记录功能。 Logger类的核心功能是提供了一个日志记录接口,开发者可以通过调用Logger类中的log方法将日志信息输出到不同的目标位置。以下是Logger类的主要特点和知识点: 1. 输出日志信息 Logger类允许将日志信息输出到浏览器的跟踪日志以及console.log。如果浏览器不支持console.log,则会使用window.status作为备选输出目标。这种机制允许开发者在各种环境下都能查看到日志信息,提高了日志的可用性和兼容性。 2. 对象转字符串格式输出 当传递给Logger.log方法的对象时,该对象会被尽可能地扩展并转换为字符串格式进行输出。这使得开发者可以轻松地记录复杂对象的当前状态,而无需担心类型转换的复杂性。 3. 输出方法名称和类名称 Logger.log方法在输出日志信息时,会自动附加调用log方法的方法名称和类名称。这为日志的上下文提供了额外的信息,使得日志信息更加详细,有利于问题的追踪和调试。 4. 条件编译支持 如果源文件是以-compile.debug参数编译的,Logger类将能够输出源文件名和代码行数。这为调试过程提供了极大的便利,因为开发者可以准确地知道日志信息是在源代码的哪个部分产生的。 根据ASDoc(ActionScript文档)的描述,使用Logger类非常简单,只需要导入Logger类并调用log方法即可。例如: ```actionscript import com.github.sugamasao.as_logger.Logger; Logger.log({ "hoge": this, "fuga": 1 }); Logger.log("MovieClip", new MovieClip()); ``` 上述代码中,第一个例子输出了一个对象字面量的日志信息,第二个例子则是输出了"MovieClip"和一个MovieClip实例的日志信息。 从文件名称列表中可知,该Logger类的源代码文件可能位于一个名为"as_logger-master"的文件夹中。这表明Logger类可能是从一个开源项目中获取的,开发者可以通过检查该目录下的代码来了解Logger类的实现细节以及进一步的使用方法。 总结来说,as_logger库中的Logger类是AS3开发中非常实用的一个日志工具,它具有高度的灵活性和兼容性,支持多种输出目标,并能够提供丰富的调试信息。开发者可以利用Logger类方便地在开发和调试阶段捕获应用状态,从而快速定位和解决代码中出现的问题。

const ServerParam & SP = ServerParam::i(); const int self_min = wm.interceptTable()->selfReachCycle(); const int mate_min = wm.interceptTable()->teammateReachCycle(); int opp_min = wm.interceptTable()->opponentReachCycle(); const PlayerObject * opp_fastest = wm.interceptTable()->fastestOpponent(); if ( opp_fastest && opp_fastest->goalie() && wm.gameMode().isPenaltyKickMode() && opp_fastest->pos().dist( wm.ball().pos() ) >= 3.0 ) // MAGIC NUMBER { M_tackle_situation = false; M_opponent_ball = false; dlog.addText( Logger::TEAM, __FILE__":(update) penalty shootouts. not a tackle situation" ); return; } if ( opp_fastest && wm.gameMode().isPenaltyKickMode() && ! opp_fastest->goalie() ) { const AbstractPlayerObject * opponent_goalie = wm.getTheirGoalie(); if ( opponent_goalie ) { /* //yz del std::map< const AbstractPlayerObject*, int >::const_iterator player_map_it = wm.interceptTable()->playerMap().find( opponent_goalie ); if ( player_map_it != wm.interceptTable()->playerMap().end() ) { // considering only opponent goalie in penalty-kick mode opp_min = player_map_it->second; dlog.addText( Logger::TEAM, __FILE__":(update) replaced min_opp with goalie's reach cycle (%d).", opp_min ); } else { opp_min = 1000000; // practically canceling the fastest non-goalie opponent player dlog.addText( Logger::TEAM, __FILE__":%d: (update) set opp_min as 1000000 so as not to consider the fastest opponent.", __LINE__ ); } */ } else { opp_min = 1000000; // practically canceling the fastest non-goalie opponent player dlog.addText( Logger::TEAM, __FILE__":%d (update) set opp_min as 1000000 so as not to consider the fastest opponent.", __LINE__); } }

2023-07-25 上传