줄리아에서 xterm에 로그 보내기
9751 단어 Julia
의 목적
다중 프로세스의 코드를 디버깅하기 위해서 로그를 각각 다른 곳에 두지 않으면 매우 번거롭다.개별 서류에 적고 다른 창문
tail -f
으로 닦으면 되지만 매번 하기가 번거롭다.그래서 나는 자동으로 창을 열고 로그를 쓰고 싶다.메서드
할 일은 매우 간단하다. 로그를 임시 파일에 쓴 다음
xterm
에서 이 파일을 진행한다. tail -f
Mac 사용자이기 때문에 테미널을 사용할 수 있다면 더 좋겠지만, 제어하는 방법을 몰라서 xterm을 사용합니다.맥에서 xterm을 사용하려면 Xquatz가 필요하지만 brew로 간단하게 들어갈 수 있습니다.이루어지다
AbstractLogger
의 하위 유형을 생성합니다.이때 상속ConsoleLogger
.상속은 이 보도에 적힌 MacroTools
의@forward
를 사용했다.여기에 문제가 하나 있다.
ConsoleLogger
쓴 후에 플래시가 없는stream.보통 stderr
에서 시작하는데 stderr
자동 플래시 때문에 문제가 없지만 자동 플래시 흐름이 없으면 실시간으로 쓸 수 없기 때문에 곤란합니다.따라서 handle_message
방법만 교차된다.그럼에도 불구하고 ConsoleLogger
의handle_message
를 호출한 후에stream이 유행하지 않을 뿐이다.module XtermLogging
export XtermLogger
import MacroTools
import Logging
import Dates
function timed_metafmt(level, _module, group, id, file, line)
color, prefix, suffix =
Logging.default_metafmt(level, _module, group, id, file, line)
timestamp = Dates.now()
prefix2 = "$timestamp : $prefix"
return color, prefix2, suffix
end
struct XtermLogger <: Base.CoreLogging.AbstractLogger
sl::Logging.ConsoleLogger
filename
proc::Base.Process
end
function XtermLogger(title, level=Logging.Info;
display=":0",
meta_formatter=timed_metafmt, show_limited=true,
right_justify=0)
tmpfile, stream = Base.Filesystem.mktemp()
xterm = "/usr/local/bin/xterm"
proc = open(`$xterm -display $display -title $title -e tail -f $tmpfile`)
XtermLogger(Logging.ConsoleLogger(stream, level;
meta_formatter=meta_formatter,
show_limited=show_limited,
right_justify=right_justify),
tmpfile, proc)
end
@MacroTools.forward XtermLogger.sl Base.CoreLogging.shouldlog,
Base.CoreLogging.min_enabled_level,
Base.CoreLogging.catch_exceptions
function Base.CoreLogging.handle_message(logger::XtermLogger, level, message, _module, group, id,
filepath, line; maxlog=nothing, kwargs...)
Base.CoreLogging.handle_message(logger.sl, level, message, _module, group, id, filepath, line; maxlog, kwargs...)
flush(logger.sl.stream)
end
end
기본 표시 시간timed_metafmt
을 사용합니다.이 일대의 상세한 상황은 이 보도에 쓰여 있다.사용법
XtermLogging
와 Logging
는 using
를 통해 가져옵니다.push!(LOAD_PATH, pwd())
using XtermLogging
using Logging
제작XtermLogger
.매개 변수는 창 제목입니다.xlogger = XtermLogger("test0")
만들어진 Logger는 일반 Logger로 사용할 수 있습니다.with_logger(xlogger) do
@error("test $i")
end
Reference
이 문제에 관하여(줄리아에서 xterm에 로그 보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hidemotoNakada/items/8aaaf6f02771bdd01fea텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)