다음 질문에 대한 해결책을 찾으려고합니다.패키지 종속성 및 초기화
- 목표는 모든 로그를 파일에 기록하는 것입니다.
- 패키지 본체 수입 패키지 A. 패키지 본체에
- 메인 방법에서, 로깅
- 패키지 A는 초기화 기능을 갖는 파일을 작성하는 설정이다. A의 init 함수에는 로그 라인 log.Fatal ("I package A")이 있습니다.
- 메인 패키지 가져 오기 이후 A의 init 함수가 먼저 호출됩니다 (파일에 기록 할 로그를 설정하기도 전에).
"I 패키지 A"라는 로그가 파일에 쓰여지므로이를 해결하는 방법은 무엇입니까? main
및 A
모두 가져 당신이 초기화하는 동안 파일에 기록 할 앱 부분에 직접 또는 간접적으로 의존하지 않는 log
패키지 밖으로
고마워요! 로그 패키지로 추출하면 여러 프로젝트에서 사용하기 때문에 모든 프로젝트에서 액세스 할 수있는 공통 위치에 배치합니다. 그런 다음 로그 패키지의 함수에 매개 변수를 전달하고 로그 할 파일 이름을 설정하려고합니다. 패키지 A가 init 함수에 로깅하고 있기 때문에 문제가 다시 발생하지만 로그에 파일 이름을 설정하면 패키지 A가 이미 기록됩니다. – sat
그래, 각 프로젝트가 자체 로그 위치를 설정하면 loc.-setting 코드가 먼저 실행되어야하며, 어떤 종류의 프로젝트가 프로젝트 당'log' 패키지로 인도되어야합니다. 또는 하나의'log' 패키지가 프로그램 이름 (os.Args [0]) 또는 환경 또는 로그 구성 파일 또는 다른 전역을 기반으로 위치를 선택할 수 있습니다. 슈퍼 미친 짓을하고 싶다면,'log'는 구성 될 때까지'bytes.Buffer' 또는 임시 파일에 로그 할 수 있습니다. 그리고 나서 그 위치가 결정되면 모든 것을 "실제"로그에 복사합니다. 나는 마지막 옵션을 정말로 추천 할 수 없다. 하나의'log' 패키지가 프로젝트 당 파일이나 포크'log'를 선택하도록한다. – twotwotwo
물론입니다. 포인터를 가져 주셔서 감사합니다. 커맨드 라인 인수 나 환경 변수가 갈 길이라고 생각합니다. 모든 프로젝트가 변경 관리 관점에서 매력적이지는 않습니다. 나는 현재의 지식을 가지고 똑같은 것을 짐작할 수 있었을 것이다. 그러나 내가 프로그래밍을하기에는 새로운 것이기 때문에 내가 알지 못했던 쉬운 방법이 있는지 확인하고 싶었다. – sat