Unity控制台日誌開啟重定向

2021-08-01 08:50:52 字數 2117 閱讀 8316

在unity中,一般都會自己手動封裝一次日誌,或者自定義一些日誌輸出,比如lua**的日誌輸出,雙擊開啟時我們希望重新定向的其他的檔案,而不是封裝**裡,這裡要用到的主要是[onopenassetattribute(0)],每次檔案開啟時,先執行自定義的**,**裡自己重定向檔案和行數,然後再選擇開啟。對於unity控制台,我們還要用反射取得對應的日誌內容。

直接上**,使用時直接修改logcsname變數,將自己封裝的日誌類寫入即可。

using system.reflection;

using unityeditor;

using system;

using unityeditor.callbacks;

public

class logredirect

fieldinfo listviewfieldinfo = consolewindowtype.getfield("m_listview", bindingflags.instance | bindingflags.nonpublic);

loglistview = listviewfieldinfo.getvalue(consolewindow);

loglistviewcurrentrow = listviewfieldinfo.fieldtype.getfield("row", bindingflags.instance | bindingflags.public);

type logentriestype = unityeditorassembly.gettype("unityeditorinternal.logentries");

logentriesgetentry = logentriestype.getmethod("getentryinternal", bindingflags.static | bindingflags.public);

type logentrytype = unityeditorassembly.gettype("unityeditorinternal.logentry");

logentry = activator.createinstance(logentrytype);

logentrycondition = logentrytype.getfield("condition", bindingflags.instance | bindingflags.public);

}return

true;

}private

static

string

getlistviewrowcount(ref

int line)

);string condition = logentrycondition.getvalue(logentry) as

string;

int index = condition.indexof(logcsname);

if(index < 0)//不是經過我們封裝的日誌

int lineindex = condition.indexof(")", index);

condition = condition.substring(lineindex + 2);

index = condition.indexof(".cs:");

if (index >= 0)

return

null;

}[onopenassetattribute(0)]

public

static

bool

onopenasset(int instanceid, int line)

if (openinstanceid == instanceid && openline == line)

openinstanceid = instanceid;

openline = line;

if (!getconsolewindowlistview())

string filename = getlistviewrowcount(ref line);

if (filename == null)

if (filename.endswith(".cs"))}}

return

false;

}}

控制台重定向stdout stderr

通常,乙個控制台 命令提示符 應用程式或命令的輸出將傳送到兩個單獨的流.常規的輸出傳送到標準出 stdout 並將錯誤訊息傳送到標準錯誤 stderr 當你重定向控制台輸出使用 符號,只重定向標準輸出.要重定向stderr,必須指定 2 的重定向符號.這將選擇第二個輸出流stderr。kill hu...

控制台輸出重定向到Memo

函式runcmd void fastcall tform1 runcmd ansistring cmdline,tstrings result else createpipe hreadpipe,hwritepipe,null,1024 screen cursor crhourglass try d...

控制台輸入輸出重定向

一般來講gui程式不能使用stdin和stdout,但是有時有些特殊需要,希望gui程式也有控制台,如 乙個程式,既可以以gui方式執行,又可以如果使用者在控制台裡打程式名的話,就以控制台程式的方式執行。通過allocconsole 和 attachconsole 這兩個win api就能實現上面的...