"베스트 로깅 클래스"라는 이름을 보고 관심을 끌었습니다. "최고"는 꽤 높은 레벨을 의미하기 때문에 궁금해서 확인해보고 싶었습니다. 자유롭게 배포되는 코드이기 때문에 자세한 내용은 언급하지 않겠습니다.
사용법 및 기능 :
- 숨겨진 키워드 아이디어는 좋습니다. 하지만 구현이 약합니다(아래 참조). 예를 들어 로깅을 사용하는 경우 너무 많은 메시지를 무음 처리합니다. AddSilentKeyword("start")를 사용하면 "시작" 또는 "시작"을 사용하여 로그를 필터링하는데, 이는 실제로 "키워드" 필터링에서 기대하는 것과는 다릅니다.
- 나머지는 매우 기본적인 기능입니다. 예를 들어, MQL의 핵심은 이벤트 기반이므로 로그 시스템에서는 반복되는 동일한 항목으로 로그가 넘쳐나는 것을 방지해야 하는데, 이는 OnTick(), OnTimer() 또는 OnChartEvent()에 Log()를 배치하면 쉽게 발생할 수 있습니다.
코딩 관점에서 보면 :
- 생성자와 Initialize()는 필수적인 부분에 대해 중복된 코드입니다.
- IsMessageSilent()는 m_silent_keywords[]의 각 단어에 대해 루프 검사를 사용하고 있으며 이 루프 내에서 '키워드'를 소문자로 변환합니다. 각 로그에서! 정말 비효율적입니다.
- 예를 들어 ""파일 이름"에 대한 로그를 사용자 정의하려는 경우와 같이 클래스를 사용자 정의 할 수 없습니다: " + __FILE__ + "\n"에 대한 로그를 사용자 정의하려면 코드를 수정하거나 클래스를 파생하고 Log() 메서드를 완전히 다시 작성해야 합니다. BIN 파일을 사용하는 등 사용자 정의 변경이 필요한 경우에도 동일한 문제가 발생합니다.
- MQL에 내장된 매크로를 재정의하는 Print() 매크로를 정의하는 경우입니다. 라이브러리 사용자가 로그에서 Print() 메서드를 사용하도록 강제하는 것은 매우 좋지 않은 생각입니다.
결론 :
귀하의 라이브러리는 올바른 기본 로깅 라이브러리입니다. 자체 라이브러리를 구축할 시간이 부족한 초보자나 코더가 사용하기 쉬운 로깅 기능을 제공하므로 편리할 수 있습니다.
결코 "최고"라는 수식어를 사용하는 것은 정당하지 않습니다. 기능은 정확하지만 기본적인 수준이며 구현은 아마추어 수준입니다.
결론 :
귀하의 라이브러리는 올바른 기본 로깅 라이브러리입니다. 자체 라이브러리를 구축할 시간이 부족한 초보자나 코더가 사용하기 쉬운 로깅 기능을 제공하므로 편리할 수 있습니다.
결코 "최고"라는 수식어를 사용하는 것은 정당하지 않습니다. 기능은 정확하지만 기본적인 수준이며 구현은 아마추어 수준입니다.
여러분의 기대에 비해 "최고"가 과장된 표현일 수 있다는 것을 알고 있습니다. 제 의도는 누구나 쉽게 수정하고 이해할 수 있는 코드를 공유하고자 하는 것이었습니다. 하지만 커뮤니티에 작은 기여를 했다면 좋겠고, 누구나 이 클래스를 사용할 수 있기를 바랍니다. 제안해 주신 대로 곧 코드 최적화를 진행하겠습니다.
피드백에 다시 한 번 감사드립니다.
2024.09.01 14:51:25.011 Logging (EURUSD,M30) File Name: Logging.mqh Function: string CDebugLogger::FormatLogEntry(LogLevel,string) 2024.09.01 14:51 Line: 276 [INFO] Script started successfully.
로그 호출이 발생하는 파일 이름, 함수 서명 및 줄 번호를 출력하려면 클래스 메서드 대신 MACROS를 사용해야 한다고 생각합니다.
결론 :
귀하의 라이브러리는 올바른 기본 로깅 라이브러리입니다. 자체 라이브러리를 구축할 시간이 부족한 초보자나 코더가 사용하기 쉬운 로깅 기능을 제공하므로 편리할 수 있습니다.
결코 "최고"라는 수식어를 사용하는 것은 정당하지 않습니다. 기능은 정확하지만 기본적인 수준이며 구현은 아마추어 수준입니다.
개별 단어를 음소거하는 기능에 대해서는 공백이나 다른 문자를 포함하여 '시작'이라고 쓰는 것이 효율적인 방법이라고 생각합니다. 궁극적으로 다른 언어와 마찬가지로 로그 구성은 Init 에서 수행하는 것이 합리적입니다. 앞서 언급했듯이 누구나 쉽게 적용할 수 있도록 단순해야 합니다. 추가해야 할 사항이 있으면 언제든지 적어주시면 시간이 되는 대로 코드를 추가해 보도록 하겠습니다. '인쇄' 기능에 대해서는 누구나 원하는 경우 자유롭게 의견을 제시할 수 있습니다.
추가적으로 변경할 사항이 있으면 언제든지 수정할 수 있습니다!
답장해 주셔서 감사합니다. 현재 로그를 인쇄하기 위해 MQL Plus 고급 디버깅 지원 라이브러리를 사용하고 있습니다. 그러나 때때로 많은 양의 반복 로그를 인쇄하는데 현재로서는 이 문제를 해결할 수 있는 방법이 없습니다. 제안하신 해결책은 한 가지 접근 방식이며 시간이되면 시도해 보겠습니다. 로깅 시스템을 신중하게 설계해야 합니다.
Logging Class for both MQL4 and MQL5:
CDebugLogger 클래스는 MQL4/5 환경에서 사용하도록 설계된 유연하고 포괄적인 로깅 유틸리티입니다. 개발자는 타임스탬프, 함수 서명, 파일 이름, 줄 번호 등을 로그 항목에 포함하는 옵션을 사용하여 다양한 중요도 수준(정보, 경고, 오류, 디버그)으로 메시지를 로깅할 수 있습니다. 이 클래스는 콘솔과 파일 모두에 대한 로깅을 지원하며, 로그를 일반 폴더와 CSV 형식으로 저장할 수 있습니다. 또한 특정 키워드를 기반으로 로그를 무음 처리하여 민감한 정보가 기록되지 않도록 하는 기능도 제공합니다. 이 클래스는 다양한 디버깅 및 모니터링 요구 사항을 충족하는 사용자 지정 가능한 기능을 통해 MQL4/5 애플리케이션에서 강력한 로깅 메커니즘을 구현하려는 개발자에게 이상적입니다.
Author: VitalDefender Inc.