Repository: digitalocean/nginxconfig.io
File: src/nginxconfig/util/vue_backwards_compatibility.js (JavaScript)

Code before:

    // global error_log
    const [globalErrorLogPath, ...globalErrorLogLevel] = (globalLogging.errorLog || `${errorLogPathDefault} ${errorLogLevelDefault}`).split(' ');
    const globalErrorLogEnabled = 
        !('errorLog' in globalLogging) || // errorLog was enabled by default and might not appear at all
        globalErrorLogPath !== '/dev/null'; // *or* someone turned it off explicitly

    // set global access_log / error_log files for every domain UNLESS it was explicitly
    // enabled for the domain
    for (const key in data.domains) {
        if (!Object.prototype.hasOwnProperty.call(data.domains, key)) continue;

        const perDomainServer = 'server' in data.domains[key] && isObject(data.domains[key].server) ? data.domains[key].server : {
            domain: serverDomainDefault,
        };
        const perDomainLogging = 'logging' in data.domains[key] && isObject(data.domains[key].logging) ? data.domains[key].logging : {};

        // access_log
        let accessLogEnabled = globalAccessLogEnabled,
            accessLogPath = globalAccessLogPath;
        const accessLogParameters = globalAccessLogParameters.join(' ') || accessLogParamsDefault;

        const perDomainAccessLogEnabled = !!perDomainLogging.accessLog;
        if (perDomainAccessLogEnabled) {
            accessLogEnabled = true;
            accessLogPath = `/var/log/nginx/${perDomainServer.domain}.access.log`;
        }

        // error_log
        let errorLogEnabled = globalErrorLogEnabled,
            errorLogPath = globalErrorLogPath;
        const errorLogLevel = globalErrorLogLevel.join(' ') || errorLogLevelDefault;
        
        const perDomainErrorLogEnabled = !!perDomainLogging.errorLog;
        if (perDomainErrorLogEnabled) {
            errorLogEnabled = true;
            errorLogPath = `/var/log/nginx/${perDomainServer.domain}.error.log`;
        }

        data.domains[key].logging = {
            ...perDomainLogging,
            accessLogEnabled,
            accessLogPath,
            accessLogParameters,
            errorLogEnabled,
            errorLogPath,
            errorLogLevel,
        };
    }
};


Review comment (bug):
This is wrong -- it should be using the old logic that took the global logic path and did a search/replace to inject the domain.

```
global.logging.accessLog.computed.replace(/([^/]+)\.log$/, `${domain.server.domain.computed}.$1.log`);
```

Code after:
    const [globalErrorLogPath, ...globalErrorLogLevel] = (globalLogging.errorLog || `${errorLogPathDefault} ${errorLogLevelDefault}`).split(' ');
    const globalErrorLogEnabled = 
        !('errorLog' in globalLogging) || // errorLog was enabled by default and might not appear at all
        (globalErrorLogPath !== '' && globalErrorLogPath !== errorLogPathDisabled); // *or* someone turned it off explicitly

    // set global access_log / error_log files for every domain UNLESS it was explicitly
    // enabled for the domain
    for (const key in data.domains) {
        if (!Object.prototype.hasOwnProperty.call(data.domains, key)) continue;

        const perDomainServer = {
            domain: serverDomainDefault,
            ...('server' in data.domains[key] && isObject(data.domains[key].server) ? data.domains[key].server : {}),
        };
        const perDomainLogging = 'logging' in data.domains[key] && isObject(data.domains[key].logging) ? data.domains[key].logging : {};

        // access_log
        let accessLogEnabled = globalAccessLogEnabled,
            accessLogPath = globalAccessLogPath;
        const accessLogParameters = globalAccessLogParameters.join(' ') || accessLogParamsDefault;

        const perDomainAccessLogEnabled = !!perDomainLogging.accessLog;
        if (perDomainAccessLogEnabled) {
            accessLogEnabled = true;
            accessLogPath = accessLogPath.replace(/([^/]+)\.log$/, `${perDomainServer.domain}.$1.log`);
        }

        // error_log
        let errorLogEnabled = globalErrorLogEnabled,
            errorLogPath = globalErrorLogPath;
        const errorLogLevel = globalErrorLogLevel.join(' ') || errorLogLevelDefault;
        
        const perDomainErrorLogEnabled = !!perDomainLogging.errorLog;
        if (perDomainErrorLogEnabled) {
            errorLogEnabled = true;
            errorLogPath = errorLogPath.replace(/([^/]+)\.log$/, `${perDomainServer.domain}.$1.log`);
        }

        data.domains[key].logging = {
            accessLogEnabled,
            accessLogPath,
            accessLogParameters,
            errorLogEnabled,
            errorLogPath,
            errorLogLevel,
            ...perDomainLogging,
        };
    }
};

// Handle converting the old query format to our new query params