#flex3 #flash
#flex3 #flash
Вопрос:
Интерфейс моего приложения разработан в Flex 3. Для ведения журнала мы иногда используем трассировки и Logger, но у нас нет определенного способа хранить журналы в локальном файле на компьютере пользователя.
На самом деле, чему я научился у Adobe livedocs, так это тому, что flashplayer сам управляет всеми входами в систему flashlog.txt файл.
Есть ли какой-либо другой способ, которым я могу сохранить копию журналов? flashlog.txt очищается каждый раз, когда мы выполняем «Выход».
Комментарии:
1. Опытные люди, пожалуйста, помогите мне решить эту проблему.
Ответ №1:
Вы не указали, является ли ваше приложение настольным приложением или браузерным.
В случае настольного приложения вы можете написать новый класс,
import mx.core.mx_internal;
use namespace mx_internal;
public class LoggingFileTarget extends LineFormattedTarget {
private const DEFAULT_LOG_PATH:String = "C:/mylogfile.txt";
private var log:File;
public function LoggingFileTarget(logFile:File = null) {
if(logFile != null) {
log = logFile;
} else {
log = new File(DEFAULT_LOG_PATH);
}
}
public function get logURI():String {
return log.url;
}
mx_internal override function internalLog(message:String):void {
write(message);
}
private function write(msg:String):void {
var fs:FileStream = new FileStream();
try {
fs.open(log, FileMode.APPEND);
fs.writeUTFBytes(msg "n");
fs.close();
} catch(e:Error) {
trace("FATAL:: Unable to write to log file.");
}
}
public function clear():void {
var fs:FileStream = new FileStream();
fs.open(log, FileMode.WRITE);
fs.writeUTFBytes("");
fs.close();
}
}
В случае приложения на основе браузера вы можете продолжать запись либо в строку в памяти, либо в локальный общий объект. Используя общий локальный объект, продолжайте добавлять к журналам, а затем выполняйте сопоставление с помощью веб-вызова.
Комментарии:
1. Означает ли это, что я должен сохранять строку в общем объекте, а затем продолжать отправлять ее на сервер через определенный интервал времени и очищать ее, поскольку общий объект также имеет ограничение по памяти?
2. Для приложения flex — да! Я видел, что именно такой подход используют многие приложения flex.
3. чтобы
mx_internal override function internalLog()
работать, я должен изменить его наoverride mx_internal function internalLog
и добавитьimport mx.core.mx_internal; use namespace mx_internal;
в заголовок класса4. Спасибо @HoangHuynh — я обновил код, чтобы включить то же самое.